조인(Join)
- 개념: 두 개 이상의 테이블 데이터를 가로로 연결한 것
-
예시
SELECT * FROM EMP, DEPT; -- 이 경우 emp테이블과 dept테이블의 모든 행 조합이 출력됨 SELECT * FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; -- 두 테이블에서 DEPTNO가 일치하는 부분만 출력해줌 -- 별칭 설정 SELECT * FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO; SELECT E.EMPNO, E.ENAME, E.DEPTNO FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO; -- *을 사용하면 어떤 순서로 열이 출력될지 명확히 알 수 없으며 열의 수정 및 삭제 변화를 감지하기 어렵다
주의할 점은 조인하는 테이블에 동일한 열이름이 있을 경우에, 그대로 쓰면 안되고
E.DEPTNO
이런 식으로 접근하고자 하는 테이블을 명시해주어야 한다.
-
비등가조인
SELECT * FROM EMP E, SALGRADE S WHERE E.SAL, BETWEEN S.LOSAL AND S.HISAL;
등가조인은 특정 열에 일치한 데이터를 기준으로 출력 행을 선정하는 방식이고, 이 외의 조인은 비등가조인이다.
-
NATURAL JOIN(SQL 99)
-- 등가 조인이랑 같다. 문법만 다르다. SELECT E.EMPNO, E.ENAME, DEPTNO FROM EMP E NATURAL JOIN DEPT D;
단지 내츄럴 조인을 쓰면, 일치하는 열을 찾아 자동으로 그 기준으로 조인을 해준다는 점이다. 그래서 WHERE절을 쓰지 않으며, 열 이름도 테이블로 접근하지 않고 그냥 쓴다.
-
자체 조인(SELF JOIN): 하나의 테이블 내에서 조인하기
-- 카피 SELECT * FROM EMP E, COPY_EMP C WHERE E.MGR = C.EMPNO; -- 자체 조인 SELECT E1.EMPNO, E1.NAME, E1.MGR, E2.EMPNO AS MGR_EMPNO, E2.NAME AS MGR_EMPNO FROM EMP E1, EMP E2 WHERE E1.MGR = E2.EMPNO;
같은 테이블을 사용하되 별칭만 다르게 사용한다. 첫번째 카피 방법은 똑같은 테이블 두개를 계속 유지해야 하므로 비효율적이다.
-
외부조인(OUTER JOIN)
두 테이블 간 조인 수행에서 조인 기준 열의 어느 한 쪽이 NULL 이어도 강제로 출력하는 방식을 말한다. 조인 방법은 (+)를 붙이는 것.
SELECT E1.EMPNO, E1.NAME, E1.MGR, E2.EMPNO AS MGR_EMPNO, E2.NAME AS MGR_EMPNO FROM EMP E1, EMP E2 WHERE E1.MGR(+) = E2.EMPNO;
(+)를 왼쪽에 붙여도 되고 오른쪽에 붙여도 되는데, 붙이는 쪽에 따라 결과가 다르게 출력된다. (+)를 붙이는 쪽이 null이어도 출력하는 쪽이다. 양쪽에 (+)를 붙이는 문법은 불가하며, full outer join을 하려고 하면 별도 문법을 사용해야 한다.