(1) JOIN
(2) JOIN - FULL OUTER 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)
🖍️ FULL OUTER JOIN (두개의 테이블에서 공통영역을 포함하여 양쪽 테이블의 다른영역을 모두 포함하는 조인방식)
#FULL OUTER JOIN (두개의 테이블에서 공통영역을 포함하여 양쪽 테이블의 다른영역을 모두 포함하는 조인방식)
SELECT column1, co1umn2, …
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
FULL OUTER JOIN 은 두 개의 테이블 간에 교차하는 데이터뿐만 아니라 양쪽 테이블의 모든 데이터를 포함하는 결과를 반환한다. 이를 통해 왼쪽 테이블과 오른쪽 테이블의 모든 행을 포함하는 결과를 얻을 수 있다.FULL OUTER JOIN은 다음과 같이 작동한다.
왼쪽 테이블과 오른쪽 테이블 간의 공통된 열(column)의 값이 일치하는 행을 반환한다.
왼쪽 테이블에만 있는 행은 결과에 포함되고, 오른쪽 테이블에 대응되는 값이 없는 경우 해당 열의 값은 NULL로 표시된다.
마찬가지로, 오른쪽 테이블에만 있는 행도 결과에 포함되고, 왼쪽 테이블에 대응되는 값이 없는 경우 해당 열의 값은 NULL로 표시된다.
그래서 LEFT, RIGHT 와 다르게 두 테이블을 결합할 때, 양쪽 테이블의 데이터를 완전하게 보존하면서 교차하는 데이터와 함께 결합된 결과를 얻을 수 있다.
예를 들어, "주문(Order)" 테이블과 "고객(Customer)" 테이블을 FULL OUTER JOIN하여 모든 주문과 모든 고객의 정보를 결합할 수 있어 이를 통해 양쪽 테이블에 있는 모든 데이터를 한 번에 조회가 가능하다.
MySQL 에서는 FULL OUTER JOIN 을 지원하지 않으므로 UNION,LEFT, RIGHT 을 사용한 쿼리로 같은 결과를 만들 수 있다SELECT column1, co1umn2, …
FROM tableA
LEFT JOIN tableB ON tableA.column = tableB.column
UNION
SELECT column1, co1umn2, …
FROM tableA
RIGHT JOIN tableB ON tableA.column = tableB.column
WHERE condition;
#예시, snl_show 테이블에 호스트로 출연한 celeb 테이블을 기준으로 celeb 테이블과 snl_show 테이블을 FULL OUTER 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;
-> 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 | host | host_name |
+----+-------+------+--------------+
| 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)
FROM tableA LEFT JOIN tableB: FROM 은 쿼리의 대상이 되는 테이블을 지정한다.
LEFT JOIN은 tableA를 기준이 되어서 tableB와 결합하여 결과를 생성하는 것이다.
그래서 tableA의 모든 행을 반환하고, tableB의 행 중에서 tableA의 column과 tableB의 column이 일치하는 경우 그 값도 포함하여 함께 반환한다.
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) 값이 일치하는 행을 찾아서 결합하여 tableA 의 값과 결합된 값을 합쳐서 결과를 출력한다.
여기에 UNION을 사용하게 된다면 LEFT JOIN 결과와 RIGHT JOIN 결과를 모두 합하고 중복된 값을 제거한 왼쪽 테이블과 오른쪽 테이블의 모든 행을 포함하는 결과를 얻을 수 있다