포스트

[MySQL] 테이블 INNER JOIN

RDBMS의 한 종류인 MySQL 에서 2개 이상의 테이블을 JOIN 하려고 할 때, 몇 가지 규칙이 존재합니다.

이번 포스트에서는 MySQL 에서 사용하는 INNER JOIN 절에 대해 알아보겠습니다.

INNER JOIN 절에서 INNER 을 생략하여 JOIN 만 사용할 수 있습니다.

테이블들의 교집합

JOIN 절은 2개 이상의 테이블에서 교집합을 이용해 원하는 데이터를 추출하는 연산입니다.

이때, JOIN 을 사용하기 위해서는 ON 절을 함께 사용해야 합니다.

ON 절은 2개 이상의 테이블을 결합할 때, 어떠한 조건으로 결합할지 알려줍니다.

JOIN 절은 LEFT, INNER, RIGHT JOIN 3가지가 있으며, 다이어그램으로 표현하면 다음과 같습니다.


MySQL_JOIN


LEFT / RIGHT JOIN

LEFT JOIN 은 2개의 테이블에서 첫 번째(SQL 문에서 왼쪽에 있는) 테이블을 기준으로

두 번째 테이블을 조합하는 방법입니다.


1
2
3
4
5
6
-- 1번 그림의 SQL
SELECT *
FROM Table_A as A
    LEFT JOIN Table_B as B
ON A.key = B.key;
-- WHERE B.key is null -- 2번 그림을 위한 WHERE절


RIGHT JOIN 은 2개의 테이블에서 두 번째(SQL 문에서 오른쪽에 있는) 테이블을 기준으로

첫 번째 테이블을 조합하는 방법입니다.


1
2
3
4
5
6
-- 4번 그림의 SQL
SELECT *
FROM Table_A as A
    RIGHT JOIN Table_B as B
ON A.key = B.key;
-- WHERE A.key is null -- 5번 그림을 위한 WHERE절


INNER JOIN

INNER JOIN 은 2개의 테이블에서 ON 절 조건에 일치하는 결과만 출력합니다.

이때, INNER JOIN을 생략하고 대신 콤마를 사용할 수 있습니다.


1
2
3
4
5
-- 3번 그림의 SQL
SELECT *
FROM Table_A as A INNER JOIN Table_B as B
-- FROM Table_A as A, Table_B as B -- INNER JOIN 생략 가능
ON A.key = B.key;


JOIN 절 주의사항

JOIN 절에서 테이블 작성 순서에 따라 결과가 달라질 수 있습니다.

따라서 어떤 테이블을 기준으로 이떤 테이블을 JOIN 해야 하는지 주의해서 사용해야 합니다.

JOIN 문제

해커랭크 SQL 문제

문제 정답
1
2
3
4
5
6
7
8
9
10
11
12
SELECT C.COMPANY_CODE, C.FOUNDER, 
    COUNT(DISTINCT LM.LEAD_MANAGER_CODE),
    COUNT(DISTINCT SM.SENIOR_MANAGER_CODE),
    COUNT(DISTINCT M.MANAGER_CODE),
    COUNT(DISTINCT E.EMPLOYEE_CODE)
FROM COMPANY as C 
    JOIN LEAD_MANAGER as LM ON C.COMPANY_CODE = LM.COMPANY_CODE
    JOIN SENIOR_MANAGER as SM ON LM.LEAD_MANAGER_CODE = SM.LEAD_MANAGER_CODE
    JOIN MANAGER as M ON SM.SENIOR_MANAGER_CODE = M.SENIOR_MANAGER_CODE
    JOIN EMPLOYEE as E ON M.MANAGER_CODE = E.MANAGER_CODE
GROUP BY C.COMPANY_CODE, C.FOUNDER
ORDER BY C.COMPANY_CODE;
</details
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.