1. 동등 조인(EQUI JOIN)
WHERE절에서 등호 연산자를 이용해 2개 이상의 테이블이나 뷰를 연결한 조인이다. WHERE절에 기술한 조건은 조인조건 이라고 부른다.
1 2 3 4 5 6 | SELECT A.EMPLOYEE_ID , A.EMP_NAME , A.DEPARTMENT_ID , B.DEPARTMENT_NAME FROM EMPLOYEES A, DEPARTMENTS B WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID; | cs |
2. 세미 조인(SEMI JOIN)
서브 쿼리를 이용해 서브 쿼리에 존재하는 데이터만 메인 쿼리에서 추출하는 방법. IN과 EXISTS 연산자를 이용한다.
1 2 3 4 5 6 7 8 | SELECT DEPARTMENT_ID , DEPARTMENT_NAME FROM DEPARTMENTS A WHERE EXISTS ( SELECT * FROM EMPLOYEES B WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID AND B.SALARY > 3000 ) ORDER BY A.DEPARTMENT_NAME; | cs |
3. 안티 조인(ANTI JOIN)
서브 쿼리의 테이블에는 없는 메인 쿼리 테이블의 데이터를 추출하는 방법이다. NOT IN과 NOT EXISTS 연산자를 이용한다.
1 2 3 4 5 6 7 8 9 | SELECT A.EMPLOYEE_ID , A.EMP_NAME , A.DEPARTMENT_ID , B.DEPARTMENT_NAME FROM EMPLOYEES A, DEPARTMENTS B WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID AND A.DEPARTMENT_ID NOT IN ( SELECT DEPARTMENT_ID FROM DEPARTMENTS WHERE MANAGER_ID IS NULL ); | cs |
4. 셀프 조인(SELF JOIN)
동일한 한 테이블을 사용해 조인하는 방법이다.
1 2 3 4 5 6 7 8 9 | SELECT A.EMPLOYEE_ID , A.EMP_NAME , B.EMPLOYEE_ID , B.EMP_NAME , A.DEPARTMENT_ID FROM EMPLOYEES A, EMPLOYEES B WHERE A.EMPLOYEE_ID < B.EMPLOYEE_ID AND A.DEPARTMENT_ID = B.DEPARTMENT_ID AND A.DEPARTMENT_ID = 20; | cs |
5. 외부 조인(OUTER JOIN)
조인 조건에 만족하는 데이터뿐만 아니라, 어느 한 쪽 테이블에 조인 조건에 명시된 컬럼에 값이 없거나 해당 로우가 아예 없더라도 데이터를 모두 추출한다.
5-1. 일반 조인
1 2 3 4 5 6 | SELECT A.DEPARTMENT_ID , A.DEPARTMENT_NAME , B.JOB_ID , B.DEPARTMENT_ID FROM DEPARTMENTS A, JOB_HISTORY B WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID; | cs |
5-2. 외부 조인
조인 대상 테이블 중 데이터가 없는 테이블 조인 조건에 (+)을 붙인다.
외부 조인의 조인 조건이 여러개일 때, 모든 조건에 (+)을 붙인다.
한 번에 한 테이블에만 외부 조인을 할 수 있다.
(+)연산자가 붙은 조건과 OR를 같이 사용할 수 없다.
(+)연산자가 붙은 조건에는 IN 연산자를 같이 사용할 수 없다.(단, IN절에 포함되는 값이 1개일 때는 사용 가능)
1 2 3 4 5 6 | SELECT A.DEPARTMENT_ID , A.DEPARTMENT_NAME , B.JOB_ID , B.DEPARTMENT_ID FROM DEPARTMENTS A, JOB_HISTORY B WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID (+); | cs |
6-1. 카타시안 조인(CATASIAN PRODUCT)
WHERE 절에 조인 조건이 없는 조인. 조인 조건이 없기 때문에 결과로 인출되는 행은 두 테이블의 행 수의 곱이다.
1 2 | SELECT COUNT(*) FROM EMPLOYEES A, DEPARTMENTS B; | cs |
반응형
'📃 DATABASE > ORACLE' 카테고리의 다른 글
[SQL] 분석 함수 (0) | 2018.01.15 |
---|---|
[SQL] WITH절과 순환 서브쿼리 (0) | 2018.01.15 |
[SQL] 계층형 쿼리 (0) | 2018.01.09 |
[SQL] 집합 연산자 (0) | 2018.01.04 |
[SQL] 데이터베이스 객체_시노님(SYNONYM) (2) | 2017.11.11 |