티스토리 뷰

- equi : A,B 테이블에 둘다 존재해서 등가로 join이 가능한 경우
- non equi : A,B 테이블에 둘다 존재해서 등가로 join이 가능한 경우

- from 절의 Join 형태
1. inner join
2. natural join
3. using 조건절
4. on 조건절
5. cross join
6. outer join

1. inner join
: default join
: join 조건에서 동일한 값이 있는 행만 반환
: cross join, outer join과 같이 사용 할 수 없다.

2. natural join 
: inner join의 하위 개념
: 두 테이블간의 join 조건에서 동일한 이름을 갖는 모든 칼럼에 대해 equi join을 수행함
: join이 되는 테이블의 데이터 도메인과 칼럼명 칼럼값이 동일해야 하는 제약조건이 있다. --> 따라서 on ~절이 없다!!!
: 칼럼 값이 같지 않으면 결과 출력이 안됨
: natrual inner join 이라고도 표시할 수 있음

만약 하단처럼 작성하면 natural join의 기준이 되는 칼럼들이 다른 칼럼 보다 먼저 출력된다.

select * 
from emp 
natural join dept;

만약 inner join일 경우 첫번째 테이블, 두번쨰 테이블의 칼럼 순서대로 데이터가 출력된다. 이때 natural join은 칼럼명 같으면 하나의 칼럼으로 처리하지만 inner join은 별개 칼럼으로 표시한다.

select *
from emp
inner join dept on emp.deptno = dept.deptno;

3. using 조건절
: natural join 에서는 모든 일치되는 칼럼들에 대해 join이 이루어지지만 from 절의 using 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 equi join을 할 수 가 있다.

select dept.deptno(----> 이거 잘못씀. using에 썼으므로 그냥 deptno라고 써야함), 
		dept.dname ..... 
from dept
join dept_temp
using (deptno);

4. on 조건절
: join 서술부 와 비 join 서술부를 분리하여 이해가 쉬우며, 칼럼 명이 다르더라도 join 조건을 사용할 수 있는 장점이 있다. 이것이 using조건절과 가장 큰 차이!

예시

select E.ENAME, E.MGR, D.DEPTNO, D.DNAME
from EMP E 
join DEPT D on (E.DEPTNO = D.DEPTNO and E.MGR=7990);

--> 이 sql과 아래 sql은 같은 결과를 얻을 수 있다.

select E.ENAME, E.MGR, D.DEPTNO, D.DNAME
from EMP E 
join DEPT D on E.DEPTNO = D.DEPTNO
where E.MGR=7990 --> 검색은 where 조건에서 하는 것을 권장!!

5. cross join
: 테이블간 join 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다.
: 두개의 테이블의 결과는 양쪽 집합의 M*N건의 데이터 조합이 발생한다......

: natural join은 where 절에 join 조건을 추가할 수 없지만, cross join의 경우 where절에 join 조건을 추가할 수 있다. 그러나 이 경우는 cross join이 아니라 inner join과 같은 결과를 얻기 때문에 cross join을 사용하는 의미가 없어지므로 권고하지 않는다.

select ENAME, DNAME
from EMP 
cross join DEPT
where EMP.DEPTNO = DEPT.DEPTNO;
--> 위 sql과 아래 sql은 같은 결과를 얻을 수 있다.
--> 굳이.. 위처럼 쓰지 말고 inner join을 쓰자
select ENAME, DNAME
from EMP 
inner join DEPT on EMP.DEPTNO = DEPT.DEPTNO;  --> where조건절과 on조건절은 상호 변환가능

 

 


6. outer join

: inner join과 대비하여 outer join이라고 불리며, join조건에서 동일한 값이 없는 행도 반환할 때 사용할 수 있다.

- left outer join
: left join 으로 작성 가능
: 조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후 나중 표기된 우측 테이블에서 join대상 데이터를 읽어온다. 

- right outer join
: right join 으로 작성 가능
: 조인 수행 시 먼저 표기된 우측 테이블에 해당하는 데이터를 먼저 읽은 후 나중 표기된 좌측 테이블에서 join대상 데이터를 읽어온다.

- full outer join
: full join 으로 작성 가능
: left join 과 right join의 합집합 이라고 생각하면 됨

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함