❇️ 요약
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL OUTER JOIN
- SELF JOIN

SELECT column1, column2, ...
FROM tableA
INNER JOIN tableB
ON tableA.column = tableB.column -- JOIN할 기준 정하기
WHERE condition;
mysql> SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
-> FROM celeb
-> INNER JOIN snl_show
-> ON celeb.NAME = snl_show.HOST;
+----+-----------+----+-----------+
| ID | NAME | ID | HOST |
+----+-----------+----+-----------+
| 4 | 강동원 | 1 | 강동원 |
| 5 | 유재석 | 2 | 유재석 |
| 6 | 차승원 | 3 | 차승원 |
| 7 | 이수현 | 4 | 이수현 |
+----+-----------+----+-----------+
4 rows in set (0.01 sec)

SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column -- JOIN할 기준 정하기
WHERE condition;
mysql> SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
-> FROM celeb
-> LEFT JOIN snl_show
-> ON celeb.NAME = snl_show.HOST;
+----+-----------+------+-----------+
| ID | NAME | ID | HOST |
+----+-----------+------+-----------+
| 1 | 아이유 | NULL | NULL |
| 2 | 이미주 | NULL | NULL |
| 3 | 송강 | NULL | NULL |
| 4 | 강동원 | 1 | 강동원 |
| 5 | 유재석 | 2 | 유재석 |
| 6 | 차승원 | 3 | 차승원 |
| 7 | 이수현 | 4 | 이수현 |
+----+-----------+------+-----------+
7 rows in set (0.01 sec)

SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column -- JOIN할 기준 정하기
WHERE condition;
mysql> SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
-> FROM celeb
-> RIGHT JOIN snl_show
-> ON celeb.NAME = snl_show.HOST;
+------+-----------+----+-----------+
| ID | NAME | ID | HOST |
+------+-----------+----+-----------+
| 4 | 강동원 | 1 | 강동원 |
| 5 | 유재석 | 2 | 유재석 |
| 6 | 차승원 | 3 | 차승원 |
| 7 | 이수현 | 4 | 이수현 |
| NULL | NULL | 5 | 이병헌 |
| NULL | NULL | 6 | 하지원 |
| NULL | NULL | 7 | 제시 |
| NULL | NULL | 8 | 조정석 |
| NULL | NULL | 9 | 조여정 |
| NULL | NULL | 10 | 옥주현 |
+------+-----------+----+-----------+
10 rows in set (0.00 sec)

