Data Analysis/혼공SQL

[혼공SQL] 4-1 MySQL의 데이터 형식

알밤바 2022. 6. 23. 10:49
728x90
반응형

본 포스팅은 '한빛출판네트워크'의 '혼공SQL' 책을 기반으로 작성한 포스팅입니다.

1. 데이터 형식

1.1 정수형

데이터 형식 바이트 수 숫자 범위
TINYINT 1 -128~127
SMALLINT 2 -32,768~32,767
INT 4 약 -21억~+21억
BIGINT 8 약 -900경~+900경

 

  • 정수형 데이터를 확인하기 위해 테이블을 만들어보자.
use market_db;

create table hongong4 (
	tinyint_col tinyint,
    smallint_col smallint,
    int_col int,
    bigint_col bigint);

 

  • 각 열의 최댓값을 입력해보자.
insert into hongong4 values (127, 32767, 2147483647, 90000000000000000);

 

  • 최댓값에서 1을 더해보자.
insert into hongong4 values (128, 32768, 2147483648, 90000000000000001);

→ 입력값의 범위를 벗어났다는 오류가 발생함

 

📌 UNSIGNED 예약어

  • 값의 범위가 0부터 시작됨
  • 예시
    • TINYINT : -128 ~ 127 (1바이트 크기)
    • TINYINT UNSIGNED : 0 ~ 255 (1바이트 크기)

 

1.2 문자형

  • 문자형은 글자를 저장하기 위해 사용
  • 입력할 최대 글자의 개수를 지정

데이터 형식 바이트 수

데이터 형식 바이트 수
CHAR(개수) 1~255
VARCHAR(개수) 1~16383
  • CHAR
    • 고정길이 문자형 (자릿수가 고정)
    • MySQL 내부적으로 성능이 좋음 (속도가 빠름)

 

  • VARCHAR
    • 가변길이 문자형
    • CHAR보다 공간을 효율적으로 운영할 수 있음

 

  • CHAR은 글자의 개수가 고정된 경우, VARCHAR은 글자의 개수가 변동될 경우 사용하면 좋음
  • 전화번호의 경우, 모두 숫자로 이루어져 정수형으로 지정해야 할 것 같지만,
  • 숫자로서 의미가 없기에 문자형으로 지정
  • 숫자로서 의미를 가지기 위한 조건
    • 더하기/뺴기 등의 연산에 의미가 있음
    • 크다/작다 또는 순서에 의미가 있음

 

1.3 대량의 데이터 형식

create table big_table (
	data1 char(256),    --char은 255까지
    data2 varchar(16384));   --varchar은 16383까지

→ 열의 길이를 기준 이상으로 두어 에러가 발생함

 

  • 대량의 데이터 형식
  데이터 형식 바이트 수
TEXT 형식 TEXT 1 ~ 645535
  LONGTEXT 1 ~ 4294967295
BLOB 형식 BLOB 1 ~ 65535
  LONGBLOB 1 ~ 4294967295

 

  • TEXT : 글자 / LONGTEXT는 주로 소설이나 영화 대본과 같은 내용을 저장할 때 필요한 형식
  • BLOB : Binary Long Object / 이미지, 동영상 등의 데이터 (이진 데이터)

 

  • 대량의 데이터 테이블 예제
create database netflix_db;
use netflix_db;
create table movie
( movie_id       int,
  movie_title    varchar(30),
  movie_director varchar(20),
  movie_star     varchar(20),
  movie_script   longtext,  -- 자막 (최대 4GB 입력)
  movie_film     longblob)  -- 동영상 (최대 4GB 입력)

 

1.4 실수형

  • 소수점이 있는 숫자를 저장할 때 사용
  • 과학 기술용 데이터가 아닌 이상 FLOAT면 충분함
  • 실수형 예시 : 시력 (2.0, 1.5, 0.7,...)
데이터 형식 바이트 수 설명
FLOAT 4 소수점 아래 7자리까지 표현
DOUBLE 8 소수점 아래 15자리까지 표현

 

1.5 날짜형

  • 날짜 및 시간을 저장할 때 사용
