Adventure Time - Jake [MySQL] 데이터 형식(숫자,문자,날짜,시간,기타) | 피벗(Pivot) | JSON 데이터
본문 바로가기
Back-end/SQL

[MySQL] 데이터 형식(숫자,문자,날짜,시간,기타) | 피벗(Pivot) | JSON 데이터

by bogyoi 2024. 2. 25.

* 이것이 MySQL이다 를 참고했습니다.

 

1. 숫자 데이터 형식

데이터 형식 바이트 수 숫자 범위 설명
BIT(N) N/8   1~64bit를 표현. b'000'형식으로 표현
TINYINT 1 -128~127 정수
★ SMALLINT 2 -32,768~32,767 정수
MEDIUMINT 3 -8,388,608~8,388,607 정수
★ INT
INTEGER
4 약-21억~+21억 정수
★ BIGINT 8 약 -900경~ +900경 정수
FLOAT 4 -3.40E+38~ -1.17E-38 소수점 아래 7자리까지 표현
DOUBLE
REAL
8 -1.22E-308~ 1.79E+308 소수점 아래 15자리까지 표현
★ DECIMAL(m,[d])
NUMERIC(m, [d])
5~17 -10^38 +1 ~ +10^38 -1 전체 자릿수(m), 소수점 이하 자릿수(d)를 가진 숫자형

 

2. 문자 데이터 형식

데이터 형식 바이트 수 설명
★ CHAR(n) 1~255 - 고정 길이 문자형 n을 1부터 255까지 지정
- character의 약자.
- CHAR만 쓰면 CHAR(1)이 됨
★ VARCHAR(n) 1~65535 - 가변길이 문자형
- n을 사용하면 1부터 65535까지 지정
- Variable character의 약자
BINARY(n) 1~255 고정길이의 이진 데이터 값
VARBINARY(n) 1~255 가변길이의 이진 데이터 값
TEXT 형식 TINYTEXT 1~255 255 크기의 TEXT 데이터 값
TEXT 1~65535 N 크기의 TEXT 데이터 값
MEDIUMTEXT 1~16777215 16777215 크기의 TEXT 데이터 값
★ LONGTEXT 1~4294967295 최대 4GB 크기의 TEXT 데이터 값
BLOB 형식 TINYBLOB 1~255 255 크기의 BLOB 데이터 값
BLOB  1~65535 N 크기의 BLOB 데이터 값
MEDIUMBLOB 1~16777215 16777215 크기의 BLOB 데이터 값
★ LONGBLOB 1~4294967295 최대 4GB 크기의 BLOB 데이터 값
ENUM('값1', '값2', ...) 1 또는 2 최대 65535개의 열거형 데이터 값
SET('값1', '값2', ...) 1,2,3,4,8 최대 64개의 서로 다른 데이터 값

 

3. 날짜와 시간 데이터 형식

데이터 형식 바이트 수  설명
★ DATE 3 1001-01-01 ~ 9999-12-31까지 저장됨.
YYYY-MM-DD 형식
TIME 3 -838:59:59.000000 ~ 838:59:59.000000까지 저장됨.
HH:MM:SS 형식
★ DATETIME 8 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 저장됨
YYYY-MM-DD HH:MM:SS 형식
TIMESTAMP 4 1970-01-01 0:00:01 ~ 2038-01-19 03:14:07까지 저장됨
YYYY-MM-DD HH:MM:SS 형식
time_zone 시스템 변수와 관련됨.
UTC 시간대 변환하여 저장
YEAR 1 1901~ 2155까지 저장됨.
YYYY 형식

 

 

DATETIME은 명시적으로 값을 설정해줘야 값 설정이 가능한데 비해,

TIMESTAMP는 명시적으로 값을 설정하지 않아도 그 값이 저장되어야 하는 시점에서의 현재시간을 읽고 저장해줍니다.

TIMESTAMP는 또한 지역시간대 따라 변환하여 저장하는데, 내부적으로 숫자로 되어있어 다른 시간대로 보고싶을 때 쉽게 변환이 가능합니다.

 

4. 기타 데이터 형식

