많은 프로그램 언어에 자료형이 있는 것 처럼 SQL에도 자료형이 있다.

 

정수형

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

만약 범위를 벗어나는 값을 입력할 경우 Out of range 오류가 발생한다.

오버플로우가 일어나는 다른 언어들과는 다른 부분

 

이 형태로 테이블을 만들 때는 아래 예시처럼 만든다.

CREATE TABLE tarelExample (
	int_1 TINYINT,
	int_2 SMALLINT,
	int_3 INT,
	int_4 BIGINT
);

 

만들어진 모습, 사진 속 SQL이 약간 다른데, db를 선택해주는 부분이 추가되었다.

 

 

문자형

문자형은 두 가지가 있다.

데이터 형식 바이트
CHAR(원하는 숫자) 1~255
VARCHAR(원하는 숫자) 1~16383

 

괄호안의 원하는 숫자는 문자의 최대 길이라고 보면 된다.

즉 CHAR(10)은 최대 10글자라는 뜻이다.

VARCHAR는 가변길이 문자열로 VARCHAR(10)에 3글자를 저장하면 3자리만 사용하고 남은 7자리는 차지하지 않는다.

반면 CHAR(10)에 3글자를 저장하면 7자리의 공간낭비가 발생한다.

 

이렇게 보면 VARCHAR이 더 좋아보이지만 공간 효율은 VARCHAR가 더 좋으나 시간 효율은 CHAR이 더 좋다.

 

긴 문자열

만약 블로그에 장문의 소설을 작성한다면 그 많은 글자를 어떻게 저장해야 할까?

이 때 사용하는 것이 TEXT, BLOB형식으로 자주 사용하는건 총 4가지가 있다.

데이터 형식 바이트 수
TEXT 형식 TEXT 1~65535
LONGTEXT 1~4294967295
BLOB 형식 BLOB 1~65535
LONGBLOB 1~4294967295

이 외에도 TINYTEXT, MEDIUMTEXT, TINYBLOB, MEDIUMBLOB도 있지만 잘 안쓴다.

 

BLOB는 글자가 아닌 이미지나 동영상 등의 데이터로 이러한 것을 이진 데이터라고 한다.

즉, 사진이나 영상등을 저장하고 싶다면 BLOB형식으로 저장해야 한다.

 

실수형

소숫점으로 총 2가지가 있다.

데이터 형식 바이트 수 설명
FLOAT 4 소숫점 7자리까지
DOUBLE 8 소숫점 15자리까지

특별한 경우가 아닌 이상 FLOAT를 쓰면 된다.

 

날짜형

날짜와 시간으로 총 3가지가 있다.

데이터 형식 바이트 수 설명
DATE 3 날짜만 저장, YYYY-MM-DD 형식
TIME 3 시간만 저장, HH:MM:SS 형식
DATETIME 8 날짜와 시간을 저장, YYYY-MM-DD HH:MM:SS 형식

 

변수

일반적인 프로그래밍 언어처럼 변수를 선언하고 사용하기 위한 용도

이름 역할
SET 변수를 선언 및 값을 대입
SELECT 변수의 값을 출력

아래와 같이 사용한다.

SET @newVar1 = 5;
SET @newVar2 = 10;
SET @Name = "Tarel 베이스";
SELECT @newVar1 + newVar2;
SELECT @Name;

 

이런식으로 출력된다.

 

최하단의 SELECT @Name 이 없으면 이렇게 출력
변수를 이런식으로 사용하는 것도 가능

형변환

문자를 정수로 바꾸거나 반대로 정수를 문자로 바꾸는 것으로 직접 함수를 사용하는 명시적 변환과 그런거 없이 자련스럽게 바뀌는 암시적인 변환이 있다.

 

명시적인 변환

함수는 두 종류가 있고 아래와 같이 사용한다.

CAST(값 AS 데이터 형식 [길이])
CONVERT(값 또는 데이터 형식 [길이])

 

직접 써보자

문자열 2022$12$12를 DATE로 변환한 모습, 잘 변환 되었다.

 

 

암시적인 변환

CAST()나 CONVERT() 없이 자연스럽게 형변환이 일어나는 것이다.

SELECT '100' + '200';

 

문자열 100과 문자열 200을 더했다.

이때, 문자열은 자연스럽게 숫자형으로 변환되며 300을 출력한다.

그렇다면 100과 200을 이어붙이는, 100200 을 만들고 싶다면 어떨까?

SELECT CONCAT('100','200');

CONCAT은 파라미터 내의 요소를 이어붙여주는 역할을 한다.

100200이 되었다.

 

 

+ Recent posts