Data/SQLD 필기 준비

[SQLD] 조인 (Join)

안정민 2023. 11. 14. 19:05

1) EQUI JOIN 등가교집합

조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정이다

조인의 가장 기본은 교집합을 만드는 것이다

두 개의 테이블 간에 일치하는 것을 조인한다, EMP와 DEPT 테이블에서 외래키인 DEPTNO 칼럼이 JOIN Key가 되어 같은 것을 사용해 조인한다.

EQUI JOIN은 등호를 사용하여 두 개의 테이블은 연결한다

 

-해시 조인 (HASH JOIN)

해시조인은 먼저 선행 테이블을 결정하고 선행 테이블에서 주어진 조건에 해당하는 행을 선택

해당 행이 선택되면 조이 키를 기준으로 해시 함수를 사용해서 해시 테이블을 메인 메모리에 생성하고 후행 테이블에서 주어진 조건을 만족하는 행을 팢는다

후행 테이블의 조인 키를 사용하여 해시 함수를 적용하여 해당 버킷을 검색한다

해시 함수는 테이블을 해시 메모리에 적재한 후에 해시 함수로써 연결하는 것

해시 조인은 EQUI JOIN만 사용 가능한 방법이다

 

- INNER JOIN

INNER JOIN은 ON 문을 사용해서 테이블을 연결한다

INNER JOIN 구에 두 개의 테이블 명을 서술하고 ON문 조인 조건을 서술한다

조인문에 추가 조건 및 정렬을 삽입할 수 있다

 

- INTERSECT 연산

INTERSECT 연산은 두 개의 테이블에서 교집합을 조회한다

즉, 두 개의 테이블에서 공통된 값을 조회한다

 

2) NON-EQUI JOIN

비등기 조인은 두 개의 테이블 간에 조인을 하는 경우, 등호를 사용하지 않고 나머지 비교연산자들을 사용한다

즉 NON EQUI JOIN의 경우 정확하게 일치하지 않는 것을 조인하는 것이다.

 

3)OUTER JOIN

OUTER JOIN 은 두 개의 테이블 간의 교집합을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다

예를 들어 DEPT 테이블과 EMP 테이블을 OUTER JOIN 한다면 DEPTNO가 같은 것을 조회하고 DEPT 테이블에만 있는 DEPTNO도 포함시킨다.

이 때 왼쪽 테이블에만 있는 행도 포함하면 LEFT OUTER JOIN, 오른쪽 테이블의 행만 포함시키면 RIGHT OUTER JOIN이라고 한다.

FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN 모두를 하는 것이다.

오라클 데이터 베이스에서는 OUTER JOIN을 할 때 '(+)' 기호를 사용해서 할 수 있다.

 

LEFT OUTER JOIN 은 두 개의 테이블에서 같은 것을 조회하고 왼쪽 테이블에만 있는 데이터를 포함해서 조회한다

RIGHT OUTER JOIN 은 두 개의 테이블에서 같은 것을 조회하고 오른쪽 테이블에만 있는 데이터를 포함해서 조회한다

각각 다른 쪽에 없는 데이터는 공백의 형태로 NULL 값이 출력된다

 

4) CROSS JOIN 

CROSS JOIN은 조인 조건구 없이 두 개의 테이블을 하나로 조인한다

조인구가 없기 때문에 카테시안 곱이 발생한다

예를 들어 행이 14개 있는 테이블과 행이 4개 있는 테이블을 조인하면 56개의 행이 조회된다

CROSS JOIN 은 FROM 절에 CROSS JOIN 구를 사용하면 된다

 

 

5) UNION을 사용한 합집합 구현

UNION 연산은 두 개의 테이블을 하나로 만드는 연산, 즉 두 개의 테이블을 하나로 합치는 것.

주의사항은 두 개의 테이블의 칼럼 수, 칼럼의 데이터 형식 모두가 일치해야한다. 만약 두 개의 테이블에 UNION 연산이 사용될 때 칼럼 수나 데이터 형식이 다르면 오류가 발생한다.

즉 UNION 연산은 두 개의 테이블을 하나로 합치면서 중복된 데이터를 제거한다.

그래서 UNION은 정렬 (SORT)과정을 발생시킨다 -> 비효율성 증가

아 UNION 기준으로 SELECT문을 두 개 작성하는데, 이 두 개로 연산을 하는 거 같음

 

UNION ALL은 두 개의 테이블을 말 그대로 하나로 합치는 것이다

UNION처럼 중복을 제거하거나 정렬을 유발하지 않기 때문에 중복값이 그대로 중복되어 여러 번 출력된다

 

6) 차집합을 만드는 MINUS

MINUS 연산은 두 개의 테이블에서 차집합을 조회한다

즉, 먼저 쓴 SELECT문에는 있고, 뒤에 적은 SELECT문에는 없는 집합을 조회하는 것이다

 

DEPT 테이블의 DEPTNO 종류는 10, 20, 30, 40이고, EMP 테이블의 DEPTNO 종류는 10, 20, 30 이라면 출력이 되는 DEPTNO는 40이다

MS-SQL에는 MINUS와 동일한 연산으로 EXCEPT 연산자가 있다

 

 

<집합 종류별 연산자>

EQUI JOIN -> 교집합

NON EQUI JOIN -> 대칭차집합

OUTER JOIN -> 차집합 + 교집합 (A 전체 혹은 B 전체)

UNION ->  합집합

MINUS -> 차집합

 

<연산자 별 SQL문 작성 문법>

JOIN 종류 기능 문법
EQUI JOIN 교집합

등호로 두 개의 테이블 연결
INNER JOIN  교집합

EQUI JOIN과 동일한 기능을 수행하지만 두 개의 테이블 명을 INNER JOIN 키워드를 중심으로 서술하고
ON 키워드를 활용하여 추가조건을 설정하고
ORDER BY 키워드를 통해 정렬을 수행할 수 있다
INTERSECT 교집합

INTERSECT 키워드를 중심으로 두 개의 SELECT문을 위치시킨다
단, 위의 두 교집합 기능의 키워드와는 출력의 형태가 다르다
위의 두 키워드는 전체 테이블이 출력이 된다면 INTERSECT 키워드는 지정된 DEPTNO 키워드만 지정하고 쿼리를 작성하기 때문에 DEPTNO 만 출력된다
OUTER JOIN 차 + 교집합

FROM 키워드 뒤에 두 개의 테이블 명을 작성하고,
(+) 기호를 사용하여 OUTER JOIN을 표시한다
LEFT OUTER JOIN 왼쪽 차 + 교집합
RIGHT OUTER JOIN 오른쪽 차 + 교집합 키워드 RIGHT OUTER JOIN 의 사용과 ON문의 조건 추가
CROSS JOIN 조건구 없이 하나로 조인

조건구가 없기 때문에 카테시안 곱 발생
UNION 합집합

중복 데이터를 제거하면서 두 테이블을 하나로 합침
UNION ALL 합집합

중복데이터 제거 없이 두 테이블을 하나로 합침
MINUS 차집합

앞의 SELECT문 테이블 - 뒤의 SELECT문 테이블
EXCEPT 키워드는 MINUS 키워드와 동일한 역할을 수행한다