JOIN문은 2개 이상의 테이블을 (조건에 맞게) 결합해 가상의 테이블처럼 만들어서 결과를 보여주는 것이라 할 수 있다.
이렇게 총 4가지 유형이 있다. 일반적으로 가장 많이 사용하는 것이 INNER 조인이다.
그럼 각각의 조인에 대해 살펴보도록 하자.
SELECT A.CUSTOMER_ID, A.NAME, B.AMOUNT, B.PAYMENT_DATE
FROM CUSTOMER AS A
INNER JOIN PAYMENT AS B
ON A.CUSTOMER_ID = B.CUSTOMER_ID;
특정 컬럼을 기준으로 정확하게 매칭된 집합을 반환한다.
위의 예시에서는 CUSTOMER_ID를 기준으로 조인하게 된다. 즉, A와 B 둘 다 CUSTOMER_ID를 갖고 있다는 의미이다. 그래서 JOIN은 주로 Primary Key를 기준으로 수행된다.
테이블이 최소 두 개는 사용되기 때문에 ALIAS를 써야 편하다.
참고로, 그냥 JOIN
이라고만 작성해도 INNER JOIN을 의미한다.
# LEFT 조인
SELECT A.CUSTOMER_ID, A.NAME, B.AMOUNT, B.PAYMENT_DATE
FROM CUSTOMER A
LEFT JOIN PAYMENT B
ON A.CUSTOMER_ID = B.CUSTOMER_ID;
# RIGHT 조인
SELECT A.CUSTOMER_ID, A.NAME, B.AMOUNT, B.PAYMENT_DATE
FROM CUSTOMER A
RIGHT JOIN PAYMENT B
ON A.CUSTOMER_ID = B.CUSTOMER_ID;
특정 컬럼을 기준으로 매칭하되, 한쪽 집합은 모두 출력하고 다른 한쪽 집합은 매칭되는 컬럼의 값만 출력한다. 매칭되지 않은 컬럼의 값은 NULL로 채운다.
LEFT 조인이면 왼쪽 집합(CUSTOMER 테이블)의 값은 모두 출력하고, 오른쪽 집합(PAYMENT 테이블)은 매칭되는 값만 출력한다.
반대로 RIGHT 조인이면 오른쪽 집합(PAYMENT 테이블)의 값은 모두 출력하고, 왼쪽 집합(CUSTOMER 테이블)은 매칭되는 값만 출력한다.
SELECT A.CUSTOMER_ID, A.NAME, B.AMOUNT, B.PAYMENT_DATE
FROM CUSTOMER A
FULL OUTER JOIN PAYMENT B
ON A.CUSTOMER_ID = B.CUSTOMER_ID;
# 다른 방식
SELECT A.CUSTOMER_ID, A.NAME, B.AMOUNT, B.PAYMENT_DATE
FROM CUSTOMER A
JOIN PAYMENT B;
JOIN 하려는 테이블들의 출력가능한 모든 데이터를 포함한 집합을 반환한다.
쉽게 말해, INNER, LEFT, RIGHT 조인 결과를 모두 출력하는 것이라 할 수 있다.