0. 조인의 정의 및 개요
조인은 두 개 이상의 테이블을 합치는 테이블 단위 연산으로 표준 조인과 비표준 조인으로 크게 나뉜다. 표준 조인은 서로 다른 DBMS를 통일하고자 ANSI/ISO에서 제정한 표준 SQL의 조인으로 Inner join과 Left join과 Right join과 Full joind이 표준 조인이 존재한다. 이외의 조인은 비표준 조인이다. 각 조인마다 특성이 다르기 때문에 이에 대해서 정리해보고자 한다.
1. 조인의 종류
1. Equi-joins (등가 조인) // 비표준 조인
조인 조건에 “=”연산을 포함하는 조인으로, 조건이 정확히 일치하는 행들을 연결하는 조인이다. Cartesian Product를 통해 만들어진 릴레이션 중 실제 있는 것만 필터링한 것과 같다.
2. Self Join 자가 (조인) // 비표준 조인
드라이빙 테이블과 드라이븐 테이블이 같은 조인으로, 같은 테이블 명을 구분해주고 조건을 제공하기 위해서 두 개의 테이블에 별명을 부여해주고 조건을 제공한다. 이 조인은 사수와 부사수와 같이 같은 테이블에서의 조인이 필요한 경우에 사용 된다.
3. Cartesian Product (카테시안 곱) // 비표준 조인
조인 시 조건이 주어지지 않을 때 실행되는 조인으로, 두 테이블에 대해서 각 레코드를 서로 곱한 결과를 도출한다. 죽, N*M개의 레코드가 생성된다
4. Inner Joins (내부 곱) // 표준 조인
simple join이라고도 불리며, 두 개 이상의 테이블에 대해서 조인 조건을 만족하는 테이블을 리턴하는 조인이다.
5. outer joins (외부 곱) // 표준 조인
Inner join을 포함하는 조인으로, join의 조건을 만족하는 레코드들뿐만이 아니라 일부 조건을 만족하지 않는 레코드들도 포함하는 조인이다. 여기에 포함되는 레코드들에 따라서 outer join은 left outer join과 right outer join과 full join으로 나뉘게 된다.
5-1. left outer join
조인 조건을 만족하는 레코드들뿐만 아니라 드라이빙 테이블의 레코드를 모두 포함시키는 조인이다. 이때 조건을 만족하지 않는 드라이빙 테이블 레코드들의 드라이븐 테이블 컬럼들의 값은 NULL로써 표현된다.
5-2. right outer join
조인 조건을 만족하는 레코드들뿐만 아니라 드라이븐 테이블의 레코드를 모두 포함시키는 조인이다. 이때 조건을 만족하지 않는 드라이븐 테이블 레코드들의 드라이빙 테이블 컬럼들의 값은 NULL로써 표현된다.
5-3. full outer join
조인 조건의 만족 여부와 상관 없이 드라이빙 테이블과 드라이븐 테이블의 모든 레코드를 포함하는 조인이다. 이때 조건을 만족하지 않는 레코드들의 반대 테이블 컬럼들은 NULL으로써 표현된다.
6. Anti joins (안티 조인) // 비표준 조인
서브 쿼리에는 없고 메인 쿼리에만 존재하는 데이터만 추출하는 조인으로 NOT IN연산자와 NOT EXISTS연산자를 통해 표현된다.
7. Semi joins (세미 조인) // 비표준 조인
서브쿼리를 사용하여 서브쿼리에 존재하는 데이터만 메인쿼리에서 추출하는 조인이다.
-References
https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm ( Oracle docs / Joins)
https://velog.io/@godkimchichi/Oracle-%EC%95%88%ED%8B%B0-%EC%A1%B0%EC%9D%B8-%EC%85%80%ED%94%84-%EC%A1%B0%EC%9D%B8 ( godkimchichi.log / Oracle - 안티 조인, 셀프 조인)
https://velog.io/@godkimchichi/Oracle-%EC%84%B8%EB%AF%B8%EC%A1%B0%EC%9D%B8 ( godkimchichi.log / Oracle – Semi Join 세미 조인)
숭실대학교 소프트웨어학부 : Database (2150013203) / 5강
'학교 공부 > 데이터베이스' 카테고리의 다른 글
동시성 제어 방식 (Concurrency control) : Lock-based protocols (1) | 2021.09.15 |
---|---|
DynamicSQL와 StaticSQL의 차이 (0) | 2021.05.05 |
1.트랜잭션의 4대 특징, ACID (2) | 2021.05.05 |
DB 인덱스와 Join (0) | 2021.04.15 |
RDBMS의 연산과 키 (0) | 2021.04.15 |