1. 수학적으로, 집합의 `집합 연산`과 관계형 DB의 `관계 연산` 비교
ㅇ 집합의 `집합 연산`
- 합집합 (UNION)
. 관계형 DB 대응 例) WHERE OR, SELECT () UNION SELECT ()
- 교집합 (INTERSECTION)
. 관계형 DB 대응 例) WHERE AND, SELECT () INTERSECT SELECT ()
- 차집합 (DIFFERENCE)
. 관계형 DB 대응 例) SELECT () EXCEPT SELECT ()
- 곱집합 (PRODUCT)
. 관계형 DB 대응 例) CROSS JOIN
ㅇ 관계형 DB의 `관계 연산`
- SELECT : (1 이상의 테이블에서 데이터를 추출)
- PROJECT
- JOIN : (1 이상의 테이블들을 조합시킴)
- DIVIDE : (실제 구현 없음)
2. 다중 테이블에 대한 SQL 쿼리의 실용적 구현 형태
ㅇ JOIN 형태
ㅇ UNION 형태
- 사실상, JOIN 중 FULL OUTER JOIN과 같은 개념
- 2 이상의 SELECT 문을 결합하는데 사용
. SELECT () UNION SELECT ()
- UNION 구분
. UNION ALL : 공통 교집합까지 중복 포함하며, 그대로 보여 줌 (속도 빠름)
. UNION : 공통 교집합의 중복을 제거하며, 정렬 작업이 내부적으로 발생 (속도 느림)
3. JOIN (조인)
ㅇ 내부 조인 (INNER JOIN)
- 기본적으로, 가능한 모든 행과의 조합(카르테시안 곱)을 생성
- 구분
. NATURAL JOIN : 테이블 간에 동일 이름을 갖는 칼럼들 중에, 동일 값이 있는 행 만 반환
.. 테이블명 간에 JOIN 없이 그냥 ,(콤마) 만으로 구분에도 같은 효과
. INNER JOIN 또는 JOIN : 테이블 간 특정 조건 하에서, 동일 값이 있는 행 만 반환
.. 즉, USING 조건절이나 ON 조건절을 반드시 사용해야 함
. CROSS JOIN : 테이블 간 JOIN 조건이 없는 경우 가능한 모든 데이터의 조합
- 例) 두 테이블에서 같은 값을 갖는 레코드들을 생성하려면,
. SELECT column FROM table1 a INNER JOIN table2 b ON a.column = b.column;
ㅇ 외부 조인 (OUTER JOIN)
- 기본적으로, 다른 테이블의 행과 일치하지 않은 행도 보이게 함
- 구분 (왼쪽 또는 오른쪽 방향)
. LEFT OUTER JOIN 또는 LEFT JOIN
. RIGHT OUTER JOIN 또는 RIGHT JOIN
. FULL OUTER JOIN
4. [기타] 서브 쿼리 (Sub Query)
ㅇ SELECT 문 하부의 WHERE 절이나 FROM 절 내 사용되는 부분 쿼리(서브 쿼리)