오라클
테이블 join
chantleman
2024. 7. 15. 17:34
조인 종류 | 설명 |
cross join | 모든 가능한 행들의 조합 (R X S) |
inner join(equi join) | 조건이 일치하는 컬럼 매칭(주로 pk와 fk) |
natural join | 각 테이블에 동일한 이름의 컬럼이 존재할 때 자동으로 조건이 적용 |
non-equi join | 조건절에서 join 조건이 '='이 아닌 다른 연산기호로 주어지는 경우 ('<', between a and b) |
outer join | 조건이 일치하지 않더라도 모든 행들을 검색하고자 할 때 사용. (+) 로 표시 (left / right / full outer join) |
self join | 한 테이블 내에서 join하는 경우 |
cross join
select * from lprod, prod;
select * from lprod cross join prod;
select count(*) from lprod, prod, buyer;
select count(*) from lprod cross join prod cross join buyer;
inner join
select prod.prod_id 상품코드, prod.prod_name 상품명, lprod.lprod_nm 분류명
from prod, lprod where prod.prod_lgu = lprod.lprod_gu;
select prod.prod_id 상품코드, prod.prod_name 상품명, lprod.lprod_nm 분류명
from prod inner join lprod on (prod.prod_lgu = lprod.lprod_gu);
join 조건식은 ON 다음에 기술하고, 그 이외의 조건은 WHERE절에 기술
select prod_id 상품코드,prod_name 상품명,buyer_name 거래처명
from prod
inner join buyer on(prod_buyer=buyer_id)
where buyer_name like '삼성전자%';
natural join
non-equi join
outer join
select lprod_gu 분류코드,lprod_nm 분류명, count(prod_lgu) 상품자료수
from lprod, prod
where lprod_gu=prod_lgu(+)
group by lprod_gu, lprod_nm;
select lprod_gu 분류코드, lprod_nm 분류명, count(prod_lgu) 상품자료수
from lprod
left outer join prod on (lprod_gu = prod_lgu)
group by lprod_gu, lprod_nm
order by lprod_gu;
상품테이블에 등록안된 것도(상품자료수가 0인 것도) 확인하고 싶어서 left(right) outer join 사용
inner join은 교집합 개념으로 생각하면 됨
inner join에서 일치하지 않는 레코드는 모두 버렸지만
outer join에서는 일치하지 않더라도 버리지 않고 null로 채워서 결과를 응답
self join
728x90