본문 바로가기
카테고리 없음

데이터 모델링과 SQL ⑥ 조인, 표준 조인

by hey-min-eee 2024. 10. 20.

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 조건이 필요함