1. INNER JOIN
- 조인조건에서 동일한 값이 있는 행만 반환
2. NATURAL JOIN
- NATURAL JOIN은 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 equi(=)JOIN을 수행
- JOIN이 되는 테이블의 데이터 성격과 칼럼명등이 동일해야 하는 제약 조건이 있음
NATURAL JOIN이 명시되면, 추가로 USING, ON, WHERE 절에서 JOIN 조건을 정의할수 없음
(SQL SERVER 지원안함)
JOIN 컬럼을 별도 지정하지 않았지만, 두 테이블의 DEPTNO라는 공통된 칼럼을 자동으로 인식하여 JOIN을 처리한 것
JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 하며, ALIAS나 테이블명과 같은 접두사를 붙일수 없음
모든칼럼 조회 시(*) 칼럼 순서 지정하지 않으면 NATURAL JOIN 의 기준이 되는 칼럼들이 다른칼럼보다 먼저 출력됨
(즉 DEPTNO가 첫 칼럼이됨) 이때 NATURAL JOIN은 JOIN에 사용된 같은 이름의 칼럼을 하나로 처리 (반면 INNER JOIN은 별개의 컬럼으로 따로 출력)
2.1. USING 조건절
- NATURAL JOIN에서는 모든 일치되는 칼럼들에 대해 JOIN이뤄지지만, FROM 절에 USING조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN 할 수 있음.(SQL SERVER 지원안함)
USING 조건절을 이용한 EQUI JOIN에서도 NATURAL JOIN과 마찬가지로 JOIN 칼럼에 대해서 ALIAS나 테이블이름과 같은 접두사를 붙일수 없음(DEPT.DEPTNO->DEPTNO)
--DNAME 조건
USING에 사용된 DNAME에 첫번째 칼럼으로 출력
JOIN 조건에 참여하지 않은 DEPTNO, LOC가 2개 컬럼으로 출력
--LOC, DEPTNO 조건
USING에 사용된 LOC, DEPTNO에 첫번째, 두번째 칼럼으로 출력
JOIN 조건에 참여하지 않은 DNAME은 2개 컬럼으로 출력
2.2 ON 조건절
- JOIN 조건 칼럼명이 다르거나 임의의 조건을 지정을 사용할때는 ON 조건절을 사용
- JOIN조건 외에도 데이터 검색 조건을 추가할 수 있지만, 검색 조건 목적인 경우는 WHERE 절을 사용할 것을 권고
ALIAS나 테이블명과 접두사에 사용되는 칼럼을 논리적으로 명확하게 지정해줘야 함.(DEPTNO->DEPT.DEPTNO)
* OUTER JOIN 시 ON 조건과 WHERE에 조건 실행계획은 확인하기
- OUTER 조인시 ON 조건에 T2.C1 >=3 이상 조건이 있는데 결과는 T2.C1의 1,2까지 전부 출력됨
왜?실행계획을 보면 CASE 문으로 실행된것을 확인
-ON 조건절이 아닌 WHERE 적에 조건을 추가시 T2.C1 테이블의 1, 2 제외하고 출력
실행계획을 확인하면 ON 조건절의 실행계획과는 달리 C1>=3 이상임을 확인
'SQL' 카테고리의 다른 글
[그룹함수 / ROLLUP] (0) | 2021.12.29 |
---|---|
[계층형 질의] (0) | 2021.12.21 |
집합 연산자 (SET OPERATOR) (0) | 2021.12.20 |
OUTER JOIN (0) | 2021.12.19 |
일반 집합 연산자 & 순수 관계 연산자 (0) | 2021.12.18 |