본문 바로가기

코딩공부

[SQL] 데이터 타입과 변환, 변수 선언

✍️ Study Note

 

 

 


 

 

 

 

데이터 타입

1. 숫자

데이터 형식 설명 범위
BIN 1~62 bit 표현  
TINYINT 정수 +- 127
SAMLLINT 정수 +- 3만
MEDIUMINT 정수 +- 8천
INT 정수 +- 21억
BIGINT 정수 +- 900경
FLOAT 정수 + 소수점 소수점 7자리까지
DOUBLE REAL 정수 + 소수점 소수점 15자리까지
DECIMAL(M,D) 정수 + 소수점 M = 자릿수
D = 소숫점 이하 자릿수

 

2. 문자

데이터형식 설명 범위
CHAR 고정 길이의 문자 ~ 255
VARCHAR 가변 길이의 문자 ~ 6만
BINARY 고정 길이의 이진 데이터 ~ 255
VARBINARY 가변 길이의 이진 데이터 ~ 255
TEXT TINY TEXT TEXT ~ 255
TEXT TEXT ~ 6만
MEDIUMTEXT TEXT ~ 1600만
LONGTEXT TEXT
LOB(Large Object) 저장
~ 42억
BLOB TINYBLOB BLOB ~ 255
BLOB BLOB ~ 6만
MEDIUMBLOB BLOB ~ 1600만
LONGBLOB BLOB
LOB(Large Object) 저장
~ 42억
ENUM (값들..) 열거형 데이터  
SET (값들..) 서로 다른 데이터  

 

3. 날짜

데이터 형식 설명
DATE 'YYYY-MM-DD'
TIME 'HH:MM:SS'
DATETIME 'YYYY-MM-DD HH:MM:SS'
TIMESTAMP 'YYYY-MM-DD HH:MM:SS'
UTC 시간대 변환하여 저장
YEAR 'YYYY'

 

 

변수

1. 변수 선언

-- 변수선언
set @myvar1 = 5;
set @myvar2 = 3;
set @myvar3 = 4.25;
set @myvar4 = '가수이름 ==> ';

select @myvar1 ;
select @myvar4 , name from usertbl where height > 180;

- SET 변수이름 = 변수 값

 

2. 변수와 PREPARE, EXECUTE 구문

SET @MYVAR1 = 3;
PREPARE MYQUERY
	FROM 'SELECT NAME, HEIGHT FROM USERTBL ORDER BY HEIGHT LIMIT?';
EXECUTE MYQUERY USING @MYVAR1;
-- ? 에 변수 3 대입됨. LIMIT 3으로 쿼리 실행

- PREPARE : '쿼리문' 대기

- EXECUTE : '쿼리문' 실행

- USING 변수이름 : '쿼리문'에서 '?' 자리에 변수가 대입되어 실행.

 

 

 

데이터 타입 변환

1. 명시적 변환

CAST, CONVERT 함수 사용하여 명확하게 변환

SELECT CAST(AVG(AMOUNT) AS SIGNED INTEGER) FROM BUYTBL;
SELECT CONVERT(AVG(AMOUNT), SIGNED INTEGER) 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로 변환

SELECT NUM, 
	CONCAT(CAST(PRICE AS CHAR(10)), 'x', CAST(AMOUNT AS CHAR(4)), '=') AS '단가 X 수량', 
        PRICE*AMOUNT AS '구매액'
FROM BUYTBL;

- CAST (변환 대상 AS 데이터 형식) 

- CONVER (변환 대상, 데이터 형식)

 

 

2. 암시적 변환

함수사용 없이 쿼리문 요청에 따라 암시적으로 변환

SELECT '100' + '200'; -- [결과 : 300] 문자가 정수로 변환되어 더해짐
SELECT CONCAT(100 + '200'); -- [결과 : 100200] 정수가 문자로 변환되어 합쳐짐
SELECT 1 > '2MEGA'; -- [결과 : 0 (FALSE)] '2MEGA'가 정수 2로 변환되었고, 해당 산식은 FALSE임

- 암시적 변환에서 문자는 정수 0으로 변환됨.