둘 이상의 테이블을 연결해서 데이터를 검색하는 방법
서로 연결하려면 적어도 하나의 컬럼
을 공유하고 있어야 한다.
공유하고 있는 컬럼을 PK
또는 FK
값으로 사용한다.
INNER JOIN과 LEFT / RIGHT (OUTER) JOIN은 꼭 사용 방법을 알아두자.
오라클에는 OUTER JOIN이 있지만, MySQL에는 없기 때문에 LEFT JOIN + RIGHT JOIN 해준다
SELECT *
FROM emp AS a
INNER JOIN dept AS b
ON a.deptno = b.deptno;
INNER JOIN
은 기준 테이블(emp
), 조인 테이블(dept
)에 조인 컬럼(deptno
)에 해당하는 값이 모두 존재하는 경우에만 데이터가 조회된다.
SELECT *
FROM emp AS a
LEFT OUTER JOIN dept AS b
ON a.deptno = b.deptno;
아우터 조인
에서 LEFT, RIGHT는 기준 테이블
을 지정하는 것이고, 위의 쿼리에서 LEFT OUTER JOIN의 기준 테이블은 emp
테이블이다.
OUTER JOIN
의 경우 조인 테이블(dept
)에 데이터가 없어도 기준 테이블(emp
)의 모든 데이터가 조회되고 조인 테이블(dept
)에 데이터가 존재할 경우 해당 데이터를 참조할 수 있다.
SELECT *
FROM emp AS a
RIGHT OUTER JOIN dept AS b
ON a.deptno = b.deptno;
LEFT OUTER JOIN
과 개념은 동일하지만 RIGHT
에 해당하는 dept
테이블이 기준 테이블이 된다.
LEFT OUTER JOIN의 결과와 다르게 dept
테이블의 모든 데이터가 조회되고 조인 테이블(emp
)의 테이블에 데이터가 있을 경우 해당 값을 표시한다.
대부분의 경우에서 LEFT OUTER JOIN을 많이 사용하지만 상황에 따라 RIGHT OUTER JOIN을 사용할 수 있으니 꼭 이해하고 있어야 한다.
OUTER JOIN
을 사용하는 이유는 기존 테이블의 데이터를 누락 없이 모두 조회하고 참조 테이블의 값이 있을 경우 해당 값을 사용하기 위해서다.
SELECT *
FROM emp AS a
FULL OUTER JOIN dept AS b
ON a.deptno = b.deptno;
FULL OUTER JOIN
은 두 개의 테이블을 합쳐서 조회한다고 생각하자.
JOIN이 될 경우 해당 값을 표시하고 JOIN이 안되면 NULL
로 표시하고 두 테이블의 모든 데이터가 조회된다.
자주 사용하지는 않는다.
CROSS JOIN
은 INNER JOIN
, OUTER JOIN
과 약간의 차이가 존재한다.
이너 조인과 아우터 조인이 두 테이블 간의 특정 기준에 의해 데이터 결합의 결과를 보여주는 방식이었다면, 크로스 조인은 특정 기준 없이 두 테이블 간에 가능한 모든 경우의 수에 대한 결합을 결과로 보여주는 방식이다.
쿼리를 작성할 때에도 특정한 기준이 필요없기 때문에 ON
절이 없어지게 된다.
SELECT a.ENAME, b.ENAME
FROM emp AS a
CROSS JOIN dept AS b;