SELECT column1, column2, ...
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB.column -- JOIN할 기준 정하기
WHERE condition;
SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
UNION
SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
mysql> SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
-> FROM celeb
-> FULL OUTER JOIN snl_show
-> ON celeb.NAME = snl_show.HOST;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTER JOIN snl_show
ON celeb.NAME = snl_show.HOST' at line 3mysql> SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
-> FROM celeb
-> LEFT JOIN snl_show
-> ON celeb.NAME = snl_show.HOST
-> UNION
-> SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
-> FROM celeb
-> RIGHT JOIN snl_show
-> ON celeb.NAME = snl_show.HOST;
+------+-----------+------+-----------+
| ID | NAME | ID | HOST |
+------+-----------+------+-----------+
| 1 | 아이유 | NULL | NULL |
| 2 | 이미주 | NULL | NULL |
| 3 | 송강 | NULL | NULL |
| 4 | 강동원 | 1 | 강동원 |
| 5 | 유재석 | 2 | 유재석 |
| 6 | 차승원 | 3 | 차승원 |
| 7 | 이수현 | 4 | 이수현 |
| NULL | NULL | 5 | 이병헌 |
| NULL | NULL | 6 | 하지원 |
| NULL | NULL | 7 | 제시 |
| NULL | NULL | 8 | 조정석 |
| NULL | NULL | 9 | 조여정 |
| NULL | NULL | 10 | 옥주현 |
+------+-----------+------+-----------+
13 rows in set (0.00 sec)
SELECT column1, column2, ...
FROM tableA, tableB, ...
WHERE condition; -- WHERE절에 기준 명시
mysql> SELECT celeb.ID, celeb.NAME, snl_show.ID, snl_show.HOST
-> FROM celeb, snl_show
-> WHERE celeb.NAME = snl_show.HOST;
+----+-----------+----+-----------+
| ID | NAME | ID | HOST |
+----+-----------+----+-----------+
| 4 | 강동원 | 1 | 강동원 |
| 5 | 유재석 | 2 | 유재석 |
| 6 | 차승원 | 3 | 차승원 |
| 7 | 이수현 | 4 | 이수현 |
+----+-----------+----+-----------+
4 rows in set (0.00 sec)
mysql> SELECT snl_show.ID, snl_show.season, snl_show.episode, celeb.name, celeb.job_title
-> FROM snl_show, celeb
-> WHERE snl_show.host = celeb.name;
+----+--------+---------+-----------+-------------------------+
| ID | season | episode | name | job_title |
+----+--------+---------+-----------+-------------------------+
| 1 | 8 | 7 | 강동원 | 영화배우, 텔런트 |
| 2 | 8 | 8 | 유재석 | MC, 개그맨 |
| 3 | 8 | 9 | 차승원 | 영화배우, 모델 |
| 4 | 8 | 10 | 이수현 | 가수 |
+----+--------+---------+-----------+-------------------------+
4 rows in set (0.00 sec)
mysql> SELECT ID, SEASON, EPISODE, NAME, JOB_TITLE
-> FROM snl_show, celeb
-> WHERE host = name;
ERROR 1052 (23000): Column 'ID' in field list is ambiguous
mysql> SELECT snl_show.ID, SEASON, EPISODE, NAME, JOB_TITLE
-> FROM snl_show, celeb
-> WHERE host = name;
+----+--------+---------+-----------+-------------------------+
| ID | SEASON | EPISODE | NAME | JOB_TITLE |
+----+--------+---------+-----------+-------------------------+
| 1 | 8 | 7 | 강동원 | 영화배우, 텔런트 |
| 2 | 8 | 8 | 유재석 | MC, 개그맨 |
| 3 | 8 | 9 | 차승원 | 영화배우, 모델 |
| 4 | 8 | 10 | 이수현 | 가수 |
+----+--------+---------+-----------+-------------------------+
4 rows in set (0.00 sec)
STEP1. snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나, 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람중 작년 9월 15일 이후에 출연했던 사람을 검색
mysql> SELECT celeb.name, snl_show.episode, celeb.agency, snl_show.BROADCAST_DATE
-> FROM celeb, snl_show
-> WHERE (celeb.name = snl_show.host)
-> AND (
-> (snl_show.episode in (7,9,10)));
+-----------+---------+----------------------+----------------+
| name | episode | agency | BROADCAST_DATE |
+-----------+---------+----------------------+----------------+
| 강동원 | 7 | YG엔터테이먼트 | 2020-09-05 |
| 차승원 | 9 | YG엔터테이먼트 | 2020-09-19 |
| 이수현 | 10 | YG엔터테이먼트 | 2020-09-26 |
+-----------+---------+----------------------+----------------+
3 rows in set (0.00 sec)
STEP2. snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나, 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람중 작년 9월 15일 이후에 출연했던 사람을 검색
mysql> SELECT celeb.name, snl_show.episode, celeb.agency, snl_show.BROADCAST_DATE
-> FROM celeb, snl_show
-> WHERE (celeb.name = snl_show.host)
-> AND (
-> celeb.agency like 'YG______%');
+-----------+---------+----------------------+----------------+
| name | episode | agency | BROADCAST_DATE |
+-----------+---------+----------------------+----------------+
| 강동원 | 7 | YG엔터테이먼트 | 2020-09-05 |
| 차승원 | 9 | YG엔터테이먼트 | 2020-09-19 |
| 이수현 | 10 | YG엔터테이먼트 | 2020-09-26 |
+-----------+---------+----------------------+----------------+
3 rows in set (0.00 sec)
STEP3. snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나, 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람 중
작년 9월 15일 이후에 출연했던 사람을 검색
mysql> SELECT celeb.name, snl_show.episode, celeb.agency, snl_show.BROADCAST_DATE
-> FROM celeb, snl_show
-> WHERE (celeb.name = snl_show.host)
-> AND (
-> snl_show.BROADCAST_DATE > '2020-09-15');
+-----------+---------+----------------------+----------------+
| name | episode | agency | BROADCAST_DATE |
+-----------+---------+----------------------+----------------+
| 차승원 | 9 | YG엔터테이먼트 | 2020-09-19 |
| 이수현 | 10 | YG엔터테이먼트 | 2020-09-26 |
+-----------+---------+----------------------+----------------+
2 rows in set (0.00 sec)
STEP4. snl_show 에 출연한 celeb 중, 에피소드 7, 9, 10 중에 출연했거나, 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람중 작년 9월 15일 이후에 출연했던 사람을 검색
mysql> SELECT celeb.name, snl_show.episode, celeb.agency, snl_show.BROADCAST_DATE
-> FROM celeb, snl_show
-> WHERE (celeb.name = snl_show.host)
-> AND (
-> snl_show.episode in (7,9,10)
-> AND
-> celeb.agency like 'YG______%'
-> )
-> AND (snl_show.BROADCAST_DATE > '2020-09-15');
+-----------+---------+----------------------+----------------+
| name | episode | agency | BROADCAST_DATE |
+-----------+---------+----------------------+----------------+
| 차승원 | 9 | YG엔터테이먼트 | 2020-09-19 |
| 이수현 | 10 | YG엔터테이먼트 | 2020-09-26 |
+-----------+---------+----------------------+----------------+
2 rows in set (0.00 sec)