1. 조인
(1) 조인의 의미
- where 구문 안에 들어가거나, where 절 없이 join만 사용도 가능
- 두 개 이상의 테이블들을 결합하여 데이터를 출력하는 것
- PK나 FK 값의 연관에 의해 join이 성립될 수 있음
- 어떠한 경우에는 PK, FK 관계가 없어도 논리적인 값들의 연관만으로도 조인이 성립될 수 있음
(2) EQIU(등가) 조인
- 두 개의 테이블 간 교집합을 의미하여 =을 사용하여 표현
- ANSI, ISO SQL 표준 방식은 INNER JOIN임
- Non EQUL : 두 개의 테이블 컬럼값이 일치하지 않아 = 연산을 사용하지 않고, > ,>=, <, <= 연산을 사용하여 조인
SELECT 학생.학생 ID, 수강과목.수강료 FROM 학생, 수강과목 WHERE 학생.학생ID=수강과목.학생ID ; // WHERE 사용 INNER JOIN 수강과목 ON 학생.학생ID = 수강과목.학생ID ; // INNER JOIN은 JOIN의 Default 옵션으로 생략가능 |
2. 표준 조인
(1) 일반 집합 연산자
ⓐ UNION : 합집합, 중복을 없애기 위한 사전작업으로 정렬작업 발생
- 만약 UNION, UNION ALL의 출력결과가 같다면, 응답속도 향상 및 자원 효율화 측면에서 정렬작업이 없어 UNION ALL을 더 권고함
- UNION ALL : 합집합, 중복해서 그대로 보여줌, 정렬작업 없음
> 아예 두개의 집합이 교차 부분이 없는 경우 UNION ALL이 작업 속도가 더 빠름(중복 제거를 안하기 때문)
ⓑ INTERSECTION : 교집합, INNER JOIN
ⓒ DIFFERWNCE : 차집합, MINUS
ⓓ PRODUCT : 곱집합, JOIN 조건이 없는 경우 생길 수 있는 모든 데이터 조합, CROSS JOIN
(2) 순수 관계 연산자
- SELECT 연산은 WHERE절로 구현(수평 연산자)
- PROJECT 연산은 SELECT절로 구현(수직 연산자)
- (NATURAL) JOIN 연산은 다양한 JOIN 기능으로 구현
- DIVIDE 연산은 현재 사용하지 않음
(3) JOIN 형태
- ANSI/ISO SQL에서 표시하는 FROM절의 JOIN 형태
ⓐ INNER JOIN : OUTER(외부) JOIN과 대비하여 내부 조인이라고 함, JOIN 조건에서 동일한 값이 있는 행만 반환
ⓑ USING 조건절 : FROM절에 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서마 선택적으로 EQUI JOIN 할 수 있음, SQL Server에서는 지원하지 않음
SELECT E.ENAME, D.DEPNO, D.DNAME FROM EMP E INNER JOIN DEPT D (USING(DEPNO)) >> ON E.DEPNO = D.DEPNO와 같은 의미, 단 같은 칼럼명일 때 만 가능 |
ⓒ CROSS JOIN : 생길 수 있는 모든 데이터 조합으로 M*N 조합이 발생함
- 일반적인 데이터 모델에서 많이 사용하지는 않지만 차원을 구할 때 유용하게 사용함
ⓓ OUTER JOIN : JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용함
- FULL, LEFT, RIGHT OUTER JOIN의 경우에는 기준이 되는 테이블이 조인 수행 시 무조건 드라이빙 테이블이 됨
- FULL : 조인해서 나올 수 있는 모든 데이터를 붙임, 조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성, RIGHT OUTER, LEFT OUTER JOIN의 합집합, 중복되는 데이터는 삭제함
- LEFT, RIGHT : 조인을 해서 붙이는 테이블의 기준이 왼쪽이나 오른쪽이냐를 결정
ⓔ NATURAL JOIN : 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) JOIN을 수행
- JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 하며, ALIAS 사용(별칭) 불가함
- 동일한 칼럼명이라도 다른 용도의 데이터를 저장하는 경우도 있으므로 주의해서 사용
- 추가로 USING 조건절, ON 조건절, WHERE절에서 JOIN 조건을 정의할 수 없음
SELECT DEPNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT; // 별도의 JOIN 칼럼을 지정하지 않았지만 두 개의 테이블에서 DEPNO라는 공통된 칼럼을 자동으로 인식하여 JOIN을 처리 |
ⓕ ON 조건절
- JOIN 칼럼을 명시하기 위해서는 ON 조건절을 사용
- 반드시 테이블명과 같은 접두사를 명확하게 지정해 주어야 함(학생ID > 학생.학생ID)
ⓖ 다중 조인
- 연관관계가 있는 테이블을 추가하여 3개 이상의 TABLE JOIN도 가능함
- N개 테이블에 대한 JOIN이면 WHERE절에 N-1개 이상의 JOIN 조건이 필요함