본문 내용은 모두 필자가 공부하며 직접 정리한 내용입니다.
Kdata 데이터자격검정의 SQL 개발자(SQLD) 가이드를 참고하였습니다.
─지난 글 보기─
과목 2 SQL 기본 및 활용
제 2장 SQL 활용
제 1절 표준 조인(STANDARD JOIN)
1.STANDARD SQL 개요
가. 일반 집합 연산자
ㆍ첫 번째, UNION 연산은 수학적 합집합을 제공하기 위해, 공통 교집합의 중복을 없애기 위한 사전 작업으로
시스템에 부하를 주는 정렬 작업이 발생한다.
ㆍ이후 UNION ALL기능이 추가되었는데, 특별한 요구 사항이 없다면 공통 집합을 중복해서 그대로 보여주기 때문에
정렬 작업이 일어나지 않는 장점을 가진다.
ㆍ두 번째, INTERSECTION은 수학의 교집합으로써 두 집합의 공통집합을 추출한다.
ㆍ세 번째, DIFFERENCE는 수학의 차집합으로써 첫 번째 집합에서 두 번째 집합과의 공통 집합을 제외한 부분이다.
(대다수 벤더는 EXCEPT를, Oracle은 MINUS 용어를 사용한다.)
ㆍ네 번째, PRODUCT의 경우 CROSS(ANSI/ISO 표준) PRODUCT라고 불리는 곱집합으로,
JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다.
나. 순수 관계 연산자
ㆍ다섯 번째, SELECT 연산은 SQL 문장에서는 WHERE 절의 조건절 기능으로 구현이 되었다.
ㆍ여섯 번째, PROJECT 연산은 SQL 문장에서 SELECT 절의 칼람 선택 기능으로 구현이 되었다.
ㆍ일곱 번째, JOIN 연산은 WHERE 절의 INNER JOIN 조건과 함께 FROM 절의 NATURAL JOIN, INNER JOIN, OUTER JOIN,
USING 조건절, ON 조건절 등으로 가장 다양하게 발전하였다.
2. FROM 절 JOIN 형태
3. INNER JOIN
ㆍINNER JOIN은 OUTER JOIN과 대비하여 내부 JOIN이라고 하며 JOIN 조건에서 동일한 값이 있는 행만 반환된다.
ㆍINNER JOIN 표시는 그 동안 WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로
USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.
[예제] 사원 번호와 사원 이름, 소속부서 코드와 소속부서 이름을 찾아본다.
[예제]
WHERE 절 JOIN 조건
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
위 SQL과 아래 SQL은 같은 결과를 얻을 수 있다.
FROM 절 JOIN 조건
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;
INNER는 JOIN의 디폴트 옵션으로 아래 SQL문과 같이 생략 가능하다.
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM EMP JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;
4. NATURAL JOIN
ㆍNATURAL JOIN은 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) JOIN을 수행한다.
ㆍNATURAL JOIN이 명시되면, 추가로 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없다.
ㆍSQL Server에서는 지원하지 않는 기능이다.
5. USING 조건절
ㆍ같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수가 있다.
ㆍSQL Server에서는 지원하지 않는다.
6. ON 조건절
ㆍJOIN 서술부(ON 조건절)와 비 JOIN 서술부(WHERE 조건절)를 분리하여 이해가 쉬우며,
칼럼명이 다르더라도 JOIN 조건을 사용할 수 있는 장점이 있다.
7. CROSS JOIN
ㆍ테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다.
ㆍ결과는 양쪽 집합의 M*N 건의 데이터 조합이 발생한다.
8. OUTER JOIN
ㆍINNER JOIN과 대비하여 OUTER JOIN이라고 불리며, JOIN 조건에서 동일한 값이 없는 행도 반환될 때 사용할 수 있다.
ㆍJOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.
가. LEFT OUTER JOIN
ㆍ조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후,
나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어온다.
ㆍTable A와 B가 있을 때, A와 B를 비교해서 B의 JOIN 칼럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고
B의 JOIN 칼럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다.
나. RIGHT OUTER JOIN
ㆍ조인 수행시 LEFT JOIN과 반대로 우측 테이블이 기준이 되어 결과를 생성한다.
다. FULL OUTER JOIN
ㆍ조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성한다.
ㆍRIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일하다.
9. INNER vs OUTER vs CROSS JOIN 비교
- INNER JOIN의 결과
: 양쪽 테이블에 모두 존재하는 키 값이 B-B, C-C 인 2건이 출력된다.
- LEFT OUTER JOIN의 결과
: TAB1을 기준으로 키 값 조합이 B-B, C-C, D-NULL, E-NULL 인 4건이 출력된다.
- RIGHT OUTER JOIN의 결과
: TAB2를 기준으로 키 값 조합이 NULL-A, B-B, C-C 인 3건이 출력된다.
- FULL OUTER JOIN의 결과
: 양 쪽 테이블을 기준으로 키 값 조합이 NULL-A, B-B, C-C, D-NULL, E-NULL 인 5건이 출력된다.
- CROSS JOIN의 결과
: JOIN 가능한 모든 경우의 수를 표시하지만, 단 OUTER JOIN은 제외한다.
양쪽 테이블 TAB1과 TAB2의 데이터를 곱한 개수인 4 * 3 = 12건이 출력된다.
키 값 조합이 B-A, B-B, B-C, C-A, C-B, C-C, D-A, D-B, D-C, E-A, E-B, E-C 인 12건이 출력된다.
다음에는 집합 연산자(SET OPERATOR)에 관한 내용을 정리하여 포스팅하겠습니다.
'데이터베이스 > SQLD' 카테고리의 다른 글
[SQLD 도전기] SQL 활용(3) - 계층형 질의와 셀프 조인 (0) | 2022.10.26 |
---|---|
[SQLD 도전기] SQL 활용(2) - 집합 연산자(SET OPERATOR) (0) | 2022.10.26 |
[SQLD 도전기] SQL 기본(9) - 조인(JOIN) (0) | 2022.10.19 |
[SQLD 도전기] SQL 기본(7) - GROUP BY, HAVING 절 (0) | 2022.10.18 |
[SQLD 도전기] SQL 기본(6) - 함수(FUNCTION) (0) | 2022.10.18 |
댓글