데이터 형식을 제대로 이해하면, 효율적으로 SQL을 활용할 수 있다. MYSQL에서 제공하는 데이터형을 먼저 알아보자.
정수형
데이터 형식 | 바이트 수 | 숫자 범위 |
TINYINT | 1 | -128 ~ 127 |
SMALLINT | 2 | -32,768 ~ 32,767 |
INT | 4 | 약 -21억 ~ 21억 |
BIGINT | 8 | 약 -900경 ~ 900경 |
나이를 지정할 때 TINYINT를 사용하기도 한다. 키의 경우 127CM를 넘는 사람들이 많기 때문에 TINYINT를 사용하면 범위가 부족하다. 이럴 때, 0부터 범위가 시작되는 UNSIGNED 예약어를 사용하면, 이를 해결할 수 있다.
USE market_db;
CREATE TABLE member
(mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
mem_number TINYINT NOT NULL,
addr CHAR(2) NOT NULL,
phone1 CHAR(3), -- 국번(02, 031 ...)
phone2 CHAR(8),
height TINYINT UNSIGNED, -- UNSIGNED 붙이면 0부터 범위 지정
debut_date DATE
);
문자형
데이터 형식 | 바이트 수 |
CHAR(개수) | 1~255 |
VARCHAR(개수) | 1~16383 |
문자형 데이터는 글자를 저장하기 위해 사용하며, 최대 글자 개수를 지정해주어야 한다. CHAR은 고정길이 문자형으로, 지정한 자릿수 만큼의 저장 공간을 사용한다. 반면, VARCHAR은 가변길이 문자형으로 VARCHAR(10)에 3글자만 저장하면, 저장공간으로 3자리만 사용한다. *MYSQL 성능면에서는 CHAR로 설정하는 것이 더 좋다.
대량의 데이터 형식
문자형 데이터에서 다루지 못하는 더 큰 데이터를 저장하려면 다음과 같은 형식을 사용한다.
데이터 형식 | 바이트 수 | |
TEXT | TEXT | 1 ~ 65535 |
LONGTEXT | 1 ~ 4294967295 | |
BLOB | BLOB | 1 ~ 65535 |
LONGBLOB | 1 ~ 4294967295 |
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,
movie_film LONGBLOB
);
실수형
데이터 형식 | 바이트 수 | 설명 |
FLOAT | 4 | 소수점 아래 7자리까지 표현 |
DOUBLE | 8 | 소수점 아래 15자리 |
날짜형
데이터 형식 | 바이트 수 | 설명 |
DATE | 3 | 날짜만 저장. YYYY-MM-DD |
TIME | 3 | 시간만 저장. HH:MM:SS |
DATETIME | 8 | 둘 다. YYYY-MM-DD HH:MM:SS |
변수의 사용
SQL도 변수 선언 및 사용이 가능하다.
SET @변수이름 = 변수 값 ; -- 변수 선언 및 값 대입
SELECT @변수이름 ; -- 변수 값 출력
SQL에서는 문법상으로 변수를 사용하지 못하는 오류가 일어날 수 있다. 그럴 때 사용하는 것이 PREPARE과 EXECUTE이다.
SET @count = 3;
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
EXECUTE mySQL USING @count;
PREPARE을 통해 아직 사용하지 않는 SQL문을 준비해두고, 추후에 EXECUTE ~ USING을 사용해 실행할 수 있다. 이 때 PREPARE 구문에 꼭 ?를 붙여야 한다.
데이터 형 변환
CAST (값 as 데이터_형식 [(길이)])
CONVERT (값, 데이터_형식 [(길이)])
이 때 올 수 있는 데이터 형식은 CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME 등이 있다.
하지만 CAST(), CONVERT()함수를 사용하지 않고 자연스럽게 형을 변환할 수도 있다.
SELECT CONCAT(100, '200');
이렇게 문자와 숫자를 연결했을 때, 자연스럽게 100이 문자 '100'으로 변환되어 '100200'이라는 결과를 출력한다.
'Study > SQL' 카테고리의 다른 글
JOIN (1) | 2022.07.31 |
---|---|
COMPANY DB SQL문 (0) | 2022.07.20 |
SQL 기본 문법 (0) | 2022.07.16 |