- 두개 이상의 테이블을 결합
- 여러 테이블에 저장된 데이터를 한 번에 조회해야 할 필요가 있을 때 사용
- 오라클 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(+);