1. MySQL의 데이터 형식
◎ MySQL에서 지원하는 데이터 형식의 종류
▷ Data Type으로 표현
▶ 데이터 형식, 데이터형, 자료형, 데이터 타입 등 다양하게 불림
▷ 데이터 형식에 대한 이해가 필요한 이유
▶ SELECT문 더욱 잘 활용
▶ 테이블의 생성을 효율적으로 하기 위해 필요
▷ MySQL에서 데이터 형식의 종류는 30개 정도
▶ 중요하고 자주 쓰는 형식에 대해 중점 학습
◎ 숫자 데이터 형식
NO | 데이터 형식 | 바이트 수 | 숫자 범위 | 설명 |
1 | BIT(N) | N/8 | 1~64bit를 표현. b'0000' 형식으로 표현 | |
2 | TINYINT | 1 | -128 ~ 127 | 정수 |
3 | ★SMALLINT | 2 | -32,768 ~ 32,767 | 정수 |
4 | MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 | 정수 |
5 | ★INT INTEGER |
4 | 약 -21억 ~ + 21억 | 정수 |
6 | ★BIGINT | 8 | 약 -900 경 ~ +900경 | 정수 |
7 | ★FLOAT | 4 | -3.40E+38 ~ -1.17E-38 | 소수점 아래 7자리까지 표현 |
8 | DOUBLE REAL |
8 | -1.22E-308 ~ 1.79E+308 | 소수점 아래 15자리까지 표현 |
9 | ★DECIMAL(m,[d]) NUMERIC(m,[d]) |
5~17 | -10^38+1 ~ +10^38-1 | 전체 자릿수(m)와 소수점 이하 자릿수(d)를 가진 숫자형 예) decimal(5,2)는 전체 자릿수를 5자리로 하되, 그 중 소수점 이하를 2자리로 하겠다는 의미 |
◎ 문자 데이터 형식
NO | 데이터 형식 | 바이트 수 | 설명 | |
1 | ★CHAR(n) | 1~255 | 고정길이 문자형, n을 1부터 255까지 지정. character의 약자, 그냥 CHAR만 쓰면 CHAR(1)과 동일 |
|
2 | ★VARCHAR(n) | 1~65535 | 가변길이 문자형, n을 사용하면 1부터 65535까지 지정. Variable character의 약자 |
|
3 | BINARY(n) | 1~255 | 고정길이의 이진 데이터 값 | |
4 | VARBINARY(n) | 1~255 | 가변 길이의 이진 데이터 값 | |
5 | TEXT 형식 |
TINYTEXT | 1~255 | 255 크기의 TEXT 데이터 값 |
6 | TEXT | 1~65535 | N 크기의 TEXT 데이터 값 | |
7 | MEDIUMTEXT | 1~16777215 | 16777215 크기의 TEXT 데이터 값 | |
8 | ★LONGTEXT | 1~4294967295 | 최대 4GB 크기의 TEXT 데이터 값 | |
9 | BLOB 형식 |
TINYBLOB | 1~255 | 255 크기의 BLOB 데이터 값 |
10 | BLOB | 1~65535 | N 크기의 BLOB 데이터 값 | |
11 | MEDIUMBLOB | 1~16777215 | 16777215 크기의 BLOB 데이터 값 | |
12 | ★LONGBLOB | 1~4294967295 | 최대 4GB 크기의 BLOB 데이터 값 | |
13 | ENUM(값들...) | 1 또는 2 | 최대 65535개의 열거형 데이터 값 | |
14 | SET(값들...) | 1, 2, 3, 4, 8 | 최대 64개의 서로 다른 데이터 값 |
◎ 날짜와 시간 데이터 형식
NO | 데이터 형식 | 바이트 수 | 설명 | |
1 | ★DATE | 3 | 날짜는 1001-01-01 ~ 1999-12-31까지 저장되며 날짜 형식만 사용 'YYYY-MM-DD' 형식으로 사용됨. |
|
2 | TIME | 3 | -838:89:59.000000 ~ 838:59:59.000000까지 저장되며. 'HH:MM:SS' 형식으로 사용 |
|
3 | ★DATETIME | 8 | 날짜는 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 저장되며 형식은 'YYYY-MM-DD HH:MM:SS' 형식으로 사용됨. |
|
4 | TIMESTAMP | 4 | 날짜는 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 저장되며 형식은 'YYYY-MM-DD HH:MM:SS' 형식으로 사용됨. time_zone 시스템 변수와 관련이 있으며 UTC 시간대 변환하여 저장 |
|
5 | YEAR | 1 | 255 크기의 TEXT 데이터 값 |
◎ 기타 데이터 형식
NO | 데이터 형식 | 바이트 수 | 설명 |
1 | ★GEOMETRY | N/A | 공간 데이터 형식으로 선, 점 및 다각형 같은 공간 데이터 개체를 저장하고 조작 |
2 | ★JSON | 8 | JSON(JavaScript Object Notation) 문서를 저장 |
◎ LONGTEXT, LONGBLOB
▷ LOB(Large Object, 대량의 데이터)을 저장하기 위해 LONGTEXT, LONGBLOB 데이터 형식 지원
▷ 지원되는 데이터 크기는 약 4GB의 파일을 하나의 데이터로 저장 가능
▷ LONGTEXT
▶ ex) 장편소설과 같은 큰 텍스트 파일
▷ LONGBLOG
▶ ex) 동영상 파일과 같은 큰 바이너리 파일
◎ 변수의 사용
▷ Workbench를 재시작할 때까지는 계속 유지, Workbench를 닫았다가 재시작하면 소멸
▷ 변수의 선언과 값의 대입 형식
SET @변수이름 = 변수의 값; -- 변수의 선언 및 값 대입 SELECT @변수이름; -- 변수의 값 출력
◎ 변수 사용 예제
-- 변수 사용 use sqldb; set @myVar1 = 5; set @myVar2 = 3; set @myVar3 = 4.25; set @myVar4 = '가수 이름==> '; select @myVar1; select @myVar2 + @myVar3; select @myVar4, Name from usertbl where height > 180;
◎ 데이터 형식과 형변환
▷ 데이터 형식 변환 함수
▶ CAST(), CONVER() 함수를 가장 일반적으로 사용
▶ 데이터 형식 중에서 가능한 것은 BINARY, CHAR, DATE, DATETIME, DECIMAL, JSON,
SIGNED INTEGER, TIME, UNSIGNED INTEGER
▶ 함수 사용법
cast(expression as 데이터형식 [(길이)]) convert(expression, 데이터형식 [(길이)])
ex) sqlDB의 구매 테이블(buyTbl)에서 평균 구매 개수를 구하는 쿼리문select cast(avg(amount) as signed integer) as '평균 구매 개수' from buytbl; -- 또는 select convert(avg(amount) as signed integer) as '평균 구매 개수' from buytbl;
◎ 실수를 정수로 변환시 형변환 예제-- 실수 -> 정수로 형 변환시 자동으로 반올림 적용 select distinct prodName as '물품명', price as '원가격', @salevar as '할인율', cast(price*(1-@salevar) as signed integer) as '할인 가격' from buytbl; select distinct prodName as '물품명', price as '원가격', @salevar as '할인율', convert(price*(1-@salevar), signed integer) as '할인 가격' from buytbl;
아래와 같이 동일한 결과 값이 출력됩니다.
◎ 날짜 형태로 자동 변환select cast('2020$12$12' as date); select cast('2020/12/12' as date); select cast('2020%12%12' as date); select cast('2020@12@12' as date); -- 2020-12-12 반환
◎ 정수를 문자형으로 자동형 변환-- 형 변환 -> 정수를 문자형 -- num, 단가 X, 수량, 구매액 -- concat 단어와 단어를 이어주는 함수 select num, concat(cast(price as char(10)), 'x', cast(amount as char(4)), '=') as '단가x수량', price*amount as '구매액' from buytbl
▷ 암시적인 형 변환
▶ CAST()나 CONVERT() 함수를 사용하지 않고 형이 변환되는 것
-- 임시적 형 변환 : select '100' + '200'; -- 문자 + 문자 : + 사칙연산이 들어가면 문자를 숫자로 인식해서 계산 -- 300 반환 select concat('100', '200'); -- concat (문자열 연결) -- 100200 반환 select concat(100, '200'); -- 100200 반환 select 1 > '2mega'; -- 숫자 비교 연산 : 문자 -> 숫자 1>2 거짓(0), 참(1) -- 0 반환 select 3 > '2MEGA'; -- 1 반환 select 0 = 'mega2'; -- mega가 앞쪽에 있으면 0으로 인식합니다. 0 = 0 (t, 1) -- 0 반환
SQL의 데이터 형식과 변수, 함수 사용 방법 등을 공부해보았습니다!!
변수쪽으로 들어가니까 점점 더 어려워지네요,,,
다른 구문들에 대해서도 정리해 보겠습니다!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~