오라클

테이블 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

'오라클' 카테고리의 다른 글

테이블 복사, 삭제  (0) 2024.07.19
데이터 자동 생성  (0) 2024.07.19
rownum  (0) 2024.07.12
오라클 REGEXP 함수  (0) 2024.07.12
오라클 조건문  (0) 2024.07.12