728x90
728x90
SMALL
💡 요약
- 숫자
- BIT
- TINYINT
- BOOL / BOOLEAN
- SMALLINT
- MEDIUMINT
- INT / INTEGER
- BIGINT / SERIAL
- DECIMAL / DEC / FIXED
- FLOAT
- DOUBLE
- 문자
- CHAR
- VARCHAR
- TEXT
- TINYTEXT
- MEDIUMTEXT
- LONGTEXT
- ENUM
- SET
- 이진
- BLOB
- TINYBLOB
- MEDIUMBLOB
- LONGBLOB
- BINARY
- VARBINARY
- Array
- JSON_ARRAY
- JSON_TYPE
- JSON_EXTRACT
- Key-value
- JSON_OBJECT
- JSON_EXTRACT
- JSON_INSERT
- JSON_REPLACE
💭 느낀 점
SQL의 데이터 타입에 대해 하나하나 배웠는데 종류도 많고.. 다 비슷해보이고.. 오늘은 조금 힘들었다😢 전체적으로 두고 보면 차이를 구분할 수 있을 것 같은데, 실무에서 필요할 때 쑥쑥 뽑아 쓰려면 이런 이론적인 내용도 숙지를 해야겠지..! 지난주부터 이론을 실제로 적용하는 부분에서 어려움을 많이 느끼고, 그러다보니 두려움도 생기고 있다. 오늘도 조금 전까지 프로젝트 회의를 하다 왔는데 갈길이 오조오억리 정도는 되는 것 같다는 생각이 2시간동안 60번 정도 든 것 같다,, 수업에서 배운 내용들을 배움에서 그치지 않고 프로젝트를 하면서 계속 적용해보고 가지고 놀아봐야겠다. 이론으로 배울 때와 실제로 해볼 때와의 습득의 차이는 크니까..! 아닌 것 같아도, 어려워도 혼자 연습할 때 많이 도전하고 깨져보기로..! 힘내쟈..!👊
🌳 숫자
BIT(M)
- 컴퓨터가 데이터를 저장하는 기본 단위
- 이진법 → 0과 1로만 구성
- M : 몇 자리 BIT를 쓸지 정하는 숫자
- 1이 기본값
- 1 <= M <= 64
- (ex) BIT(4) → BIT 4개의 데이터 (ex) 1010, 0101···
- (ex) b’111’ = 7
- (ex) 256 = 2의 8승 = 8비트
TINYINT
- 매우 작은 정수
- Signed 범위 : -127 ~ 127 Unsigned 범위 : 0 ~ 255
- 정수 타입 + 끝 값이 정해져 있는 경우 사용
- (ex) 우리나라 시·도에 고유한 번호 붙이기
- INT 타입에 비해 훨씬 적은 저장공간 차지
- 8비트까지 사용 가능 (256 = 2의 8승 = 8비트)
BOOL / BOOLEAN
- True/False 여부
- 0 : False
- 1 : True
- TINYINT(1)과 같음
SMALLINT
- 작은 정수
- 약 6만 개의 정수 표현 가능
- 범위
- -32768 ~ 32767
- 0 ~ 65535
- 16비트까지 사용 가능 (65,536 = 2의 16승 = 16비트)
MEDIUMINT
- 중간 크기 정수
- 약 1,670만 개의 정수 표현 가능
- 범위
- -8388608 ~ 8388607
- 0 ~ 16777215
- 24비트까지 사용 가능 (16,777,216 = 2의 24승 = 24비트)
INT / INTEGER
- 일반적인 정수
- 약 42.9억 개의 정수 표현 가능
- 범위
- -2147483648 ~ 2147483647
- 0 ~ 4294967295
- 32비트까지 사용 가능 (약 42.9억 = 2의 32승 = 32비트)
BIGINT / SERIAL
- INT 타입보다 2배 많은 BIT를 사용하는 정수
- SERIAL : BIGINT 중 부호가 없는 경우
- 범위
- 9223372036854775808 ~ 9223372036854775807
- 0 ~ 18446744073709551615
- 64비트까지 사용 가능
DECIMAL(M,D) / DEC / FIXED
- 고정소수점 타입
- 소수점 이하 자릿수를 미리 고정해두고 고정된 자릿수로만 소수 부분 표현
- M : 숫자 전체 자릿수의 길이 D : 소수점 이하 자릿수의 길이
- M <= 65
- 0 <= D <= 30
- D가 0이면 소수점 X
FLOAT
- 부동소수점 타입
- 32비트(4bytes)까지 사용 가능 → INT 타입과 동일
DOUBLE
- 부동소수점 타입 (FLOAT보다 더 큼)
- 64비트(8bytes)까지 사용 가능 → BIGINT 타입과 동일
실무
- 실무에서는 주로 BOOLEAN, INT, DOUBLE 사용
- 숫자 범위가 매우 제한적인 경우 → TINYINT, SMALLINT 사용하여 저장공간 절약
🌳 문자
CHAR
- 고정된 길이의 문자열
- 선언된 값보다 짧은 문자열 INPUT → 빈 문자열로 나머지 길이 채움
- SELECT문으로 데이터 추출할 때는 빈 문자열 제외하고 반환
- 길이 : 0~255
VARCHAR
- 변동 가능한 길이의 문자열
- 길이 : 0~65535 → 길이 지정 가능
- 65535byte
- MySQL에서 한 행이 가질 수 있는 총 길이
- 지정한 길이를 초과한 문자열 → 에러 발생
- 공백이 초과 → 공백은 잘리고 저장
- 기본값 지정 가능
TEXT
- 변동 가능한 길이의 문자열
- 길이 : 최대 65535 → 길이 지정 불가
- 최대 길이만 넘지 않으면 길이에 상관없이 집어 넣음 → 문자열이 잘 들어왔는지 확인하기 쉽지 않음
- VARCHAR → 길이 초과하면 에러 → 데이터 문제 발생 시 바로 알 수 있음
- 현업에서는 컨트롤 가능한 VARCHAR를 더 많이 사용
- 기본값 지정 불가
- 쿼리 시 메모리가 아닌 디스크 사용 → CHAR, VARCHAR 보다 느림
- Non-binary strings = Character strings
TINYTEXT
- 작은 텍스트
- 길이 : 최대 255
MEDIUMTEXT
- 중간 크기 텍스트
- 길이 : 최대 16777215
LONGTEXT
- 큰 크기 텍스트
- 길이 : 최대 4294967295
ENUM
- 최초에 지정해 둔 리스트에 포함되는 값만 저장
- 효율적인 데이터 저장
- 지정해 둔 데이터가 들어오면 해당하는 숫자로 저장
- (ex) 강아지 → 0, 고양이 → 1, 원숭이 → 2
- 유연성, 확장성 낮음 → 실무에서 사용 빈도 적음
SET
- 최초에 지정해 둔 리스트에 포함되는 값들을 중복으로 저장
- 가능한 값 리스트의 모든 조합 가능
- (ex) 강아지+고양이, 고양이+원숭이
- 64개까지 가능
- 순서와 무관하기 결과값 동일
- (ex) 강아지+고양이+원숭이 = 원숭이+고양이+강아지
실무
- 실무에서는 주로 CHAR, VARCHAR 사용
- 한글 : 한 글자 → 3byte 차지 (ex) 한글 2글자 + 공백 1 = 길이 7
- 영문 : 한 글자 → 1byte 차지
🌳 이진
BLOB
- Binary Large Object
- Binary 데이터 : 데이터를 저장, 활용하기 위해 0과 1의 이진 형식으로 인코딩한 파일
- 모든 데이터는 0과 1로 이루어진 Binary 데이터 → 다른 데이터 타입을 포함하는 개념
- 어떤 데이터든 Binary 타입으로 최대 길이 내에서 저장
- TEXT와 비슷
- TEXT : 문자열을 길이 상관없이 저장
- BLOB : 문자열 뿐만 아니라 데이터 무엇이든 저장
- 길이 : 최대 65535byte → 길이 설정 불가
- 기본값 지정 불가
TINYBLOB
- 작은 BLOB
- 길이 : 최대 255byte
MEDIUMBLOB
- 중간 크기 BLOB
- 길이 : 최대 16777215byte
LONGBLOB
- 큰 BLOB
- 길이 : 최대 약 42.9억byte
BINARY
- CHAR의 Binary 버전
- 저장되는 형태, 길이 설정 방식이 약간 다름
- CHAR, VARCHAR → 괄호 안의 숫자 : 문자 기준 (ex) 4 → 4글자
- BINARY, VARBINARY → 괄호 안의 숫자 byte 기준 (ex) 6 → 6byte → 한글 2글자
VARBINARY
- VARCHAR의 Binary 버전
- 저장되는 형태, 길이 설정 방식이 약간 다름
- VARBINARY - BLOB 관계 = VARCHAR - TEXT 관계와 비슷
🌳 Array(배열)
Array
- 데이터가 저장된 리스트
- (ex) [’a’, ‘b’, ‘c’], [1,2,3]
- Element(원소) : Array에 저장된 각 데이터
- JSON 타입으로 배열 저장 → JSON_ARRAY
- 기본값 설정 불가
JSON_ARRAY
- 입력을 JSON 배열로 반환하는 함수
- INSERT, SELECT 구문에서 주로 사용
- ‘JSON_ARRAY’ 생략 가능 → (ex) ‘["빨강", "파랑"]’
- Nested Array : 배열의 원소로 배열이 들어갈 수 있음
- (ex) JSON_ARRAY(JSON_ARRAY("흰색", "파랑"), JSON_ARRAY("초록", "보라"))
- MySQL 5.7.8 버전부터 지원
JSON_TYPE
- JSON 데이터의 타입을 반환하는 함수
- SELECT 구문에서 사용
JSON_EXTRACT
- Array 내부 데이터에 접근
- 인덱싱 : Array 내부의 데이터에 인덱스를 통해 접근하는 것
- ‘$’ : 해당 Column의 모든 원소 추출
- ‘$[0]’ : 해당 Column의 첫 번째 원소 추출
- 인덱스는 0번부터 시작
🌳 Key-value
Key-value
- Key와 value로 이루어진 데이터
- Key : 데이터를 찾을 수 있는 기준이 되는 값
- Value : 키에 대응되는 값
- (ex) {‘이름’ : ‘홍길동’, ‘부서’ : ‘개발팀’, ‘직책’ : ‘팀장’, ‘근무지’ : ‘판교’}
- ‘이름’, ‘부서’, ‘직책’, ‘근무지’ → Key
- ‘홍길동’, ‘개발팀’, ‘팀장’, ‘판교’ → Value
- (ex) {‘색상’ : [‘빨강’, ‘파랑’], ‘사이즈’ : [’S’, ‘M’, ‘L’]}
- ‘색상’, ‘사이즈’ → Key
- [‘빨강’, ‘파랑’], [‘S’, ‘M’, ‘L’] → Array
- Value에 Array도 들어갈 수 있음
- Value에 Array도 들어갈 수 있음
- MySQL → JSON 타입으로 Key-value 저장, 관리
- Nested Key-value : Value로 Array 뿐만 아니라 Key-value가 올 수도 있음
- JSON_EXTRACT로 값 추출도 가능
JSON_OBJECT
- Key-value 입력값을 JSON 객체로 반환하는 함수
- INSERT, SELECT 구문에서 주로 사용
- Key → Value 순서로 입력
- ‘off’, ‘subtitute’ → Key
- [‘일’, ‘월’], ‘민수’ → Value
JSON_EXTRACT
- ‘$.키이름’ → 해당 Value 출력
- Array에서 인덱싱 → ‘$[인덱스번호]’
- Value가 Array일 경우 : ‘$.키이름[인덱스번호]’ → 해당 Array에서 인덱스값 출력
JSON_INSERT
- Key-value를 삽일할 때 사용
JSON_REPLACE
- 이미 있는 Column 값을 바꿀 때 사용
- Array의 특정 값만 바꿀 수도 있음 → ‘$.키이름[인덱스번호]’ 사용
본 내용은 프로그래머스 '데이터 분석 데브코스' 를 수강하며 작성한 내용입니다.
728x90
728x90
SMALL
'🐥 Education > 프로그래머스 데이터분석데브코스' 카테고리의 다른 글
[TIL] 프로그래머스 데이터 분석 데브코스|Week3|SQL|효율적인 SQL 코드 작성 (0) | 2023.12.14 |
---|---|
[TIL] 프로그래머스 데이터 분석 데브코스|Week3|SQL|테이블 결합 + 다양한 SQL 함수 (1) | 2023.12.06 |
[TIL] 프로그래머스 데이터 분석 데브코스|Week3|SQL|SQL 기초 구문 (1) | 2023.12.05 |
프로그래머스 데이터 분석 데브코스|Week2|2주차 회고 (0) | 2023.12.01 |
[TIL] 프로그래머스 데이터 분석 데브코스|Week2|Excel|결측치 (1) | 2023.12.01 |