Database

[MySQL] JOIN

비번변경 2022. 6. 12. 18:15

JOIN

데이터베이스 내 여러 테이블에서 가져온 데이터를 조합하여 하나의 테이블로 표현한다. 방식에 따라 INNER JOIN, LEFT JOIN, RIGHT JOIN으로 구분한다.

JOIN은 크게 아래와 같은 방식으로 사용하며, ON 절의 조건에 따라 여러 테이블을 하나의 테이블로 합쳐 표현할 수 있다.

<기준 테이블>
JOIN <참조 테이블>
ON <조건>

 

 

INNER JOIN

ON 절을 만족하는 데이터만을 가져오며, 두 테이블 모두 값이 있는 레코드를 선택한다. 따라서 기준 테이블과 참조 테이블의 순서가 바뀌어도 결과에 영향을 미치지 않는다.

inner join

MySQL에서 JOIN, INNER JOIN, CROSS JOIN 모두 INNER JOIN을 의미한다.

 

사용법

SELECT *
    FROM table1
    INNER JOIN table2
    ON table1.key = table2.key;

 

예시 )

아래와 같이 stand, order 테이블이 존재한다고 하자.

 

TABLE stand

HOUR
7
8
9
10
11
12

 

TABLE order

HOUR COUNT
07 3
08 1
09 1
10 2

 

INNER JOIN 결과 (key = HOUR)

HOUR 컬럼을 기준으로 JOIN한 결과는 아래와 같다.

SELECT o.HOUR, COUNT
    FROM stand as s
    JOIN order as o
    ON s.HOUR = o.HOUR;
HOUR COUNT
07 3
08 1
09 1
10 2

order 테이블 HOUR 컬럼 중에는 11, 12 값이 없어 JOIN 결과에 포함되지 않았다.

 

 

LEFT JOIN

첫번째 테이블을 기준으로 두 번째 테이블을 조합한다. ON 절을 만족하지 않는 경우, 첫 번째 테이블의 필드 값은 그대로 가져오나, 두 번째 테이블의 필드 값은 NULL로 표시된다.

left join

 

사용법

SELECT *
    FROM table1
    LEFT JOIN table2
    ON table1.key = table2.key;

 

예시 )

위의 stand, order 테이블을 이어서 사용한다.

 

LEFT JOIN 결과 (key = HOUR)

SELECT s.HOUR, COUNT
    FROM stand as s
    LEFT JOIN order as o
    ON s.HOUR = o.HOUR;
HOUR COUNT
07 3
08 1
09 1
10 2
11  
12  

order 테이블 HOUR 컬럼 중에는 11, 12 값이 없어 JOIN 결과의 COUNT 컬럼이 NULL로 처리되었다.

 

 

RIHGT JOIN

LEFTJOIN과 반대로 두번째 테이블을 기준으로 첫 번째 테이블을 조합한다.  ON 절을 만족하지 않는 경우, 두번째 테이블의 필드 값은 그대로 가져오나, 첫 번째 테이블의 필드 값은 NULL로 표시된다.

right join

 

사용법

SELECT *
    FROM table1
    RIGHT JOIN table2
    ON table1.key = table2.key;

 

예시 )

위의 stand, order 테이블을 이어서 사용한다.

 

RIGHT JOIN 결과 (key = HOUR)

SELECT s.HOUR, COUNT
    FROM stand as s
    RIGHT JOIN order as o
    ON s.HOUR = o.HOUR;
HOUR COUNT
07 3
08 1
09 1
10 2

 

 

JOIN 요약

JOIN은 간단히 아래의 이미지처럼 이해할 수 있다.

joins

단, MySQL의 경우 FULL OUTER JOIN(하단의 두 개)을 지원하지 않는다.

 

 

참고 문서

https://www.w3schools.com/mysql/mysql_join_inner.asp

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins