(1) JOIN
(2) JOIN - SELF 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)
🖍️ SELF JOIN (동일한 테이블을 여러 번 조인하는 방법)
#FULL OUTER JOIN (두개의 테이블에서 공통영역을 포함하여 양쪽 테이블의 다른영역을 모두 포함하는 조인방식)
SELECT column1, co1umn2, …
FROM tableA, tableB, ...
WHERE condition;
SELF JOIN 은 하나의 동일한 테이블을 여러 번 조인하는 방법이다. 즉 테이블 자신이 자신과 합쳐지는 것이라고 할 수 있다. 이 JOIN은 일반적으로 테이블 내의 행을 서로 비교해야 할 때 사용된다. 예를 들어, 직원의 명단이 나열되어 있는 테이블에서 상사와 직원의 관계를 표시할 때 사용하며 데이터가 서로 포함하는 관계를 가지는 경우에 사용하면 유용하다.
하나의 동일한 테이블을 조인할 수도 있지만 서로 다른 테이블에서 같은 값(value)이나 데이터를 서로 포함하는 관계를 가지는 경우에도 조회하기 위해 사용할 수 있다.
SELF JOIN은 테이블에 별칭을 붙이는 기능을 활용해 자기 자신과 결합하는 조인이다. 특별한 명령어가 정해져있지는 않고 INNER JOIN이나 FROM-WHERE의 암묵적 표현법을 사용할 수 있다.
#예시, celeb 테이블의 연예인 중,snLshow 에 host 로 출연했고 소속사가 안테나인 사람의 이름과 직업을 검색
mysql> SELECT celeb.name, celeb.job_title
-> FROM celeb, snl_show
-> WHERE celeb.name = snl_show.host AND celeb.agency = '안테나';
+-------+-----------+
| name | job_title |
+-------+-----------+
| 유재석 | MC, 개그맨 |
+-------+-----------+
1 row in set (0.00 sec)
SELECT celeb.name, celeb.job_title: celeb 테이블에서 이름과 직업 제목을 선택한다.
FROM celeb, snl_show: FROM 은 쿼리의 대상이 되는 테이블을 지정한다. celeb 테이블과 snl_show 테이블을 FROM 으로 암묵적으로 조인하는 것이다.
WHERE celeb.name = snl_show.host AND celeb.agency = '안테나';: ON 은 결합할 때 사용할 JOIN 조건을 지정한다. 즉 두 테이블을 연결하여 조회하고 싶은 열(column)을 지정하는 것이다. 그래서 tableA와 tableB의 특정 열(column) 값이 일치하는 행(row)을 찾아서 결합하여 tableA 의 값과 결합된 값을 합쳐서 결과를 출력한다.
celeb 테이블의 name 열의 값과 snl_show 테이블의 host 열의 값이 서로 동일하며 같은 행을 찾아야 하며 그 중에서 소속사인 agency가 '안테나'인 행을 선택하여 지정해 출력하는 것이다. 두 개의 조건을 만족해야 하기에 AND 논리 연산자를 사용해 준다.
즉 두개의 서로 다른 테이블에서 같은 값을 가지며 관계성을 가지고 있는 행(row)을 찾는 것이라고 할 수 있다.