[SQL] : JOIN - SELF JOIN

김대현·2024년 6월 9일

(1) JOIN
(2) JOIN - SELF JOIN 문법


(1) JOIN

  • JOIN은 관계형 데이터베이스를 다루는 SQL 에서 두 개 이상의 테이블 간의 데이터를 결합하여 새로운 결과 집합을 생성하는 데 사용되는 연산자이다. 즉, JOIN을 사용하면 서로 다른 테이블에 저장된 데이터를 연관시켜서 필요한 정보를 한 번에 조회하거나 가져오는 것이 가능하다.

(2) JOIN - FULL OUTER 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)을 지정하는 것이다. 그래서 tableAtableB의 특정 열(column) 값이 일치하는 행(row)을 찾아서 결합하여 tableA 의 값과 결합된 값을 합쳐서 결과를 출력한다.

  • celeb 테이블의 name 열의 값과 snl_show 테이블의 host 열의 값이 서로 동일하며 같은 행을 찾아야 하며 그 중에서 소속사인 agency'안테나'인 행을 선택하여 지정해 출력하는 것이다. 두 개의 조건을 만족해야 하기에 AND 논리 연산자를 사용해 준다.

  • 즉 두개의 서로 다른 테이블에서 같은 값을 가지며 관계성을 가지고 있는 행(row)을 찾는 것이라고 할 수 있다.

profile
데이터 분석 스쿨 블로그 입니다.

0개의 댓글