조인의 종류
조인의 종류를 열거해 보면 내부 조인, 외부 조인, 동등 조인, 안티 조인, 셀프 조인, 세미 조인, 카타시안 조인(CATASIAN PRODUCT), ANSI 조인이 있다. 8가지 조인 방법이 상대적으로 독립적인 개념은 아니다. 내부 조인의 상대 개념이 외부 조인이며, 외부 조인을 제외한 셀프 조인, 안티 조인 등은 모두 내부 조인에 포함된다. 또한 ANSI 조인은 7가지 조인을 모두 포함한 개념으로 ANSI SQL을 사용한 점만 다를 뿐이며 일반적으로 ANSI 조인이라고 굳이 구분하지는 않는다
• 조인 연산자에 따른 구분: 동등 조인, 안티 조인
• 조인 대상에 따른 구분: 셀프 조인
• 조인 조건에 따른 구분: 내부 조인, 외부 조인, 세미 조인, 카타시안 조인
• 기타: ANSI 조인
※ 내부 조인과 외부 조인
1. 동등 조인
가장 기본이며 일반적인 조인 방법이 바로 동등 조인(EQUI-JOIN)이다. 동등 조인은 WHERE 절에서 등호(‘=’)연산자를 사용해 2개 이상의 테이블이나 뷰를 연결한 조인이다. 등호 연산자를 사용한 WHERE절 조건에 만족하는 데이터를 추출하는 조인이다. 이때 WHERE절에 기술한 조건을 조인 조건이라고 한다.
조인 조건은 컬럼 단위로 기술한다. 예를 들어, A와 B 테이블이 있다고 한다면 두 테이블에서 공통된 값을 가진 컬럼을 등호 연산자로 연결해 조인 조건에 일치하는 조인 조건 결과가 참에 해당되는 두 컬럼 값의 같은 행을 추출하는 것이다.
◈ 예제
.
.
사원과 부서 테이블에 공통적으로 존재하는 부서번호(department_id)를 등호 연산자를 사용해 조회조건에 명시했다. 부서번호 컬럼은 부서 테이블에서 키(Primary Key)에 해당해 필수 값이지만 사원 테이블에서는 필수 값이 아니므로 쿼리 결과는 사원 테이블에서 부서번호 컬럼 값이 있는 건만 추출된다. 사원 테이블의 전체 건수가 107건이지만 부서번호가 없는 사원이 한 건 존재하므로 106건이 조회된 것이다.
2. 세미 조인
세미 조인(SEMI-JOIN)은 서브 쿼리를 사용해 서브 쿼리에 존재하는 데이터만 메인 쿼리에서 추출하는 조인 방법으로 IN과 EXISTS 연산자를 사용한 조인이다. 서브 쿼리에 있는 테이블을 B, 메인 쿼리에 사용된 테이블을 A라고 한다면 세미 조인은 B 테이블에 존재하는 A 테이블의 데이터를 추출하는 조인이다.
① EXISTS 사용
◈ 예제
② IN 사용
◈ 예제
3. 안티 조인
안티 조인(ANTI-JOIN)은 서브 쿼리의 B 테이블에는 없는 메인 쿼리의 A 테이블의 데이터만 추출하는 조인 방법이다. 한쪽 테이블에만 있는 데이터를 추출하는 것이므로 조회 조건에서 NOT IN이나 NOT EXISTS 연산자를 사용한다. 세미 조인과 반대 개념이다.
① NOT IN
◈ 예제
앞의 쿼리는 manager_id 값이 있는 부서에 속한 사원 테이블을 조회한 것이다. 여기서 주의할 점은 “departments b”를 조인한 부분은 해당 사원에 대한 부서명을 가져오기 위한 조인이고 안티 조인은 NOT IN 절 이하의 서브 쿼리에 명시했다.
다음과 같이 NOT EXISTS로도 변환할 수 있다.
② NOT EXISTS
◈ 예제
'SQL' 카테고리의 다른 글
[SQL 19] ANSI 조인 (내부 조인, 외부 조인, CROSS 조인) (0) | 2020.06.09 |
---|---|
[SQL 18] 내부 조인 과 외부 조인 (셀프조인, 외부조인, 카타시안조인) (0) | 2020.06.08 |
[SQL 16] 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS) (0) | 2020.06.04 |
[SQL 15] GROUP BY 절, HAVING 절 (0) | 2020.06.03 |
[SQL 14] 기본 집계 함수 (0) | 2020.06.03 |