데이터 형식 바이트 수 설명
★ GEOMETRY N/A 공간 데이터 형식으로 선, 점, 다각형 같은 공간 데이터 개체를 저장하고 조작
★ JSON 8 JSON 문서를 저장

 

 

피벗(Pivot)

한 열에 포함된 여러값 출력, 이를 여러 로 변환하여 테이블 반환식 회전.
필요하면 집계까지 수행 (GROUP BY)
데이터를 보다 직관적으로 분석/요약 가능

 

CREATE TABLE sales (
    date DATE,
    amount DECIMAL(10, 2)
);

INSERT INTO sales (date, amount) VALUES
('2024-01-01', 100.00),
('2024-01-01', 150.00),
('2024-01-02', 200.00),
('2024-01-02', 250.00),
('2024-01-03', 300.00);

 

SELECT
    date,  -- date 별로 그룹이 만들어짐
    -- 그룹에 대해서 sum을 해줌
    SUM(CASE WHEN date = '2024-01-01' THEN amount ELSE 0 END) AS '2024-01-01',
    SUM(CASE WHEN date = '2024-01-02' THEN amount ELSE 0 END) AS '2024-01-02',
    SUM(CASE WHEN date = '2024-01-03' THEN amount ELSE 0 END) AS '2024-01-03'
FROM sales
GROUP BY date;

 

date 별로 매출액을 합산하고 열로 변환하여 테이블을 반환합니다.

 

 

 

JSON 데이터

-> JSON?
  - Key(속성)와 Value(값) 쌍으로 구성
  - 자바스크립트에서 파생됨

 

-- **************************
-- *** MySQL에서 JSON 제어 ***
-- **************************
-- 대상: testdb.usertbl

-- JSON 형식으로 출력
SELECT JSON_OBJECT('name', name, 'addr', addr, 'height', height) AS 'JSON_데이터'
FROM testdb.usertbl WHERE height >= 180;

 

 

set @json = '{"usertbl":
[
  {"addr": "서울", "name": "임재범", "height": 182} ,
  {"addr": "서울", "name": "이승기", "height": 182} ,
  {"addr": "서울", "name": "성시경", "height": 186} 
]
}';

-- json이 유효한지 1/0 리턴
SELECT JSON_VALID(@json) AS JSON_VALID;

-- JSON_SEARCH(데이터, one/all, 찾을것)
-- 데이터 내에서 찾을거 첫번째 인덱스 반환(0부터 시작)
SELECT JSON_SEARCH(@json, 'one', '성시경') AS JSON_SEARCH;

-- 인덱스로 검색
SELECT JSON_EXTRACT(@json, '$.usertbl[2].name') AS JSON_EXTRACT;

-- 입력(Create)
SELECT JSON_INSERT(@json, '$.usertbl[0].mDate', '2009-09-09') AS JSON_INSERT;

-- 추가
SELECT JSON_ARRAY_APPEND(@json, '$.usertbl', JSON_OBJECT('addr', '부산', 'name', '김태희', 'height', 163)) AS JSON_ARRAY_APPEND;

-- 변경(Update)
SELECT JSON_REPLACE(@json, '$.usertbl[0].name', '홍길동') AS JSON_REPLACE;

-- 정보 변경
SELECT JSON_SET(@json, '$.usertbl[0].height', 175) AS JSON_SET;

-- 속성 추가
SELECT JSON_SET(@json, '$.usertbl[0].height', 70) AS JSON_SET;

-- 삭제(Delete)
SELECT JSON_REMOVE(@json, '$.usertbl[0]') AS JSON_REMOVE;

-- 속성 삭제
SELECT JSON_REMOVE(@json, '$.usertbl[0].height') AS JSON_REMOVE;

 

 

위의 쿼리는 MySQL에서 JSON 데이터를 다루는 다양한 함수 및 연산자들을 보여줍니다. 이러한 함수와 연산자들을 사용하여 JSON 데이터를 유효성 검사하거나, 원하는 정보를 찾거나, 수정, 추가, 삭제 등을 하여 JSON 형식 데이터를 유연하게 처리할 수 있습니다.