[작성일: 2023. 03. 26]
Join
- 테이블 A와 테이블 B를 병합할 수 있음.
- 여러 테이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 한 줄의 결과로 만들기 위한 방법
- 조회할 테이블이 나뉘어져 있다면 두 번 이상의 테이블 검색이 필요함.
-- table join1
create table ticket_price as select movie_name from movie;
alter table ticket_price add column price int(6);
update ticket_price set price = 15000 where movie_name in('멍뭉이', '서치2', '소울메이트');
update ticket_price set price = 1000 where movie_name in('베놈2');
update ticket_price set price = 2000 where movie_name in('인셉션');
select * from ticket_price;
-- 영화의 제목과 개봉일자와 요금을 구하시오.
-- 데이터 건이 많을 경우
select m.movie_name, m.open_date, t.price, case when price > 10000 then '고가'
when price = 1000 then '저렴' when price between 1001 and 10000 then '꼭 보기'
end as '최종 나의 결정' from movie as m
join ticket_price as t where m.movie_name = t.movie_name;
-- scalar subquery
-- 데이터 건이 별로 없을 경우
select m.movie_name, m.open_date, (select price from ticket_price
where movie_name = m.movie_name) as price from movie m;
inner join(내부 조인)
- 조건에 일치하는 값이 양쪽 테이블에 모두 존재할 때
- 테이블명1 inner join 테이블명2 on 조인 조건
-- inner join
SELECT t1.hptl_nm, t2.sido_cd_nm
FROM hptl_mast AS t1, sido_cd_dt1 AS t2
WHERE t1.sido_cd = t2.sido_cd
AND t1.hptl_nm LIKE '%부부%';
SELECT t1.hptl_nm, t2.sido_cd_nm
FROM hptl_mast AS t1
INNER JOIN sido_cd_dt1 AS t2 ON (t1.sido_cd = t2.sido_cd)
WHERE t1.hptl_nm LIKE '%부부%';
natural join(자연 조인)
- 두 개의 테이블을 조인할 때
컬럼명이 같은 컬럼은 자동으로 inner join 수행 - 테이블명1 natural join 테이블명2
데이터가 잘못 추출될 가능성이 높으므로 실무에서는 절대 쓰지 말기...!
outer join(외부 조인)
- 한 쪽의 데이터가 없더라도 기준이 되는 테이블의 모든 정보가 검색되어야 할 때 사용함.
- left outer join 왼쪽 테이블 기준으로 조회
- right outer join 오른쪽 테이블 기준으로 조회
- full outer join 양쪽 테이블 기준으로 조회
고객 테이블 | |
1 | 삼성동 |
2 | 역삼동 |
3 | 가산동 |
직원 테이블 | |
1 | 대리 |
2 | 사원 |
고객 중 직원여부 테이블 |
||
1 | 삼성동 | |
2 | 역삼동 | 사원 |
3 | 가산동 |
select 고객.id, 고객.dong,
case when 직원.position is null then "직원 아님"
else 직원.position end as "직급"
from 고객 left outer join 직원 on 고객.id = 직원.id;
-- in only Oracle
-- 정보가 없을 수도 있는 쪽에 (+)를 붙임.
select 고객.id, 고객.dong,
case when 직원.position is null then "직원 아님"
else 직원.position end as "직급"
from 고객, 직원
where 고객.id = 직원.id(+);
-- full outer join일 경우, 양 쪽에 붙임.
고객.id(+) = 직원.id(+)
🐣 해당 게시글은 입문 개발자가 요약/정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.