정수형
1. 종류
TINYINT(1바이트) : -128~127 범위의 숫자를 표현할 수 있다.
SMALLINT(2바이트) : -32768~32767
INT(4바이트) : 약-21억 ~ 21억
BIGINT(8바이트) : 약 -900경 ~ 900경
CREATE table numbers(
tinyint_col TINYINT, -- -128~127 범위의 숫자를 표현할 수 있다.
smallint_col SMALLINT, -- -32768~32767
int_col INT, -- 약-21억 ~ 21억
bigint_col BIGINT -- 약 -900경 ~ 900경
);
-- 입력가능한 최대 숫자 크기
INSERT INTO numbers VALUES(127,32767,2147483647,9000000000000000000); -- 0이 18개
2. SIGNED , UNSIGNED
SIGNED
: 기본적으로 데이터 타입 설정시 이 형태로 지정됨.
: 음수~양수 값 가능
: 위의 종류1의 예제
UNSIGNED
: 값의 범위가 0 부터 시작하게 됨.
: 해당 컬럼의 값이 음수일 경우가 없을때 쓰는게 좋음
CREATE table numbers(
tinyint_col TINYINT UNSIGNED, -- -0~255 범위의 숫자를 표현할 수 있다.
smallint_col SMALLINT UNSIGNED, -- 0~65535
int_col INT UNSIGNED, -- 0 ~ 약42억
bigint_col BIGINT UNSIGNED -- 0 ~ 약1800경
);
-- 입력가능한 최대 숫자 크기
INSERT INTO numbers VALUES(255,65535,4294967295,18000000000000000000); -- 0이 18개
3. 주의
숫자형에 앞글자가 0으로 시작하면, 자동으로 생략됨.
따라서 지역번호 처럼 031,02 로 저장해야 하는 값이라면, 숫자형이 아닌 문자로 저장해야 함.
실수형
1. 종류
FLOAT : 소수점 아래 7자리 까지 표현 (바이트 수 : 4)
DOUBLE : 소수점 아래 15자리 까지 표현 (바이트 수 : 8)
문자형
1. 종류
1) CHAR(개수)
: 바이트수 1~255
: 고정길이 문자형, 자릿수가 고정되 있음.
: VARCHAR보다 성능이 더 좋음
: 예) CHAR(10)에 '가나다' 를 입력하면 3글자지만 10자리 모두 확보하게 되어 공간이 낭비됨.
2) VARCHAR(개수)
: 바이트수 1~16383
: 가변길이 문자형, 자릿수가 변함
: 예) CHAR(10)에 '가나다' 를 입력하면 10자리로 지정했지만 3자리만 사용됨.
3) BINARY, VARBINARY (잘 사용x)
<대량의 문자형 데이터 저장시>
4) TEXT
: 바이트수 1~65535
5) LONGTEXT
: 바이트수 1~4294967295
6) BLOB
: 바이트수 1~65535
: 이미지,동영상 등의 이진 데이터 저장시
7) LONGBLOB
: 바이트수 1~4294967295
: 이미지,동영상 등의 이진 데이터 저장시
2. 문자형, 숫자형 사용 구별
- 데이터가 숫자 형태라도 숫자로서의 의미가 없다면 문자형으로 지정하는게 좋음
- 숫자로 의미가 있으려면 : 1)더하기,뺴기 등 연산을 하거나 2) 크다,작다, 순서에 의미가 있어야 함
- 예) 핸드폰 번호 : 단순히 정보를 저장하는 것임. 핸드폰 번호로 연산하는게 아님. => 문자형으로 하는게 적절
날짜형
1. 종류
DATE : 날짜만 저장. / YYYY-MM-DD (바이트 수 : 3)
TIME : 시간만 저장. / HH:MM:SS (바이트 수 : 3)
DATETIME : 날짜+시간 저장./ YYYY-MM-DD HH:MM:SS (바이트 수 : 8)
형 변환
1. 기본 형태
CAST (값 AS 데이터형식[길이]); -- 방법1. CAST
CONVERT(값,데이터형식[길이]);-- 방법2. CONVERT
2. 사용
* 실수 정수 형 변환
-- select avg(price)from buy -- 1551.0714
SELECT CAST(avg(price) AS signed) FROM buy; -- 1551
SELECT CONVERT(avg(price), signed) FROM buy; -- 1551
* 다양한 구분자를 날짜형으로 변경 가능
SELECT CAST('2022/12/12' AS DATE); -- 2022-12-12
SELECT CAST('2022$12$12' AS DATE); -- 2022-12-12
SELECT CAST('2022%12%12' AS DATE); -- 2022-12-12
SELECT CAST('2022@12@12' AS DATE); -- 2022-12-12
------
[TODO]
-- select avg(price)from buy -- 1551.0714
-- CAST (값 AS 데이터형식[길이])
-- CONVERT(값,데이터형식[길이])
-- signed : 부호가 있는 정수
-- unsigned : 부호가 있는 정수
-- 실수-> 정수 형 변환
-- SELECT CAST(avg(price) AS signed) FROM buy; -- 1551
-- SELECT CONVERT(avg(price), signed) FROM buy; -- 1551
-- 다양한 구분자를 날짜형으로 변경 가능
-- SELECT CAST('2022/12/12' AS DATE); -- 2022-12-12
-- SELECT CAST('2022$12$12' AS DATE); -- 2022-12-12
-- SELECT CAST('2022%12%12' AS DATE); -- 2022-12-12
-- SELECT CAST('2022@12@12' AS DATE); -- 2022-12-12
-- 정수-> 문자 형 변환
-- CONCAT 함수 : 문자를 이어주는 역할
-- SELECT mem_id,CONCAT(CAST(price AS CHAR), 'X',CAST(amount AS CHAR)) as '가격X수량' from buy;
-- 암묵적인 형 변환
-- 산술 연산자 있으면 : 숫자형으로 자동 변경
SELECT '100'+'200'; -- 300,
SELECT '100'+ 200; -- 300
-- concat은 문자형으로 변경됨.
SELECT concat('100',200); -- 100200
https://www.postgresql.org/docs/current/datatype.html
https://www.tutorialspoint.com/postgresql/postgresql_create_table.htm
'DB > SQL' 카테고리의 다른 글
[SQL]프로그래머스 - 우유와 요거트가 담긴 장바구니 (0) | 2023.06.08 |
---|---|
[SQL]변수 (0) | 2023.05.31 |
[SQL]프로그래머스 - 자동차 평균 대여 기간 구하기 (0) | 2023.05.31 |
[SQL] 행 입력, 수정, 삭제 CRUD (0) | 2023.05.30 |
[SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력 (0) | 2023.05.30 |