[혼자 공부하는 SQL] 4(4-1, 4-2)장

728x90

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(값, 데이터_형식[(길이)])

 

간단한 실습

실수 → 정수

 

 

가격 * 수량의 실제 구매액 표시

 

암시적인 변환: 함수를 사용하지 않고도 자연스럽게 형이 변환

 

확인문제

  1. TINYINT - SMALLINT - INT  - BIGINT
  2. Out of range
  3. 정수형 데이터에 UNSIGNED 붙이면 데이터가 양수만 저장.
  4. CHAR 255자
  5. 숫자를 CHAR형으로 지정하기 적합 - 전화번호 국번, 뒷자리
  6. TEXT - 영화 자막, BLOB - 동영상 파일
  7. 데이터 형 변환 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 검색 조건]

 

확인 문제

 

  1. 기본 키 - 외래 키 관계
  2. 내부 조인, 외부 조인, 상호 조인, 자체 조인
  3. (LEFT, RIGHT, FULL) OUTER JOIN
  4. WHERE B.prod_name IS NULL
  5. 상호 조인, 자체 조인

 

얼마 전 SQLD 시험을 응시하고 결과 기다리고 있는데(떨어질 듯) 시험 공부할 때 개념 슉 훑고 노랭이 교재만 우다다 풀어서 많이 버거웠었다.

이 교재로 먼저 SQL 공부를 하고 SQLD 공부를 했다면 훨씬 수월 했을 거 같다. 

728x90

'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