(1) JOIN
(2) JOIN - LEFT JOIN, RIGHT JOIN 문법
JOIN은 관계형 데이터베이스를 다루는 SQL 에서 두 개 이상의 테이블 간의 데이터를 결합하여 새로운 결과 집합을 생성하는 데 사용되는 연산자이다. 즉, JOIN을 사용하면 서로 다른 테이블에 저장된 데이터를 연관시켜서 필요한 정보를 한 번에 조회하거나 가져오는 것이 가능하다.#실습데이터1
+----+--------+------------+-----+-----+---------------+-------------------+
| ID | NAME | BIRTHDAY | AGE | SEX | JOB_TITLE | AGENCY |
+----+--------+------------+-----+-----+---------------+-------------------+
| 1 | 아이유 | 1993-05-16 | 29 | F | 가수, 탤런트 | EDAM엔터테인먼트 |
| 2 | 이미주 | 1994-09-23 | 28 | F | 가수 | 울림엔터테인먼트 |
| 3 | 송강 | 1994-04-23 | 28 | M | 탤런트 | 나무엑터스 |
| 4 | 강동원 | 1981-01-18 | 41 | M | 영화배우, 탤런트| YG엔터테인먼트 |
| 5 | 유재석 | 1972-08-14 | 50 | M | MC, 개그맨 | 안테나 |
| 6 | 차승원 | 1970-06-07 | 48 | M | 영화배우, 모델 | YG엔터테인먼트 |
| 7 | 이수현 | 1999-05-04 | 23 | F | 가수 | YG엔터테인먼트 |
+----+--------+------------+-----+-----+---------------+-------------------+
7 rows in set (0.00 sec)
#실습데이터2
+----+--------+---------+----------------+---------+
| ID | SEASON | EPISODE | BROADCAST_DATE | HOST |
+----+--------+---------+----------------+---------+
| 1 | 8 | 7 | 2020-09-05 | 강동원 |
| 2 | 8 | 8 | 2020-09-12 | 유재석 |
| 3 | 8 | 9 | 2020-09-19 | 차승원 |
| 4 | 8 | 10 | 2020-09-26 | 이수현 |
| 5 | 9 | 1 | 2021-09-04 | 이병헌 |
| 6 | 9 | 2 | 2021-09-11 | 하지원 |
| 7 | 9 | 3 | 2021-09-18 | 제시 |
| 8 | 9 | 4 | 2021-09-25 | 조정석 |
| 9 | 9 | 5 | 2021-10-02 | 조여정 |
| 10 | 9 | 6 | 2021-10-09 | 옥주현 |
+----+--------+---------+----------------+---------+
10 rows in set (0.00 sec)
🖍️ LEFT JOIN (두개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인방식)
LEFT JOIN 은 두 개의 테이블 중 왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블과 공통되어 일치하는 행이 있으면 함께 반환하는 것을 말한다. 만약에 일치하는 행이 없는 경우에도 왼쪽 테이블의 모든 행을 반환하며, 오른쪽 테이블의 데이터는 NULL로 표시되어 출력이 되지 않는다.#LEFT JOIN (두개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인방식)
SELECT column1, co1umn2, …
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
#예시, snl_show 테이블에 호스트로 출연한 celeb 테이블을 기준으로 celeb 테이블과 snl_show 테이블을 LEFT JOIN
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.00 sec)
FROM tableA LEFT JOIN tableB: FROM 은 쿼리의 대상이 되는 테이블을 지정한다.LEFT JOIN은 tableA를 기준이 되어서 tableB와 결합하여 결과를 생성하는 것이다.tableA의 모든 행을 반환하고, tableB의 행 중에서 tableA의 column과 tableB의 column이 일치하는 경우 그 값도 포함하여 함께 반환한다.ON tableA.column = tableB.column: ON 은 결합할 때 사용할 JOIN 조건을 지정한다. 즉 두 테이블을 연결하여 조회하고 싶은 열(column)을 지정하는 것이다. 그래서 tableA와 tableB의 특정 열(column) 값이 일치하는 행을 찾아서 결합하여 tableA 의 값과 결합된 값을 합쳐서 결과를 출력한다.🖍️ RIGHT JOIN (두개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인방식)
- RIGHT JOIN 은LEFT JOIN 과 반대로 두 개의 테이블 중 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블과 공통되어 일치하는 행이 있으면 함께 반환하는 것을 말한다. 마찬가지로 일치하는 행이 없는 경우에도 오른쪽 테이블의 모든 행을 반환하며, 왼쪽 테이블의 데이터는 NULL로 표시되어 출력이 되지 않는다.
#RIGHT JOIN (두개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인방식)
SELECT column1, co1umn2, …
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
#예시, snl_show 테이블에 호스트로 출연한 celeb 테이블을 기준으로 celeb 테이블과 snl_show 테이블을 RIGHT JOIN
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)
FROM tableA RIGHT JOIN tableB: FROM 은 쿼리의 대상이 되는 테이블을 지정한다.RIGHT JOIN은 tableA를 기준이 되어서 tableB와 결합하여 결과를 생성하는 것이다.tableB의 모든 행을 반환하고, tableA의 행 중에서 tableB의 column과 tableA의 column이 일치하는 경우 그 값도 포함하여 함께 반환한다.ON tableA.column = tableB.column: ON 은 결합할 때 사용할 JOIN 조건을 지정한다. 즉 두 테이블을 연결하여 조회하고 싶은 열(column)을 지정하는 것이다. 그래서 tableA와 tableB의 특정 열(column) 값이 일치하는 행을 찾아서 결합하여 tableB 의 값과 결합된 값을 합쳐서 결과를 출력한다.