[다중 테이블 검색 기법]
- 조인
- 서브쿼리
- 집합 연산자
1. 조인
[개념]
- Join, 결합을 의미하며 RDB에서의 조인은 교집합 결과로 데이터 결합 방법을 의미한다.
- 두 테이블의 공통값을 이용하여 칼럼을 조합하는 수단으로 사용된다.
- 보통 PK(Primary Key, 기본키)나 FK(Foreign Key, 외래키)값을 결합하여 사용한다.
- 세 개 이상의 테이블 조인은 두 개의 테이블을 우선 조인한 후 그 결과와 나머지 테이블을 다시 조인한다.
[유형]
논리적 조인 | - 사용자가 직접 작성한 SQL문에 의해 표현한 테이블 결합 방식 |
물리적 조인 | - DBMS의 옵티마이저 엔진에 의해 발생하는 테이블 결합 방식 - Nested Loop Join - Merge Join - Hash Join (빨간 글씨: 처음 들어보는 단어) |
[유형(세분)]
내부 조인 | - 두 테이블에 공통으로 있는 열을 활용하는 유형 - 공통 컬럼(열) 기반 |
외부 조인 | - 특정 테이블의 모든 데이터 기준, 다른 테이블의 정보와 비교하여 추출한다. - 다른 테이블에 동일한 값이 없어도 특정 테이블은 출력된다. |
내부조인 | 동등 | - 공통으로 있는 컬럼값이 같은 경우 레코드(행) 추출한다. |
자연 | - 두 테이블에 있는 동일한 컬럼명을 기준으로 모든 컬럼값이 같은 경우 레코드(행) 추출한다. | |
교차 | - 조인 조건이 없는 모든 데이터의 조합을 추출한다. |
외부조인 | 왼쪽 | - 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출한다. - 오른쪽 테이블에 동일한 값이 없어도 왼쪽 테이블의 레코드는 출력된다. |
오른쪽 | - 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출한다. - 왼쪽 테이블의 동일한 값이 없어도 오른쪽 테이블의 레코드는 출력된다. |
|
완전 | - My에서만 사용 가능하며 Or에서는 불가능하다고 한다. (수업메모) - 양쪽의 모든 데이터를 추출한다. - 양쪽 테이블에 동일한 값이 없어도 양쪽 테이블의 레코드는 출력된다. |
https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
Visual Representation of SQL Joins
This article describes SQL Joins in a visual manner, and also the most efficient way to write the visualized Joins.
www.codeproject.com
2. 서브쿼리
[개념]
- SQL문 안에 포함된 또 다른 SQL문을 의미한다.
- 확인되지 앟은 기준을 위해 검색하는 용도로 사용된다.
- 메인쿼리와 서브쿼리는 주종관계를 이룬다.
- 당연하게도 서브쿼리에 작성된 컬럼명은 메인쿼리의 컬럼명을 가져와서 사용할 수 있으나 역은 성립하지 않는다.
[유형1 (우선동작)]
비연관 (Un-Correlated) |
- 서브쿼리 안에 메인쿼리의 커럼 정보를 가지고 있지 않은 형태를 의미한다. - 메인쿼리 없이 독자적으로 실행한다. |
연관 (Correlated) |
- 서브쿼리 안에 메인쿼리의 컬럼 정보를 가지고 있는 형태를 의미한다. - 메인쿼리의 실행된 결과를 통해 서브쿼리의 조건이 맞는지 확인한다. |
[유형2 (반환 데이터 형태)]
단일 행 (Single Row) |
- 서브쿼리의 결과가 항상 1건 이하인 서브쿼리를 의미한다. - 단일 행의 비교 연산자에는 = , < , <= , > , >= , <> 등이 있다. |
다중 행 (Multiple Row) |
- 서브쿼리의 실행 결과가 여러 건인 서브쿼리를 의미한다. - 다중 행의 비교 연산자에는 IN, EXISTS, ALL, ANY 등이 있다. - From 뒤에 또는 WHERE 절에 사용된다. (수업메모) |
다중 컬럼 (Multiple Column) |
- 서브쿼리의 실행 결과가 2개 이상 컬럼으로 반환되는 쿼리를 의미한다. - 메인쿼리의 조건절에 다수 칼럼을 비교할 때, 서브와 메인에서 비교하는 칼럼 개수, 위치가 동일해야 한다. |
3. 집합 연산자
[개념]
UNION | - 2개 이상 SQL문의 실행 결과에 대한 중복을 제거한 합집합 - ((A∪B) - (A∩B)) |
UNION ALL | - 2개 이상 SQL문의 실행 결과에 대한 중복을 제거하지 않은 합집합 - A와 B |
INTERSECTION | - 2개 이상 SQL문의 실행 결과에 대한 중복을 제거한 교집합 - (A∩B) - ???, 중복 값을 한 번만 출력한다는 뜻인가? |
EXCEPT (MINUS) | - 선행 SQL문의 실행 결과와 후행 SQL문의 실행 결과 사이의 중복을 제거한 차집합 - DBMS마다 EXCEPT을 쓰기도 MINUS를 쓰기도 한다고 한다. - (A-B) |