코딩하는 문과생

[SQL] Oracle, 조인 본문

프로그래밍/SQL

[SQL] Oracle, 조인

코딩하는 문과생 2020. 3. 30. 14:40

조인

: 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용

: 오라클 조인은 ANSI표준과 조인하는 방법이 다름

SELECT *
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY EMPNO;

SELECT *
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY EMPNO;

 

-등가조인

: 특정 열 값이 일치한 출력 결과를 사용하는 방식

= 내부조인, 단순조인

SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY D.DEPTNO, E.EMPNO;

SELECT E.EMPNO, E.ENAME, E.SAL, D.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
    AND SAL>=3000
ORDER BY D.DEPTNO, E.EMPNO;

 

-비등가조인

:등가 조인 방식 이외의 방식

SELECT *
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

-자체조인

: 하나의 테이블을 여러 개의 테이블처럼 활용하여 조인

SELECT E1.EMPNO, E1.ENAME, E1.MGR
    , E2.EMPNO AS MGR_EMPNO
    , E2.ENAME AS MGR_ENAME
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO;

 

-외부조인

: 두 테이블 간 조인 수행에서 조인 기준 열의 어느 한쪽이 NULL이어도 강제로 출력하는 방식

SELECT E1.EMPNO, E1.ENAME, E1.MGR
    , E2.EMPNO AS MGR_EMPNO
    , E2.ENAME AS MGR_ENAME
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO(+)
ORDER BY E1.EMPNO;

 

참고: ANSI 표준

JOIN

JOIN~USING(열 이름)

JOIN~ON(조건식)

OUTER JOIN(LEFT, RIGHT, FULL)

 

-종합예제

--1
SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL
FROM DEPT D, EMP E
WHERE D.DEPTNO = E.DEPTNO
    AND E.SAL>2000
ORDER BY DEPTNO, EMPNO;

--2
SELECT D.DEPTNO, D.DNAME
    , TRUNC(AVG(E.SAL)) AS AVG_SAL
    , MAX(E.SAL) AS MAX_SAL
    , MIN(E.SAL) AS MIN_SAL
    , COUNT(*) AS CNT
FROM DEPT D, EMP E
WHERE D.DEPTNO = E.DEPTNO
GROUP BY D.DEPTNO, D.DNAME;

--3
SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.JOB, E.SAL
FROM DEPT D, EMP E
WHERE D.DEPTNO = E. DEPTNO(+)
ORDER BY D.DEPTNO, EMPNO;

--4
SELECT D.DEPTNO, D.DNAME 
    , E.DEPTNO, E.EMPNO, E.ENAME, E.MGR, E.SAL, E.DEPTNO
    , S.LOSAL, S.HISAL, S.GRADE
    , E2.EMPNO AS MGR_EMPNO, E2.ENAME AS MGR_ENAME
FROM EMP E, DEPT D, SALGRADE S, EMP E2
WHERE D.DEPTNO = E.DEPTNO(+)
    AND E.SAL BETWEEN S.LOSAL(+) AND S.HISAL(+)
    AND E.MGR = E2.EMPNO(+)
ORDER BY E.DEPTNO;

'프로그래밍 > SQL' 카테고리의 다른 글

[SQL] Oracle, 데이터 조작어(DML)  (0) 2020.03.30
[SQL] Oracle, 서브쿼리  (0) 2020.03.30
[SQL] Oracle, 오라클 다중행 함수  (0) 2020.03.28
[SQL] Oracle, 오라클 단일행 함수  (0) 2020.03.27
[SQL] Oracle, SELECT 문  (0) 2020.03.27