5. 자료형과 필터링

1. 자료형

자료형은 데이터의 형태를 의미하며, 데이터가 가질 수 있는 값의 종류와 메모리에서 차지하는 크기를 결정한다.

적절한 자료형을 선택하지 않으면 메모리 낭비가 발생하거나 연산 제약이 생길 수 있다.

데이터베이스에서 사용하는 자료형은 크게 숫자형, 문자형, 날짜 및 시간형으로 나뉜다.

 

1.1. 숫자형 (Numeric Types)

숫자형 데이터는 정수형과 실수형으로 나뉜다. 

 

1) 정수형 (Integer Types)

정수형은 소수점이 없는 숫자를 저장하며, 차지하는 메모리 크기에 따라 여러 종류가 있다.

정수형을 저장할 때 UNSIGNED를 붙이면 음수를 제거하고 양수의 범위를 2배로 늘릴 수 있다.

단순한 값을 저장하기 때문에 정확한 값을 빠르게 처리한다.

 

자료형 크기 (byte) 값의 범위 (Signed) 값의 범위 (Unsigned)
TINYINT 1 -128 ~ 127 0 ~ 255
SMALLINT 2 -32,768 ~ 32,767 0 ~ 65,535
MEDIUMINT 3 -8,388,608 ~ 8,388,607 0 ~ 16,777,215
INT(INTEGER) 4 -2,147,483,648 ~ 2,147,483,647 0 ~ 4,294,967,295
BIGINT 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615

 

 

2) 실수형 (Floating Point & Fixed Point Types)

실수형은 부동소수점 방식과 고정소수점 방식으로 나뉜다.

 

부동소수점 방식 (Floating Point)

부동소수점 방식은 소수점의 위치가 고정되지 않는 실수를 저장한다.

숫자를 가수와 지수로 나누어 모든 수를 소수점 위 한자리만 있는 가수로 바꾼 후 지수를 조정해 숫자를 표현한다.

특정 소수점 자릿수 이하의  숫자를 정확하게 저장하지 못한다.

 

ex) 1234.56 = 1.23456(가수) * 10^3(지수)

자료형 크기 (byte) 소수점 이하 자리수 표현 범위
FLOAT 4 ~7자리 ±1.5 × 10⁻⁴⁵ ~ ±3.4 × 10³⁸
DOUBLE 8 ~15자리 ±2.2 × 10⁻³⁰⁸ ~ ±1.8 × 10³⁰⁸

 

 

고정소수점 방식 (Fixed Point)

고정 소수점 방식은 정확한 실수를 저장하기 위해 사용되며, DECIMAL(P, S) 형식으로 표현된다.

P는 최대 자릿수를 나타내며, S는 소수점 이하 자리수를 나타낸다.

표현할 수 있는 실수 범위가 제한적이지만, 정확한 실수를 저장가능하고 계산 속도가 빠르다.

 

ex) DECIMAL(5, 2) : 최대 5자리 숫자. 그중 2자리는 소수점 이하 자리

자료형 설명
DECIMAL(P, S) P는 전체 자리수, S는 소수점 이하 자리수
NUMERIC(P, S) DECIMAL과 동일한 기능

 

 

1.2. 문자형 (Character Types)

문자 데이터를 저장하는 자료형에는 고정 길이, 가변 길이, 긴 문자열, 바이너리 데이터 등이 있다.

 

CHAR

지정된 길이만큼의 고정된 메모리 공간을 차지한다.

예를 들어 CHAR(10)은 문자 10개를 담는데, 문자 4개만 저장해도 나머지를 공백으로 채워 10개를 차지하게 된다.

 

VARCHAR

실제 입력한 길이만큼만 메모리 공간을 차지한다.

예를 들어 VARCHAR(10)은 문자를 10개까지 저장할 수 있지만, 4개만 저장하면 4개를 저장할 수 있는 메모리만 차지한다.

CHAR에 비해 공간을 덜 차지하지만, 검색 속도가 더 느릴 수 있다.

 

TEXT

VARCHAR가 저장할 수 있는 문자열보다 긴 문자열을 저장할 때 사용된다.

크기에 따라 TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT로 나뉜다.

 

BLOB

크기가 큰 파일을 저장하기 위한 자료형으로, 이미지, 오디오, 비디오 파일 등을 저장할 때 사용된다.

 

ENUM

주어진 목록 중에서만 입력 가능하게 지정하는 자료형이다.

예를 들어 ENUM(1, 2, 3)이라고 선언하면 이 칼럼에는 1, 2, 3만 저장 가능하다.

 

