728x90
반응형
inner join과 outer join
두 개 이상의 테이블을 조인할 때, 일치하는 값이 없는 행은 조인에서 제외됨
이것을 inner join이라고 하며, 명시적으로 사용하지 않을 시에는 기본적으로 inner join임
하지만 일치하지 않은 값 또한 join에 포함시킬 수도 있음
이것을 outer join이라고 하며, 반드시 outer join임을 명시해야 함
inner join
교집합
기준컬럼값이 null이거나 상응하는 컬럼값이 없는 경우는 제외됨(유령부서 떠올리기)
select distinct dept_id
from employee E join department D
on E.dept_code = D.dept_id;
outer join
합집합
left (outer) join
dept_code가 null인 사원 2행 추가(department 테이블 컬럼은 모두 null처리됨)
select *
from employee E left outer join department D
on E.dept_code = D.dept_id;
right (outer) join
D3, D4, D7에 상응하는 employee행이 없으므로, 모두 null처리된 행을 추가
select *
from employee E right join department D
on E.dept_code = D.dept_id;
full (outer) join
모든 행 추가
select *
from emoloyee E full join department D
on E.dept_code = D.dept_id;
cross join (자주사용 X)
카테이션곱(Cartensian projuct)라고도 함
모든 경우의 수 (그룹함수의 결과와 일반함수 같이 보고 싶을때 사용)
검색되는 데이터 수는 행의 컬럼수 X 행의 컬럼수로 나옴
Lefr Table(n) * Right Table(m) => n*m 행의 조인테이블
select *
from employee E cross join department D;
self join
같은 테이블을 조인함
즉, 좌 우측 테이블이 동일하면 self join
예제)사원별 관리자의 이름 조회
select E.emp_id,
E.emp_name,
E.manager_id,
M.emp_id,
M.emp_name
from employee E left join employee M
on E.manager_id = M.emp_id
order by E.emp_id;
multiple join
다중 join
예제)사원명, 부서명, 근무지역명을 조회
select E.emp_name,
D.dept_title,
L.local_name
from employee E
left join department D
on E.dept_code = D.dept_id
left join location L
on D.location_id = L.local_code; --한 번 left join은 영원한 left join
반응형
'프로그래밍 > SQL' 카테고리의 다른 글
05.21(SUBQUERY) (0) | 2020.05.21 |
---|---|
05.20(SUBQUERY) (0) | 2020.05.20 |
05.18(join) (0) | 2020.05.18 |
05.15(union, union all, intersect, minus) (0) | 2020.05.15 |
05.14(group by & having) (0) | 2020.05.14 |