[혼공단9기] 혼공학습단 9기 3주차 - SQL 고급 문법, 데이터 형식, 테이블 묶는 조인, 프로그래밍(feat. 혼자 공부하는 SQL, 혼공S, 혼공스)
이번 주 스터디 내용 요약
MySQL의 데이터 형식
정수형
데이터 형식 | 바이트 수 | 숫자 범위 |
TINYINT | 1 | -128 ~ 127 |
SMALLINT | 2 | -32,768 ~ 32,767 |
INT | 4 | 약 -21억 ~ +21억 |
BIGINT | 8 | 약 -900경 ~ +900경 |
정수형에 UNSIGNED를 붙이면 0부터 범위가 지정됨. (예, UNSIGNED TINYINT 역시 1바이트이며 0 ~ 255로 표현)
문자형
데이터 형식 | 바이트 수 |
CHAR(개수) | 1 ~ 255 |
VARCHAR(개수) | 1 ~ 16383 |
VARCHAR는 가변길이 문자형이며 CHAR보다 공간을 효율적으로 운영할 수 있지만, 내부적으로 성능면에서는 CHAR로 설정하는 것이 조금 더 좋음.
대량의 데이터 형식
데이터 형식 | 바이트 수 | |
TEXT 형식 | TEXT | 1 ~ 65535 |
LONGTEXT | 1 ~ 4294967295 | |
BLOB 형식 | BLOB | 1 ~ 65535 |
LONGBLOB | 1 ~ 4294967295 |
실수형
데이터 형식 | 바이트 수 | 설명 |
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 @ 변수이름; -- 변수의 값 출력
변수는 MySQL 워크벤치를 재시작할 때까지는 유지되지만, 종료하면 없어짐.
데이터 형 변환
CAST ( 값 AS 데이터_형식 [ (길이) ] )
CONVERT ( 값, 데이터_형식 [ (길이) ] )
두 테이블을 묶는 조인
조인(join)이란 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것.
내부 조인
일반적으로 조인이라고 부르는 것은 내부조인(inner join)을 의미함.
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
외부 조인
외부 조인(outer join)은 두 테이블을 조인할 때 필요한 내용이 한쪽 테이블에만 있어도 결과를 추출할 수 있음.
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건]
상호 조인
상호 조인(cross join)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능.
SELECT <열 목록>
FROM <첫 번째 테이블>
CROSS JOIN <두 번째 테이블>
[WHERE 검색 조건]
- ON 구문을 사용할 수 없음.
- 결과의 내용은 의미가 없음. 랜덤으로 조인.
- 주 용도는 테스트하기 위한 대용량의 데이터를 생성.
자체 조인
자체 조인(self join)은 자신이 자신과 조인한다는 의미.
SELECT <열 목록>
FROM <테이블> 별칭A
INNER JOIN <테이블> 별칭B
ON <조인될 조건>
[WHERE 검색 조건]
SQL 프로그래밍
SQL 프로그래밍은 기본적으로 스토어드 프로시저 안에 만들어야 함.
DELIMITER $$
CREATE PROCEDURE 스토어드_프로시저_이름()
BEGIN
-- 이 부분에 SQL 프로그래밍 코딩
END $$
DELIMITER ;
CALL 스토어드_프로시저_이름();
IF 문
IF <조건식> THEN
SQL문장들
END IF;
SQL문장들이 두 문장 이상 처리되어야 할 때는 BEGIN ~ END로 묶어줘야 함.
IF ~ ELSE 문
IF <조건식> THEN
SQL문장들1
ELSE
SQL문장들2
END IF;
CASE 문
CASE
WHEN 조건1 THEN
SQL문장들1
WHEN 조건2 THEN
SQL문장들2
WHEN 조건3 THEN
SQL문장들3
ELSE
SQL문장들4
END CASE;
WHILE 문
WHILE <조건식> DO
SQL 문장들
END WHILE;
이번 주 과제는 아래와 같습니다.
# | 진도 | 기본 미션 | 선택 미션 |
3주차 (1/16 ~ 1/22) |
Chapter 04 | p. 195의 확인 문제 4번 풀고 인증하기 | p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기 |
기본 미션
p. 195의 확인 문제 4번 풀고 인증하기
다음 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;
① JOIN B.prod_name IS NULL
② LIMIT B.prod_name IS NULL
③ HAVING B.prod_name IS NULL
④ WHERE B.prod_name IS NULL
정답은 ④ WHERE B.prod_name IS NULL 입니다. 조건문을 사용할 때는 WHERE!!! HAVING은 GROUP BY와 함께 사용한답디다.
선택 미션
p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기
"우리 사이트에서 한 번이라도 구매한 기록이 있는 회원들을 검색해보자!"
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;
손코딩 결과 옜다!
중복된 결과는 필요 없으므로 DISTINCT를 사용하였고, INNER JOIN으로 두 테이블을 조인하였으며(두 테이블에 모두 있는 내용만 필요), 아이디 순으로 정렬하기 위해 ORDER BY를 사용함.
https://www.youtube.com/watch?v=30KENiV3BdY
2023년 목표대로 나름 꾸준히 공부하고 있음.
이번에도 구독과 좋아요, 알림설정은 부탁안해요...ㅎㅎ 구걸해요...
댓글