티스토리 뷰
- 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의 합집합 이라고 생각하면 됨
'Sql' 카테고리의 다른 글
월별 누적 조회 쿼리 (0) | 2021.04.02 |
---|---|
조인을 인라인 뷰로 변경 (0) | 2021.04.02 |
scalar subquery 두 개 이상의 값을 리턴하고 싶을 때 (0) | 2021.03.31 |
인덱스 스캔 방식 및 인덱스 쿼리튜닝 (0) | 2021.03.31 |
윈도우함수 ≒ 분석함수 ≒ 순위함수 (0) | 2021.03.29 |