[DB_MySQL] 이것이 MySQL이다 ch07 SQL 고급 1(데이터 형식, 변수 사용, 형 변환)
bobo122023. 2. 7. 14:27
728x90
반응형
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 반환