D08-DB 오라클 JOIN

jin·2022년 8월 19일
0

1. 등가 조인(JOIN)

(1) 정의
두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용
(2) FROM 절에는 여러 개 테이블을 지정하는 것이 가능하다.

-- [개념 1-1] FROM절에 명시한 각 테이블을 구성하는 행이
-- 모든 경우의 수로 조합되어 출력된다. (14 X 4 = 56개의 행)
Select * From emp, dept;
-- [개념 1-2] 테이블 이름을 별칭으로 표현하기
-- [별칭 사용 전]
Select * From emp, dept
Where dept.deptno = emp.deptno;
-- [별칭 사용 후]
Select * From emp e, dept d
Where e.deptno = d.deptno;
-- [개념 1-3] 테이블의 모든 열을 출력할지라도 대부분 *을 사용하지 않고
-- 열을 하나한 직접 명시해준다.
Select e.empno, e.ename, e.job, e.mgr, e.comm, e.hiredate, e.sal,
	d.deptno, d.dname, d.loc
From emp e, dept d
Where e.deptno = d.deptno;

2. JOIN의 종류

(1) 정의
두 개 이상의 테이블을 하나의 테이블처럼 가로로 늘어뜨려 출력하기 위해 사용하는 조인은
대상 데이터를 어떻게 연결하느냐에 따라 여러 종류로 나뉜다.
(2) 종류
1. 등가 조인(equi join) = 내부 조인(inner join) = 단순 조인(simple join) 전부 같은말이다.
특정 열 값이 일치한 출력 결과를 사용하는 방식
2. 비등가 조인
3. 자체 조인
4. 외부 조인

-- [개념 2-1] 등가 조인
-- [실습 2-1] 사원번호, 사원이름, 부서번호, 부서이름, 지역 함께 출력하기
Select e.empno, e.ename, d.deptno, d.dname, d.loc
From emp e, dept d
Where e.deptno = d.deptno;
-- [개념 2-2] 등가 조인
-- [실습 2-2] 사원번호, 이름, 급여, 부서이름, 지역 함께 출력하되
-- 급여가 3000 이상인 데이터만 출력하기
Select e.empno, e.ename, e.sal, d.dname, d.loc
From emp e, dept d
Where e.deptno = d.deptno and sal >= 3000;
-- [개념 2-3] 비등가 조인 (NON-EQUI JOIN)
-- [실습 2-3] 급여 범위를 지정하는 조건식으로 조인하기
Select e.empno, e.ename, e.mgr, e.hiredate, e.comm, e.deptno, s.grade, s.losal, s.hisal 
From emp e, salgrade s
Where e.sal between s.losal and s.hisal;
-- [개념 2-4] 자체 조인 (INNER JOIN)
-- [실습 2-4] 하나의 테이블을 여러개의 테이블처럼 활용하는 조인 
-- [ 회원번호 , 회원이름 , 직속상관이름 (번호가 아니라 이름이라 조인이 필요)
-- 메니저 번호가 또 하나의 사원의 번호이므로 결국 자기 테이블을 2번검사해야한다. 
Select e.empno, e.ename, e.mgr, ee.empno as bossno, ee.ename as bossname
From emp e, emp ee
Where e.mgr = ee.empno;
-- [개념 2-5] 외부 조인 ( OUTER JOIN)
-- [실습 2-5] NULL 값도 결과에 출력할때 사용 
-- 위 결과에서 KING 의 데이터가 출력되지않았다. NULL 도 포함해서 결과출력 
-- 사원을 기준으로 LEFT OUTER JOIN
Select e.empno, e.ename, e.mgr, ee.empno as bossno, ee.ename as bossname
From emp e, emp ee
Where e.mgr = ee.empno(+);
-- MANAGER 를 기준으로 RIGHT OUTER JOIN
Select e.empno, e.ename, e.mgr, ee.empno as bossno, ee.ename as bossname
From emp e, emp ee
Where e.mgr(+) = ee.empno;

-- [문제 8-1] EMP 테이블의 별칭을 E로, DEPT 테이블의 별칭을 D로 하여
-- 급여가 2500 이하이고 사원번호가 9999 이하인 
-- 사원번호, 사원이름, 급여, 부서번호, 부서이름, 지역 출력하기
Select e.empno, e.ename, e.sal, e.deptno, d.dname, d.loc
From emp e, dept d
Where e.deptno = d.deptno and sal <= 2500 and empno <= 9999;

0개의 댓글