반응형
집합 연산자와 조인의 차이점
- 집합 연산자: 두 개 이상의 SELECT문의 결과 값을 세로로 연결
- 조인(join): 두 개 이상의 테이블 데이터를 가로로 연결
조인의 종류
1. NATURAL JOIN
조인 대상이 되는 두 테이블에 이름과 자료형이 같은 열을 찾은 후 그 열을 기준으로 등가조인을 해주는 방식
기준이 되는 열은(여기선 DEPTNO) SELECT절에 명시할 때 테이블 이름을 붙이면 안되는 특성
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, DEPTNO, D.DNAME, D.LOC
FROM EMP E NATURAL JOIN DEPT D
ORDER BY DEPTNO, E.EMPNO;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DNAME LOC
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
7782 CLARK MANAGER 7839 1981/06/09 2450 10 ACCOUNTING NEW YORK
7839 KING PRESIDENT 1981/11/17 5000 10 ACCOUNTING NEW YORK
7934 MILLER CLERK 7782 1982/01/23 1300 10 ACCOUNTING NEW YORK
7369 SMITH CLERK 7902 1980/12/17 800 20 RESEARCH DALLAS
7566 JONES MANAGER 7839 1981/04/02 2975 20 RESEARCH DALLAS
7788 SCOTT ANALYST 7566 1982/12/09 3000 20 RESEARCH DALLAS
7876 ADAMS CLERK 7788 1983/01/12 1100 20 RESEARCH DALLAS
7902 FORD ANALYST 7566 1981/12/03 3000 20 RESEARCH DALLAS
7499 ALLEN SALESMAN 7698 1981/02/20 1600 300 30 SALES CHICAGO
7521 WARD SALESMAN 7698 1981/02/22 1250 500 30 SALES CHICAGO
7654 MARTIN SALESMAN 7698 1981/09/28 1250 1400 30 SALES CHICAGO
7698 BLAKE MANAGER 7839 1981/05/01 2850 30 SALES CHICAGO
7844 TURNER SALESMAN 7698 1981/09/08 1500 30 SALES CHICAGO
7900 JAMES CLERK 7698 1981/12/03 950 30 SALES CHICAGO
2. JOIN ~ USING
NATURAL JOIN이 자동으로 조인 기준 열을 지정하는 것과 달리 USING 키워드에 조인 기준으로 사용할 열을 명시
기준이 되는 열은(여기선 DEPTNO) SELECT절에 명시할 때 테이블 이름을 붙이면 안되는 특성
FROM TABLE1 JOIN TABLE2 USING (조인에 사용할 기준열)
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, DEPTNO, D.DNAME, D.LOC
FROM EMP E JOIN DEPT D USING (DEPTNO)
WHERE SAL >= 3000
ORDER BY DEPTNO, E.EMPNO;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DNAME LOC
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
7839 KING PRESIDENT 1981/11/17 5000 10 ACCOUNTING NEW YORK
7788 SCOTT ANALYST 7566 1982/12/09 3000 20 RESEARCH DALLAS
7902 FORD ANALYST 7566 1981/12/03 3000 20 RESEARCH DALLAS
3. JOIN ~ ON
가장 범용성 있는 조인 방식.
기존 WHERE절에 있는 조인 조건식을 ON 키워드 옆에 작성.
조인 기준 조건식은 ON에 명시하고 그 밖의 출력 행을 걸러 내기 위해 WHERE 조건식을 따로 사용하는 방식
FROM TABLE1 JOIN TABLE2 ON (조인 조건식)
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO, D.DNAME, D.LOC
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
WHERE SAL >= 3000
ORDER BY DEPTNO, E.EMPNO;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DNAME LOC
---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- -------------- -------------
7839 KING PRESIDENT 1981/11/17 5000 10 ACCOUNTING NEW YORK
7788 SCOTT ANALYST 7566 1982/12/09 3000 20 RESEARCH DALLAS
7902 FORD ANALYST 7566 1981/12/03 3000 20 RESEARCH DALLAS
4. OUTER JOIN
외부 조인에 사용.
다른 SQL-99 방식의 조인과 마찬가지로 WHERE절이 아닌 FROM절에서 외부 조인을 선언.
왼쪽 외부 조인 (Left Outer Join) |
기존 | WHERE TABLE1.COL1 = TABLE2.COL1(+) |
SQL-99 | FROM TABLE1 LEFT OUTER JOIN TABLE2 ON (조인 조건식) | |
오른쪽 외부 조인 (Right Outer Join) |
기존 | WHERE TABLE1.COL1(+) = TABLE2.COL1 |
SQL-99 | FROM TABLE1 RIGHT OUTER JOIN TABLE2 ON (조인 조건식) | |
전체 외부 조인 (Full Outer Join) |
기존 | 기본 문법 없음(UNION 집합 연산자를 활용) |
SQL-99 | FROM TABLE1 FULL OUTER JOIN TABLE2 ON (조인 조건식) |
왼쪽 외부 조인 SQL-99
SELECT E1.EMPNO, E1.ENAME, E1.MGR,
E2.EMPNO AS MGR_EMPNO,
E2.ENAME AS MGR_ENAME
FROM EMP E1 LEFT OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
ORDER BY E1.EMPNO;
EMPNO ENAME MGR MGR_EMPNO MGR_ENAME
---------- ---------- ---------- ---------- ----------
7369 SMITH 7902 7902 FORD
7499 ALLEN 7698 7698 BLAKE
7521 WARD 7698 7698 BLAKE
7566 JONES 7839 7839 KING
7654 MARTIN 7698 7698 BLAKE
7698 BLAKE 7839 7839 KING
7782 CLARK 7839 7839 KING
7788 SCOTT 7566 7566 JONES
7839 KING
7844 TURNER 7698 7698 BLAKE
7876 ADAMS 7788 7788 SCOTT
7900 JAMES 7698 7698 BLAKE
7902 FORD 7566 7566 JONES
7934 MILLER 7782 7782 CLARK
오른쪽 외부 조인 SQL-99
SELECT E1.EMPNO, E1.ENAME, E1.MGR,
E2.EMPNO AS MGR_EMPNO,
E2.ENAME AS MGR_ENAME
FROM EMP E1 RIGHT OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
ORDER BY E1.EMPNO;
EMPNO ENAME MGR MGR_EMPNO MGR_ENAME
---------- ---------- ---------- ---------- ----------
7369 SMITH 7902 7902 FORD
7499 ALLEN 7698 7698 BLAKE
7521 WARD 7698 7698 BLAKE
7566 JONES 7839 7839 KING
7654 MARTIN 7698 7698 BLAKE
7698 BLAKE 7839 7839 KING
7782 CLARK 7839 7839 KING
7788 SCOTT 7566 7566 JONES
7844 TURNER 7698 7698 BLAKE
7876 ADAMS 7788 7788 SCOTT
7900 JAMES 7698 7698 BLAKE
7902 FORD 7566 7566 JONES
7934 MILLER 7782 7782 CLARK
7654 MARTIN
7521 WARD
7844 TURNER
7934 MILLER
7369 SMITH
7876 ADAMS
7900 JAMES
7499 ALLEN
전체 외부 조인 SQL-99
SELECT E1.EMPNO, E1.ENAME, E1.MGR,
E2.EMPNO AS MGR_EMPNO,
E2.ENAME AS MGR_ENAME
FROM EMP E1 FULL OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
ORDER BY E1.EMPNO;
EMPNO ENAME MGR MGR_EMPNO MGR_ENAME
---------- ---------- ---------- ---------- ----------
7369 SMITH 7902 7902 FORD
7499 ALLEN 7698 7698 BLAKE
7521 WARD 7698 7698 BLAKE
7566 JONES 7839 7839 KING
7654 MARTIN 7698 7698 BLAKE
7698 BLAKE 7839 7839 KING
7782 CLARK 7839 7839 KING
7788 SCOTT 7566 7566 JONES
7839 KING
7844 TURNER 7698 7698 BLAKE
7876 ADAMS 7788 7788 SCOTT
7900 JAMES 7698 7698 BLAKE
7902 FORD 7566 7566 JONES
7934 MILLER 7782 7782 CLARK
7934 MILLER
7900 JAMES
7876 ADAMS
7844 TURNER
7654 MARTIN
7521 WARD
7369 SMITH
7499 ALLEN
5. SQL-99 조인 방식에서 세 개 이상의 테이블을 조인할 때
기존 조인 방식은 FROM절에 조인 테이블을 명시하고 조인 관련 조건식을 WHERE절에 명시
→ 테이블 수가 두 개를 넘더라도 아래와 같이 작성하면 문제가 없음
FROM TABLE1, TABLE2, TABLE3
WHERE TABLE1.COL = TABLE2.COL
AND TABLE2.COL = TABLE3.COL
FROM절에 조인 관련 내요을 작성해야 하는 SQL-99 방식에서는 테이블의 개수가 두 개를 넘어갈 때 다음과 같이 FROM절에 두 개 테이블을 키워드로 조인한 바로 옆에 SQL-99 방식의 조인 내요을 추가로 작성하면 세 개 이상을 테이블도 조인 가능!
FROM TABLE1 JOIN TABLE2 ON (조건식)
JOIN TABLE3 ON (조건식)
반응형
'Database > Oracle' 카테고리의 다른 글
[SQL/프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (0) | 2023.08.22 |
---|