JOIN
둘 이상의 테이블을 연결해서 데이터를 검색하는 방법
서로 연결하려면 적어도 하나의 컬럼을 공유하고 있어야 한다.
공유하고 있는 컬럼을 PK 또는 FK 값으로 사용한다.
- INNER JOIN
- 기준 테이블과 조인 테이블 모두 데이터가 존재해야 조회됨.
- LEFT / RIGHT (OUTER) JOIN
- 기준 테이블에만 데이터가 존재하면 조회됨.
- OUTER JOIN
INNER JOIN과 LEFT / RIGHT (OUTER) JOIN은 꼭 사용 방법을 알아두자.
오라클에는 OUTER JOIN이 있지만, MySQL에는 없기 때문에 LEFT JOIN + RIGHT JOIN 해준다
INNER JOIN : 공통부분만 SELECT
SELECT *
FROM emp AS a INNER JOIN dept AS b ON a.deptno = b.deptno;
기준 테이블(emp), 조인 테이블(dept)에 조인 컬럼(deptno)에 해당하는 값이 모두 존재하는 경우에만 데이터가 조회된다.
LEFT JOIN
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)에 데이터가 존재할 경우 해당 데이터를 참조할 수 있다
RIGHT JOIN
SELECT *
FROM emp AS a RIGHT OUTER JOIN dept AS b ON a.deptno = b.deptno;
RIGHT에 해당하는 dept 테이블이 기준 테이블이 된다.
LEFT OUTER JOIN의 결과와 다르게 dept 테이블의 모든 데이터가 조회되고 조인 테이블(emp)의 테이블에 데이터가 있을 경우 해당 값을 표시한다.
OUTER JOIN을 사용하는 이유는 기존 테이블의 데이터를 누락 없이 모두 조회하고 참조 테이블의 값이 있을 경우 해당 값을 사용하기 위해서다.
OUTER JOIN
SELECT *
FROM emp AS a FULL OUTER JOIN dept AS b ON a.deptno = b.deptno;
두 개의 테이블을 합쳐서 조회한다고 생각하자.
JOIN이 될 경우 해당 값을 표시하고 JOIN이 안되면 NULL로 표시하고 두 테이블의 모든 데이터가 조회된다.
CROSS JOIN
SELECT a.ENAME, b.ENAME
FROM emp AS a CROSS JOIN dept AS b;
CROSS JOIN은 INNER JOIN, OUTER JOIN과 약간의 차이가 존재한다.
이너 조인과 아우터 조인이 두 테이블 간의 특정 기준에 의해 데이터 결합의 결과를 보여주는 방식이었다면, 크로스 조인은 특정 기준 없이 두 테이블 간에 가능한 모든 경우의 수에 대한 결합을 결과로 보여주는 방식이다.
쿼리를 작성할 때에도 특정한 기준이 필요없기 때문에 ON절이 없어지게 된다.
'TIL > SQL' 카테고리의 다른 글
TIL (7/17) <if문, 임시테이블> (0) | 2024.07.17 |
---|---|
DBMS (0) | 2024.07.16 |
TIL (7/15) <두 개의 컬럼으로 그룹화하기, 조건에 맞는 사용자 조회하기> (0) | 2024.07.15 |
TIL (7/12) <group by, having, 서브쿼리를 사용하는 이유> (2) | 2024.07.12 |
TIL (7/11) <Round(), div> (0) | 2024.07.11 |