자료형 설명
CHAR(N) 고정 길이 문자 저장 (최대 255자)
VARCHAR(N) 가변 길이 문자 저장 (최대 65,535자)
TEXT 긴 문자열 저장 (TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT)
BLOB 대용량 바이너리 데이터 저장 (TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB)
ENUM 지정된 목록에서 하나의 값 선택

 

 

1.3. 날짜 및 시간형 (Date & Time Types)

날짜와 시간을 저장하는 데이터 유형은 다음과 같다.

 

TIME

시간을 저장하기 위한 자료형으로, 두 시간의 차이도 표현 가능하다.

 

DATETIME

날짜와 시간을 함께 저장하는 자료형으로, 옵션에 따라 밀리초, 마이크로초 단위까지 지원 가능하다.

 

TIMESTAMP

UTC 기준으로 날짜와 시간을 저장하며, 타임존 변환이 자동으로 이루어진다.

일반적으로 로그 기록이나 변경 시간 추적 등에 사용된다.


YEAR

4자리 연도만을 저장하는 자료형으로, 예외적으로 연도를 알 수 없거나 명시하지 않는 경우를 위해 0000도 저장 가능하다.

참고로 1901부터 2155까지만 저장이 가능한데, 그 이유는 MySQL이 1바이트만 사용해 YEAR값을 저장하기 때문이다.

0을 0000으로 매핑하고, 1~255를 1901~2155년으로 매핑해 값을 저장한다.

 

자료형 형식 저장 범위
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-31
TIME HH:MM:SS -838:59:59 ~ 838:59:59
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 (UTC)
YEAR YYYY 0000, 1901 ~ 2155

 

 

2. 필터링

2.1. 문자열 필터링 (String Filtering)

특정 패턴과 일치하는 데이터를 찾을 때 LIKE 연산자를 사용한다.

이때 와일드카드를 이용해 패턴을 검색한다.

 

와일드카드

  • % : 0개 이상의 임의의 문자
  • _ : 정확히 1개의 임의의 문자

ex)

SELECT * FROM users WHERE name LIKE 'J%'; -- 'J'로 시작하는 모든 이름 검색
SELECT * FROM users WHERE email LIKE '%@gmail.com'; -- Gmail 주소 검색

 

2.2. 날짜 필터링 (Date Filtering)

날짜 함수는 특정 날짜 데이터를 추출하는 데 사용된다.

DATE와 DATETIME 값을 입력받아 결과를 반환한다.

함수 설명
YEAR(date) 연도 추출
MONTH(date) 월 추출
DAY(date) 일 추출
EXTRACT(part FROM date) 연, 월, 일 등 특정 부분 추출

 

ex)

SELECT YEAR(order_date) FROM orders; -- 주문 연도 추출
SELECT EXTRACT(MONTH FROM order_date) FROM orders; -- 주문 월 추출

 

2.3. 시간 필터링 (Time Filtering)

시간 데이터를 다룰 때 다음 함수를 사용한다.

TIME 또는 DATETIME값을 입력받아 결과를 반환하는데, TIME_TO_SEC는 TIME만 입력 가능하다.

함수 설명
HOUR(time) 시간 추출
MINUTE(time) 분 추출
SECOND(time) 초 추출
TIME_TO_SEC(time) 시간을 초 단위로 변환

 

ex)

SELECT HOUR(order_time) FROM orders; -- 주문 시간 추출
SELECT TIME_TO_SEC(order_time) FROM orders; -- 초 단위 변환

 

2.4. 특정 범위 필터링 (Range Filtering)

BETWEEN 연산자는 특정 값의 범위 내 데이터를 검색할 때 사용된다.

특정 칼럼에서 시작값부터 마지막값 사이에 속하는 모든 튜플을 출력한다.

WHERE 칼럼명 BETWEEN 시작값 AND 마지막값

 

ex)

SELECT * FROM sales WHERE price BETWEEN 100 AND 500; -- 100~500 사이 가격 검색
SELECT * FROM events WHERE event_date BETWEEN '2023-01-01' AND '2023-12-31'; -- 특정 기간 내 이벤트 검색

BETWEEN 연산자는 숫자뿐만 아니라 날짜, 문자형 데이터에도 사용할 수 있다.

'학습 > DB' 카테고리의 다른 글

7. 조인(JOIN)  (0) 2025.03.01
6. 관계와 제약조건  (0) 2025.02.26
4. 집계 함수 및 데이터 처리  (0) 2025.02.21
3. SQL 데이터 필터링과 연산자 정리  (0) 2025.02.20
2. 데이터 CRUD  (0) 2025.02.19