Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

걸음마부터 달리기

DB-표준조인 본문

카테고리 없음

DB-표준조인

성추 2024. 7. 27. 17:14

일반집합연산자와 순수관계연산자로 처음 시작하여 이를 바탕으로 SQL의 기반 이론이 되었다.

일반집합연산자와 현재의 SQL은

1. UNION 연산은 UNION 기능으로, 

2. INTERSECTION 연산은 INTERSECT 기능으로, 

3. DIFFERENCE 연산은 EXCEPT(Oracle은 MINUS) 기능으로, 

4. PRODUCT 연산은 CROSS JOIN 기능으로 구현되었다.

 

첫번째의 UNION은 기존에 공통 교집합의 중복을 없애기 위해 사전 작업으로 정렬을 하는 추가적인 시스템 부하가 발생했다. 추후 UNION ALL 이 나왔는데 결과값이 UNION ALL과 UNION이 같다면 오버헤드가 적은 UNION ALL을 사용하자.

 

아래는 DB 구현을 위한 새롭게 만들어진 순수관계연산자이다. 

5. SELECT 연산은 SQL 문장에서는 WHERE 절의 조건절 기능으로 구현이 되었다. (SELECT 연산과 SELECT 절의 의미가 다름을 유의하자.)

6. PROJECT 연산은 SQL 문장에서는 SELECT 절의 칼럼 선택 기능으로 구현이 되었다.

7. JOIN 연산은 WHERE 절의 INNER JOIN 조건과 함께 FROM 절의 NATURAL JOIN, INNER JOIN, OUTER JOIN, USING 조건절, ON 조건절 등으로 가장 다양하게 발전하였다.

8. DIVIDE 연산은 나눗셈과 비슷한 개념 으로 왼쪽의 집합을 ‘XZ’로 나누었을 때, 즉 ‘XZ’를 모두 가지고 있는 ‘A’가 답이 되는 기능으로 현재 사용되지 않는다.

 

FROM절 JOIN 형태

ANSI/ISO SQL에서 정의한 JOIN 문법은 WHERE 절을 사용하던 기존 JOIN 방식과 차이가 있다.

이는 기존의 WHERE절을 통해 검색조건과 JOIN조건을 구분없이 사용하던 방식을 그대로 사용하면서 

FROM 절에서 JOIN조건을 명시적으로 정의할 수 있게 되었다.

INNER JOIN

NATURAL JOIN : INNER JOIN의 하위개념이고 INNER JOIN과는 다르게 자동으로 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN을 수행함. 

 

JOIN 문장에서 ON 조건절을 조심해야된다.

기존의 WHERE절에서 JOIN조건과 데이터 검증 조건(필터링)이 같이 사용되어 용도가 불분명했던거를 

FROM으로 JOIN을 명시함으로서 ON 조건절로 분리하여 사용자가 이해하기 쉽도록 한다.

ON절은 NATURAL JOIN처럼 JOIN조건이 숨어있는 것도 아니고 USING 조건절, NATURAL JOIN절처럼 칼럼명이 동일해야된다는 제약조건 없이 칼럼명이 서로 다르더라도 JOIN을 사용할 수 있게 해준다.

 

INNER JOIN 

INNER JOIN은 OUTER(외부) JOIN과 대비하여 내부 JOIN이라고 하며 JOIN 조건에서 동일한 값이 있는 행만 반환한다. INNER JOIN 표시는 그 동안 WHERE 절에 서 사용하던 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.

 

NATURAL JOIN

NATURAL JOIN은 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) JOIN을 수행한다. NATURAL JOIN이 명시되면, 추가로 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없다. 즉 기준 칼럼은 알아서 칼럼명이 같은걸로 해주기에 ON이나 USING이 필요없다.

이때 NATURAL JOIN이 되는 기준 칼럼은 칼럼명도 같아야하지만 도메인도 같아야한다.

 

NATURAL JOIN은 SELECT에서 칼럼 순서 지정 안하면 JOIN 시 기준 칼럼이 가장 앞에 온다. 

 

USING 조건절

NATURAL JOIN에서 동일한 칼럼명과 도메인이 같은 칼럼이 여러개면 이 모든 것에 대해 JOIN을 수행하지만 USING 조건절이 있으면 그 중 일부의 칼럼만 가지고 NATURAL JOIN 할 수 있다.

SELECT *
FROM DEFT JOIN DEPT_TEMP
USING (DEPTNO);

사실상 이게 INNER JOIN과 똑같다.