데이터 형식 바이트 수 설명
DATE 3 날짜만 저장 / YYYY-MM-DD 형식으로 사용
TIME 3 시간만 저장 / HH:MM:SS 형식으로 사용
DATETIME 8 날짜 및 시간을 저장 / YYYY-MM-DD HH:MM:SS 형식으로 사용

 

2. 변수의 사용

  • SQL도 다른 일반적인 프로그래밍 언어처럼 변수를 선언하고 사용할 수 있음
set @변수이름 = 변수의 값 ;     -- 변수의 선언 및 값 대입
select @변수이름;               -- 변수의 값 출력

 

  • 변수는 MySQL 워크벤치를 재시작할 때까지는 유지되지만, 종료하면 없어짐 (임의로 사용)
use market_db;
set @myVar1 = 5;      -- 변수 선언 및 값(정수) 대입
set @myVar2 = 4.25;   -- 변수 선언 및 값(실수) 대입

select @myVar1;       -- 변수의 값 출력
select @myVar1 + @myVar2;     -- 변수끼리 연산 후 값 출력

 

set @txt = '가수 이름 ==> ';    -- 변수 선언 및 값(문자열) 대입
set @height = 166;

select @txt, mem_name from member where height > @height;  -- 테이블 조회 시 변수 활용

 

  • LIMIT에는 변수를 사용할 수 없음
  • 이를 해결하는 것이 PREPARE과 EXECUTE임
  • PREPARE은 실행하지 않고 SQL만 준비해 놓고 EXECUTE에서 실행하는 방식
set @count = 3;       -- 변수에 값 대입
-- mySQL이라는 이름으로만 준비
-- ? : 현재는 모르지만 나중에 채워지는 수
prepare mySQL from 'select mem_name, height from member order by height limit ?' ;
-- mySQL에 저장된 select 문을 실행할 때 USING으로 물음표에 변수의 값을 대입
execute mySQL using @count ;

 

3. 데이터 형 변환

  • 명시적인 변환 (explicit conversion) : 직접 함수를 사용하여 변환
  • 암시적인 변환 (implicit conversion) : 별도의 지시 없이 자연스럽게 변환

 

3.1 명시적인 변환

  • 데이터 형식을 변환하는 함수 : CAST(), CONVERT()
  • (형식만 다를 뿐 동일한 기능을 함)
CAST ( 값 AS 데이터_형식 [ (길이) ] )
CONVERT (값, 데이터_형식 [ (길이) ] )

 

  • 평균가격이 실수로 표현됨
select avg(price) as '평균가격' from buy;

 

  • 가격이니 실수가 아닌 정수로 표현해보자.
    • CAST(), CONVERT() 함수 사용
    • 함수 안에 올 수 있는 데이터 형식 : CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME 등
    • SIGNED : 부호가 있는 정수, UNSIGNED : 부호가 없는 정수
select cast(avg(price) as signed) '평균 가격' from buy;
-- 또는
select convert(avg(price), signed) '평균 가격' from buy;

 

  • 날짜에 있는 다양한 구분자를 날짜형으로 변경 가능
select cast('2022/12/12' as date);
select cast('2022$12$12' as date);
select cast('2022%12%12' as date);
select cast('2020@12@12' as date);

 

  • 가격(price)과 수량(amount)을 곱한 실제 구매액 표시
select num, concat(cast(price as char), 'x', cast(amount as char), '=') '가격x수량',
	price*amount '구매액'
  from buy;

  • 가격과 수량은 정수지만 CAST()함수를 통해 문자로 바꿈
  • CONCAT() 함수는 문자를 어어주는 역할을 함

 

3.2 암시적인 변환

CAST()나 CONVERT() 함수를 사용하지 않고도 자연스럽게 형이 변환되는 것

 

  • 문자를 더할 수 없으므로 자동으로 숫자로 변환
select '100' + '200';

 

  • '100200' 만들기
select concat('100', '200');

 

  • 숫자형과 문자형 더하기
select concat (100, '200');

 

select 100 + '200';

숫자와 문자를 연산할 때 CONCAT()을 사용하면 숫자가 문자로 변하고, 더하기만 사용하면 문자가 숫자로 변한 후에 연산됨

728x90
반응형