코딩하는 문과생
[SQL] Oracle, 조인 본문
조인
: 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용
: 오라클 조인은 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 |