Chater4 SQL 고급 문법
4-1 MySQL의 데이터 형식
데이터를 저장하기 위해서는 적절한 데이터 형식을 지정해야 함.
- 숫자형, 문자형, 날짜형
정수형: 소수점이 없는 숫자(인원수, 가격, 수량 등)
데이터 형식 | 바이트 수 | 숫자 범위 |
TINYINT | 1 | -128 ~ 127 |
SMALLINT | 2 | -32,768 ~ 32,767 |
INT | 4 | 약 -21억 ~ +21억 |
BIGINT | 8 | 약 -900경 ~ +900경 |
숫자 범위를 벗어나는 값을 입력하면 Out of range 오류 발생
UNSIGNED: 범위가 0부터 시작 됨
문자형: 글자를 저장하기 위해 사용, 입력할 최대 글자의 개수 지정
- CHAR: 고정길이 문자형
- VARCHAR: 가변길이 문자형
데이터 형식 | 바이트 수 |
CHAR(개수) | 1 ~ 255 |
VARCHAR(개수) | 1 ~ 16383 |
- 전화번호와 같이 데이터가 숫자 형태라도 연산이나 크기에 의미가 없다면 문자형으로 지정하는 것이 좋다!
대량의 데이터 형식
데이터 형식 | 바이트 수 | |
TEXT 형식 | TEXT | 1 ~ 65535 |
LONG TEXT | 1 ~ 4294967295` | |
BLOB 형식 | BLOB | 1 ~ 65535 |
LONGBLOB | 1 ~ 4294967295 |
- BLOB(Binary Long Object: 이미지, 동영상 등의 데이터)
실수형: 소수점이 있는 숫자
데이터 형식 | 바이트 수 | 설명 |
FLOAT | 4 | 소수점 아래 7자리까지 표현 |
DOUBLE | 8 | 소수점 아래 15자리까지 표현 |
날짜형: 날짜 및 시간 저장
데이터 형식 | 바이트 수 | 설명 |
DATE | 3 | 날짜만 저장, YYYY-MM-DD 형식으로 사용 |
TIME | 3 | 시간만 저장, HH:MM:SS 형식으로 사용 |
DATETIME | 8 | 날짜 및 시간 저장, YYYY-MM-DD HH:MM:SS 형식으로 사용 |
변수의 선언, 값의 대입
SET @변수이름 = 변수의 값; #변수의 선언 및 값 대입
SELECT @변수이름; #변수의 값 출력
데이터 형 변환에는 명시적인 변환과 암시적인 변환이 있다.
함수를 이용한 명시적인 변환
CAST(값 AS 데이터_형식 [(길이)])
CONVERT(값, 데이터_형식[(길이)])
간단한 실습
암시적인 변환: 함수를 사용하지 않고도 자연스럽게 형이 변환
확인문제
- TINYINT - SMALLINT - INT - BIGINT
- Out of range
- 정수형 데이터에 UNSIGNED 붙이면 데이터가 양수만 저장.
- CHAR 255자
- 숫자를 CHAR형으로 지정하기 적합 - 전화번호 국번, 뒷자리
- TEXT - 영화 자막, BLOB - 동영상 파일
- 데이터 형 변환 CAST(), CONVERT()
4-2 두 테이블을 묶는 조인
조인(내부 조인): 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것
# 내부 조인 형식
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
일대다관계: 한쪽 테이블에는 하나의 값(PK) 존재, 연결된 다른 테이블(FK)에는 여러개의 값 존재
간단한 실습
① 구매 테이블의 mem_id인 'GRL' 추출
② 'GRL'과 동일한 값을 회원 테이블의 mem_id 열에서 검색
③ 'GRL'이라는 이이디를 찾으면 구매 테이블과 회원 테이블의 두 행을 결합(JOIN)
코드를 간결하게 하기 위해 FROM 절에 나오는 테이블 이름 뒤에 별칭(alias)를 줄 수 있음
SELECT B.mem_id, M.mem_name, B.prod_name, M.addr,
CONCAT(M.phone1, M.phone2) '연락처'
FROM buy B # 별칭 B, M
INNER JOIN member M
ON B.mem_id = M.mem_id;
외부 조인: 한쪽테이블에만 데이터가 있어도 결과를 추출할 수 있음
# 외부 조인 형식
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT or RIGHT or FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건];
- LEFT OUTER JOIN: 왼쪽 테이블의 내용은 모두 출력한다.
- RIGHT OUTER JOIN: 오른쪽 테이블의 내용은 모두 출력한다.
- FULL OUTER JOIN: 한쪽에 들어 있는 내용이면 출력한다.
간단한 실습
기타 조인
- 상호 조인(Cross Join): 테이블의 모든 행을 조인, 즉 전체 행 개수는 두 테이블의 각 행의 개수 곱
- 카티션 곱(Cartesian Product)이라고도 함
- 자체 조인(Self Join): 자신과 자신이 조인, 1개의 테이블 사용
- 테이블이 1개지만 다른 별칭을 사용해서 서로 다른 것처럼 사용
SELECT <열 목록>
FROM <테이블> 별칭A
INNER JOIN <테이블> 별칭B
ON <조인될 조건>
[WHERE 검색 조건]
확인 문제
- 기본 키 - 외래 키 관계
- 내부 조인, 외부 조인, 상호 조인, 자체 조인
- (LEFT, RIGHT, FULL) OUTER JOIN
- WHERE B.prod_name IS NULL
- 상호 조인, 자체 조인
얼마 전 SQLD 시험을 응시하고 결과 기다리고 있는데(떨어질 듯) 시험 공부할 때 개념 슉 훑고 노랭이 교재만 우다다 풀어서 많이 버거웠었다.
이 교재로 먼저 SQL 공부를 하고 SQLD 공부를 했다면 훨씬 수월 했을 거 같다.
'SQL > 혼자 공부하는 SQL' 카테고리의 다른 글
[혼자 공부하는 SQL] 6장 (2) | 2024.01.07 |
---|---|
[혼자 공부하는 SQL] 5장 (0) | 2023.12.16 |
[혼자 공부하는 SQL] 4-3 (0) | 2023.12.08 |
[혼자 공부하는 SQL] 3장 (0) | 2023.12.01 |
[혼자 공부하는 SQL] 2장 (0) | 2023.11.24 |