[Oracle] 조인

hi·2021년 12월 28일
  • 두개 이상의 테이블을 결합
  • 여러 테이블에 저장된 데이터를 한 번에 조회해야 할 필요가 있을 때 사용
  • 오라클 8i이전 : equi, non-equi, outer, self
  • 오라클 9i부터 : corss, natural, join~using, outer

🔎JOIN 종류

1. 카디시안 곱 Cross 조인

from 테이블명 , 테이블명 
  • 모든 데이터의 조합
  • 조인 조건이 없기 때문에 결과는 아무런 의미가 없음
select * from employee 		--컬럼수(열): 8, 행수: 14
select * from department  	--컬럼수: 3, 행수: 4

👉 	select * 			
	from employee, department;  --11개 컬럼, 56개 전체 행 수

2. equi 조인 (등가 조인)

from 테이블1 , 테이블2
where 테이블1.컬럼1=테이블2.컬럼2;
  • 공통 컬럼을 = 비교를 통해 조인
  • 동일한 이름을 가진 컬럼으로 조인, 가장 많이 사용됨
  • 별칭 사용

1) ~ where

select 컬럼명1, 컬럼명2 ...    --중복되는 컬럼명 별칭 사용 필수
from 테이블1, 테이블2	         --별칭 사용
where 조인 조건		         --테이블 별칭 사용
and 검색 조건
ex) 사원번호가 7788인 사원의 이름, 사원번호, 부서명 출력하기

select eno, ename, e.dno, dname   --별칭 사용 
from employee e, department d
where e.dno=d.dno
and eno=7788;

2) join~on

  • on절 : 임의의 조건을 지정 or 조인할 컬럼을 지정
  • 중복 제거 x 👉 별칭 사용
select 컬럼명 1, 컬럼명 2 ... 	--중복되는 컬럼은 반드시 '별칭.컬럼명'
from 테이블 1 JOIN 테이블 2 	    --별칭 사용
ON    조인조건 			        --별칭 사용
where 검색조건
ex) 사원번호가 7788인 사원의 이름, 사원번호, 부서명 출력하기

select eno, ename, e.dno, dname 
from employee e JOIN department d
ON e.dno=d.dno
WHERE eno=7788;

3) natural join

select 컬럼명1, 컬럼명2 ...
from 테이블1 natural join 테이블2 	--별칭 사용 x 권장
where 검색 조건;				        --조인 조건 필요 x
  • 자동으로 동일한 이름 과 데이터 유형 을 가진 컬럼으로 조인
    단, 1개만 있을 때 사용하는 것을 권장
  • 별칭 사용 불가
  • 동일한 이름, 데이터 유형 을 가져야 한다
    데이터 유형이 다를 경우 using 절을 사용
ex) 사원번호가 7788인 사원의 이름, 사원번호, 부서명 출력하기

select eno, ename, dno, dname 		    --dno 제외하고 별칭 사용 가능
from employee  NATURAL JOIN department 
WHERE eno=7788;

4) join~using

select 컬럼명 1, 컬럼명 2 ... 
from 테이블 1 JOIN 테이블 2 	--별칭 사용 안 함 (권장)
USING (조인조건) 		    --USING(동일한 컬럼명1, 동일한 컬럼명2)
where 검색조건
ex) 사원번호가 7788인 사원의 이름, 사원번호, 부서명 출력하기

select eno, ename, dno, dname  		--dno:별칭 사용시 오류 
from employee e JOIN department d
USING(dno)
WHERE eno=7788;

3. non-equi 조인 (비등가 조인)

  • 조인조건에서 '= 연산자 이외'의 연산자를 사용
  • < , > , <= , != , between~and
ex) 사원별로 '사원이름, 급여, 급여 등급'출력

사원 이름, 급여 : 사원 테이블
급여 등급 : 급여 정보 테이블

select ename, salary, grade
from employee join salgrade 		--중복되는 컬럼 없음 => 별칭 사용 X
on salary between losal and hisal; 	--비등가 조인 조건

4. self 조인

  • 하나의 테이블에 있는 컬럼끼리 연결, 자기 자신과 조인을 맺음
  • where절 반드시 별칭 사용
ex) 사원 이름, 직속 상관 이름 조회

select e.ename as "사원 이름", m.ename as "직속 상관 이름"
from employee e join employee m     --반드시 별칭 사용
on e.manager = m.eno 		        --'KING'은 직속 상관이 없으므로 (null) 
				                       등가 조인에서 제외
order by 1;

5. outer 조인

  • 양쪽 컬럼 값 중 null이 있으나 조인 결과로 출력할 때 사용
  • 조인 조건에서 null값을 출력하는 곳에 (+) 붙임
ex)

select e.ename || '의 직속 상관은 ' || nvl(m.ename, '없다.')
from employee e , employee m 	--반드시 별칭 사용
where e.manager=m.eno(+);

0개의 댓글