Appearance
[Database SQL] JOIN
조인이란?
두 개 이상의 테이블(또는 서브쿼리 결과 집합)을 연결해 원하는 데이터를 조회하는 방법
보통 공통된 키 값이나 조건을 기준으로 연결한다. 단, CROSS JOIN처럼 조건 없이 모든 조합을 만드는 경우도 있다.
JOIN 종류
- INNER JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- CROSS JOIN
- SELF JOIN
INNER JOIN
교집합으로, 기준 테이블과 join 테이블의 중복된 값을 보여준다.
sqlSELECT A.NAME, B.AGE FROM EX_TABLE A INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMPLEFT OUTER JOIN
왼쪽(기준) 테이블의 모든 값을 포함하고, 오른쪽(조인) 테이블과 매칭되는 값을 함께 보여준다. 오른쪽 테이블에 매칭되는 값이 없으면 NULL로 채워진다.
왼쪽테이블 기준으로 JOIN을 한다고 생각하면 편하다.
SQLSELECT A.NAME, B.AGE FROM EX_TABLE A LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMPRIGHT OUTER JOIN
LEFT OUTER JOIN과는 반대로 오른쪽 테이블 기준으로 JOIN하는 것이다.
SQLSELECT A.NAME, B.AGE FROM EX_TABLE A RIGHT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMPFULL OUTER JOIN
합집합에 해당한다. A와 B 테이블의 모든 행이 검색되며, 매칭되지 않는 쪽은
NULL로 채워진다.단, 일부 DBMS(예: MySQL)는
FULL OUTER JOIN문법을 직접 지원하지 않아UNION등으로 대체해야 한다.sqlSELECT A.NAME, B.AGE FROM EX_TABLE A FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMPCROSS JOIN
모든 경우의 수를 전부 표현해주는 방식이다.
A가 3개, B가 4개면 총 3*4 = 12개의 데이터가 검색된다.
sqlSELECT A.NAME, B.AGE FROM EX_TABLE A CROSS JOIN JOIN_TABLE BSELF JOIN
자기 자신을 다시 조인하는 패턴이다.
하나의 테이블에 서로 다른 alias를 붙여 관계를 표현할 때 자주 사용한다.
자신이 갖고 있는 칼럼을 다양하게 변형시켜 활용할 때 자주 사용한다.
sqlSELECT A.NAME, B.AGE FROM EX_TABLE A JOIN EX_TABLE B ON A.MANAGER_NO = B.NO_EMP