조인(Join): 여러 테이블을 하나의 테이블처럼/ 등가 조인/ 비등가 조인
2021. 12. 11. 22:34ㆍ오라클(Oracle) 데이터 베이스
조인
- 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용하는 방식
- 중요한 건 두 개 이상의 테이블을 하나로 연결한 것!
- 조인 조건을 사용하지 않으면 데카르트 곱(Cartesian product)가 발행하여 반복되는 내용, 정확하지 않은 데이터가 출력됨.
- 두 테이블을 연결할 때는 WHERE 절에 공통되는 데이터 열을 별칭과 함께 명시해야 함!
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
(FROM에 별칭과 테이블 명/ WHERE에 공통되는 열 DETPNO를 각각 별칭과 함께 명시)
조인 종류
등가 조인 = 내부 조인=단순 조인 | 1. 테이블을 연결한 후에 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로 선정하는 방법 2. WHERE절에 조건식을 추가로 지정, 출력행을 제한 할 수도 있음 3. WHERE절의 조건식을 사용해 테이블을 조인할 때는 조건식이 최소한 전체 테이블 수보다 하나 적은 수만큼은 있어야 함. |
비등가 조인 | 1. 등가 조인 외의 조인 방식을 의미 2. A열 BETWEEN B-1열 AND B-2열 같은 구조로 범위 안에 들어가는 데이터 조인에 많이 씀 |
자체 조인 | 1. 하나의 테이블을 여러 개의 테이블처럼 활용하는 조인 방식 2. 동일한 테이블 여러 개를 사용할 때 발생할 수 있는 문제점을 해결 3. FROM 절에 같은 테이블을 여러번 명시하되 테이블 별칭만 다르게 지정하는 방식 |
외부 조인 | 1. 조인되는 두 테이블 중에서 어느 한쪽이 NULL값이라도 강제로 출력하는 방식 2. 왼쪽 외부 조인 (WHERE TABLE1.COL1=TABLE2.COL1(+) 3. 오른쪽 외부 조인 (WHERE TABLE1.COM1(+)=TABLE2.COL1 |
1. 등가 조인
문제) 부서번호(DEPTNO)가 30번인 사원들의 이름(ENAME), 직급(JOB), 부서번호(DEPTNO), 부서위치(LOC)를 출력
SELECT E.ENAME, E.JOB, E.DEPTNO, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO (->부서 위치가 있는 DEPT와 조인해야함 )
AND E.DEPTNO=30;
문제2)보너스(COMM)를 받은 사원의 이름(ENAME), 보너스(COMM), 부서명(DNAME), 부서위치(LOC)를 출력
SELECT E.ENAME, E.COMM, D.DNAME, D.LOC
FROM DEPT D, EMP E
WHERE E.DEPTNO=D.DEPTNO
AND E.COMM>0; (->WHERE조건절 추가)
문제 3)DALLAS에서 근무하는 사원들의 이름(ENAME), 직급(JOB), 부서번호(DEPTNO), 부서명(DNAME)을 출력
SELECT E.ENAME, E.JOB, D.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO=E.DEPTNO
AND D.LOC='DALLAS';
2. 비등가 조인
문제1) 사원이름(ENAME)과 급여(SAL)와 급여등급(GRADE)을 출력
SELECT E.ENAME, E.SAL, S.GRADE
FROM EMP E ,SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL; (SALGRADE 범위 내에서 E.SAL의 값을 확인해야 하니)
'오라클(Oracle) 데이터 베이스' 카테고리의 다른 글
(오라클) 트랜잭션, TLC, LOCK, 읽기 일관성 (3) | 2021.12.23 |
---|---|
(오라클) 제약 조건 (1) | 2021.12.22 |
단일행 서브 쿼리 (0) | 2021.12.10 |
오라클(Oracle) 조인 총정리: 나만 알아볼 수 있을 듯? (0) | 2021.12.08 |
오라클(ORACLE) DECODE 함수와 CASE 함수 (0) | 2021.12.05 |