Published 2022. 11. 1. 20:57
join

 

 

self Join
select * 
from emp e1, emp e2 
where e2.empno = 1010 
and e1.sal > e2.sal;

JOIN ON으로만 변환 가능

 

방법 1)

 select *
 from emp e1 JOIN emp e2 
                       ON e1.sal > e2.sal and e2.empno = 1010;

방법 2)

select *
from emp e1 JOIN emp e2 
                       ON e1.sal > e2.sal
where e2.empno = 1010;

 

 

natural join

 

양쪽 테이블의 같은 이름을 equie join 한다는것이 natural join이다.

 

 

 

Outer Join
select *
from emp e, dept d
where e.deptno (+) = d.deptno;

부족한 쪽에(+) 표시 해주는거다.

 

-> JOIN ON으로만 변환 가능

select *
from emp e RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno);

 

 

 

ANSI systax

 

ANSI로 변환 규칙

   , => JOIN                  where => ON 

(ansi 조인은  where 문을 안보고 from절만 보고도 어떤 조인인지 알게 해준다.)

 

 

 - Cross Join : Cartesian product 생성

select *
from emp CROSS JOIN dept;

-> select 
 from emp, dept;

 

 

- Natural Join : 같은 이름의 컬럼 모두를 equi 조인 조건으로 사용하는 문법

select *
from emp NATURAL JOIN dept;

-> select *
 from emp e, dept d
 where e.deptno = d.deptno;

Natural Join 문제점 : 같은 이름의 컬럼 모두를 equi 조인 조건으로 사용한다는 것

문제점 해결 방법 

1 : Join Using(단, Join Using은 equi 조인만 가능)

2 : Join On(equi, non-equi, self, outer 모두 가능)

 

 

 

Join 문장 작성 기본 흐름?

(1) 필요한 재료 집합을 파악해서 from절에 둠

(2) 필요한 prediate를 계속 where절에 추가함

(3) 리턴될 행이 결정되면 select list를 정리함

 

 

 

오늘의 tip

 

 

테이블이 아무리 많아도 조인은 그중 2개씩 붙여 가는거다.

 

 

오라클 문법은 조인 술어부와 조건 부다 다 섞여 있다.

 

숫자형은 오른쪽 정렬, 문자형을 왼쪽 정렬

 

안시 표준으로는 여러가지가 있지만

근데 실제적으로는 거의 join on 밖에 안쓰임~~!!!!!

 

join using도 InnerJoin만 하는거지 OuterJoin으로 불가능

복사했습니다!