Search

Chapter 04. SQL 고급 문법

#혼공학습단 #혼공 #혼자공부하는SQL #혼공S
본 글은 2023년 7월 3일 ~ 2023년 8월 20일까지 진행하는 혼공학습단에 참여하며 정리한 글입니다.
이번 장에서는 기본적인 SQL 문법 몇가지를 소개한다. 데이터베이스 생성부터 데이터 입력, 수정, 삭제까지 살펴보자.

04-1 MySQL의 데이터 형식

이 챕터에서는 MySQL에서 사용하는 데이터 형식에 대해 알아본다. 데이터 형식은 수십개 정도가 될만큼 많으나 이를 모두 외울 필요는 없다. 다만 자주 사용하는 것만 살펴보도록 하자.

정수형

정수형은 소수접이 없는 숫자이다.
정수형에는 다음과 같은 자료형이 있다.
TINYINT : 1 byte : -128 ~ 127
SMALLINT : 2 byte : -32768 ~ 32767
INT : 4 byte : 약 -21억 ~ + 21억
BIGINT : 8 byte : 약 -900경 ~ +900경

문자형

문자형에는 다음과 같은 자료형이 있다.
CHAR : 1 ~ 255 byte
VARCHAR : 1 ~ 16383 byte

대용량 데이터 형식

TEXT : 1 ~ 65535 byte
LONGTEXT : 1 ~ 4294967295 byte
BLOB 1 ~ 65535 byte
LONGBLOB 1 ~ 4294967295 byte

실수형

FLOAT : 4 byte : 소수점 아래 7자리까지 표현
DOUBLE : 8 byte 소수점 아래 15자리까지 표현

날짜형

DATE : 3 byte : 날짜만 저장, YYYY-MM-DD 형식으로 사용
TIME : 3 byte : 시간만 저장, HH:MM:SS 형식으로 사용
DATETIME : 8 byte : 날짜 및 시간을 저장. YYYY-MM-DD HH:MM:SS 형식으로 사용

변수의 사용

MySQL에서도 변수를 사용할 수 있다. 변수 선언과 사용은 다음과 같다.
-- 변수 선언 방법 SET @변수이름 = 변수의 값; -- 변수 값 출력 SELECT @변수이름;
SQL
복사
PREPARE와 EXECUTE
SET @count=3; PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?'; EXECUTE mySQL USING @count;
SQL
복사
@ count라는 변수에 3을 대입
PREPARE는 ‘SELECT ~~ LIMIT ?’ 문을 실행하지 않고 mySQL이라는 이름으로 준비만 해놓는다. 주의해서 볼 것은 LIMIT 다음에 오는 물음표이다. ?는 ‘현재는 모르지만 나중에 채워짐’ 정도로 이해하면 된다.
EXECUTE로 mySQL에 저장된 SELECT 문을 실행할 때, USING 으로 물음표에 @ count변수의 값을 대입

데이터 형 변환

CAST() , CONVERT()
CAST, CONVERT 함수 안에 올수 있는 데이터 형식
CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME
CAST (AS 데이터_형식 [(길이)]) CONVERT (, 데이터_형식 [(길이)])
SQL
복사

04-2 두 테이블을 묶는 조인

이 장에서는 조인의 종류와 그 활용 방법에 대해 살펴 본다. 조인의 종류에는 여러가지가 있으나 여기서는 내부 조인(inner join), 외부 조인(outer join)을 주의 깊게 살펴본다.

1. 내부조인 (Inner join)

예제 코드
SELECT <열 목록> FROM <첫번째 테이블> INNER JOIN <두번째 테이블> ON <조인될 조건> [WHERE 검색 조건]
SQL
복사

2. 외부 조인(Outer join)

예제 코드
SELECT <열 목록> FROM <첫번째 테이블> <LEFT | RIGHT | FULL> OUTER JOIN <두번째 테이블> ON <조인될 조건> [WHERE 검색 조건]
SQL
복사
사실 inner, outer join 은 그림으로 이해하는 것이 가장 쉽다. google에 검색하면 이미지를 쉽게 검색할 수 있는데 이는 다음과 같다.
출처 : Visual-Representation-of-SQL-Joins explained in detail by C.L. Moffatt

[혼공학습단 10기 미션]

기본미션

p. 195의 확인 문제 4번 풀고 인증하기
Question. 다음 SQL은 회원으로 가입만 하고, 한 번도 구매한 적이 없는 회원의 목록입니다. 빈칸에 들어갈 가장 적합한 것을 고르세요.
SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr FROM member M LEFT OUTER JOIN buy B ON M.mem_id = B.mem_id [ 빈 칸] ORDER BY M.mem_id;
SQL
복사
Answer : 4. WHERE B.prod_name IS NULL

선택미션

p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기
USE market_db; SELECT DISTINCT M.mem_id, M.mem_name, M.addr FROM buy B INNER JOIN member M ON B.mem_id=M.mem_id ORDER BY M.mem_id;
SQL
복사