CodeGym /행동 /SQL SELF /숫자 데이터 타입: INTEGER, NUMERIC, ...

숫자 데이터 타입: INTEGER, NUMERIC, FLOAT

SQL SELF
레벨 15 , 레슨 1
사용 가능

오늘은 PostgreSQL에서 숫자 데이터 타입에 대해 얘기해볼 거야. 혹시 "42" 같은 숫자, 돈 계산, 아니면 밀리초 같은 걸 저장하려고 고민해본 적 있다면, 바로 여기서 답을 찾을 수 있어. 어떤 타입이 어떤 상황에 맞는지 같이 알아보고, 너랑 네 데이터가 편하게 지낼 수 있게 해줄게.

PostgreSQL에서 숫자 데이터 타입은 세 가지 주요 그룹으로 나뉘어:

  1. 정수 (INTEGER): 소수점 없는 숫자를 저장할 때 써. 익숙한 1, 42, -7 같은 숫자들!
  2. 정확한 숫자 (NUMERIC): 소수점 아래 자릿수를 딱 정해서 저장할 수 있어. 돈 계산처럼 정확도가 생명일 때 완전 필수!
  3. 부동 소수점 숫자 (REAL): 엄청 크거나 엄청 작은 숫자를 저장할 때. NUMERIC보단 덜 정확하지만, 과학 계산엔 딱이야.

INTEGER 타입

INTEGER는 정수용 데이터 타입이야. 소수점 없는 숫자를 저장할 때 쓰면 돼. PostgreSQL에서는 INTEGER가 세 가지 버전이 있어서, 다양한 범위를 커버할 수 있어:

  • SMALLINT: 작은 정수 타입. 범위: -32,768 ~ 32,767.
  • INTEGER (또는 INT): 표준 정수 타입. 범위: -2,147,483,648 ~ 2,147,483,647.
  • BIGINT: 진짜 큰 숫자용. 범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807.

예를 들어, students라는 테이블에 학생들의 이름, 나이, 받은 학점(크레딧) 정보를 저장한다고 해보자:

id name age credits
1 Otto Nate 21 30
2 Maria Chi 22 45
3 Peter Val 20 60
4 Anna Song 23 50
5 Sophie Zhang 21 35

이제 간단한 SQL 쿼리로 학생들의 이름, 나이, 크레딧을 뽑아보자:

SELECT name, age, credits
FROM students;

결과:

name age credits
Otto Nate 21 30
Maria Chi 22 45
Peter Val 20 60
Anna Song 23 50
Sophie Zhang 21 35

INTEGER를 언제 써야 할까?

  • 아이디(id), 주문 번호 같은 식별자 저장할 때.
  • 뭔가의 개수(예: 창고에 있는 상품 수, 학생 수) 저장할 때.

NUMERIC 타입

NUMERIC는 소수점 자릿수를 딱 정해서 정확하게 저장하는 타입이야. 예를 들어 123.456 같은 숫자를 저장해야 하고, 소수점 한 자리라도 틀리면 평판(혹은 돈)이 날아가는 상황이라면 NUMERIC를 써야 해.

선언 형식: NUMERIC(precision, scale), 여기서:

  • precision — 전체 자리수(소수점 앞뒤 다 포함).
  • scale — 소수점 아래 자리수.

예를 들어 NUMERIC(6, 2)는 최대 6자리 숫자 중 2자리가 소수점 아래로 들어갈 수 있어.

이제 금융 거래를 기록하는 테이블을 만들어보자:

id description amount
1 수업료 결제 2345.67
2 월간 장학금 500.00
3 실험실 비용 145.99
4 도서관 벌금 12.75
5 컨퍼런스 등록 320.50

이제 트랜잭션 목록을 뽑아보자:

SELECT description, amount
FROM transactions;

결과:

description amount
수업료 결제 2345.67
월간 장학금 500.00
실험실 비용 145.99
도서관 벌금 12.75
컨퍼런스 등록 320.50

NUMERIC를 언제 써야 할까?

  • 돈 계산(상품 가격, 월급 등).
  • 정확한 측정값(무게, 길이 등) 저장할 때.

measurements 테이블

id mass - REAL height - REAL
1 70.5 1.83
2 64.2 1.75
3 82.3 1.92
4 55.0 1.60

이제 값을 뽑아보자:

SELECT mass, height
FROM measurements;

결과:

mass height
70.5 1.83
64.2 1.75
82.3 1.92
55.0 1.60

REAL을 언제 써야 할까?

  • 과학 계산(원자 질량, 달까지 거리 등).
  • 오차가 허용되는 데이터 모델링.

숫자 타입 비교: 언제 뭘 써야 할까?

데이터 타입 범위 정확도 사용 예시
SMALLINT -32,768 ~ 32,767 정수 작은 숫자(나이, 평점 등).
INTEGER -2,147,483,648 ~ 2,147,483,647 정수 아이디, 개수 등.
BIGINT -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 정수 진짜 큰 숫자.
NUMERIC precisionscale에 따라 다름 정확한 소수 금융, 측정값 등.
REAL 약 6자리 소수 부동 소수점 대략적/과학 데이터.
DOUBLE PRECISION 약 15자리 소수 고정밀 부동 소수점 과학, 연구 등.

별칭(Alias)

PostgreSQL에서는 많은 숫자 타입에 별칭(alias)이 있어 — 같은 타입인데 이름만 다르고, 가독성이나 다른 DB와의 호환성을 높여줘.

여기 숫자 타입 별칭에 대한 짧고 쉬운 가이드!

정수 타입 별칭

별칭 실제 타입 크기 범위
INT INTEGER 4바이트 −2,147,483,648 ~ 2,147,483,647
INT4 INTEGER 4바이트 (옛날 별칭)
SMALLINT SMALLINT 2바이트 −32,768 ~ 32,767
INT2 SMALLINT 2바이트
BIGINT BIGINT 8바이트 −9 퀸틸리언 ~ +9 퀸틸리언
INT8 BIGINT 8바이트

정확한 숫자 별칭

별칭 실제 타입 용도
DEC NUMERIC SQL 표준 별칭
DECIMAL NUMERIC 똑같음

부동 소수점 숫자 별칭

별칭 실제 타입 정확도
FLOAT DOUBLE PRECISION ~15자리(기본)
FLOAT(24) REAL ~6자리
FLOAT(53) DOUBLE PRECISION ~15자리
FLOAT8 DOUBLE PRECISION 옛날 별칭
FLOAT4 REAL 옛날 별칭

자주 하는 실수들

숫자 타입을 쓸 때 이런 함정에 빠질 수 있어:

너무 작은 데이터 타입을 고르는 실수. 사람 나이에 SMALLINT를 쓰면, "매트릭스"의 로봇처럼 나이가 수백만 년인 존재는 슬퍼할지도 몰라.

반올림 때문에 데이터 손실. REAL로 돈 계산하면, 몇 원(혹은 몇 센트)이 사라질 수 있어. 그러면 신뢰도도 같이 사라질 수 있지.

다른 타입끼리 비교. INTEGERREAL을 비교하면, 부동 소수점 특성 때문에 예상치 못한 결과가 나올 수 있어.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION