<목차> |
7. 표준 조인
표준 조인 개요
- 현재 기업형 DBMS는 순수 관계형 데이터베이스가 아닌 객체 지원 기능이 포함된 객체관계형(Object Relational) 데이터베이스 대부분 사용
- SQL: 현재 사용하는 많은 시스템의 두뇌 역할을 하는 관계형 데이터베이스를 유일하게 접속할 수 있는 언어
- 1999년, ANSI/ISO SQL3 : 기존의 SQL 버전은 표준 SQL에 대한 명세가 부족하고, DBMS 벤더 별로 문법이나 사용되는 용어의 차이가 너무 커져서 상호 호환성이나 SQL 학습 효율이 많이 부족한 문제 발생.
▶ SQL에서 필요한 기능을 정리하고 호환 가능한 여러 기준 제정
- 2003년, ANSI/ISO SQL 기준이 소폭 추가 개정되었고 현재 사용되는 데이터베이스는 대부분 SQL-2003 표준을 기준으로 하고 있음.
※ 대표적인 ANSI/ISO 표준 SQL 기능
- STANDARD JOIN 기능 추가 (CROSS, OUTER JOIN 등 새로운 FROM 절 JOIN 기능들)
- SCALAR SUBQUERY, TOP-N QUERY 등의 새로운 SUBQUERY 기능들
- ROLLUP, CUBE, GROUPING SETS 등의 새로운 리포팅 기능
- WINDOW FUNCTION 같은 새로운 개념의 분석 기능들
1) 일반 집합 연산자
일반 집합 연산자와 현재의 SQL 비교
- UNION 연산은 UNION 기능으로, (수학적 합집합 제공)
- INTERSECTION 연산은 INTERSECT 기능으로, (수학의 교집합)
- DIFFERENCE 연산은 EXCEPT (Oracel: MINUS) 기능으로, (수학의 차집합)
- PRODUCT 연산은 CROSS JOIN 기능으로 구현 (수학의 곱집합)
2) 순수 관계 연산자
순수 관계 연산자와 현재의 SQL 비교
- SELECT 연산은 WHERE 절로 구현 (WHERE 절의 조건절 기능)
- PROJECT 연산은 SELECT 절로 구현 (칼럼 선택 기능)
- (NATURAL) JOIN 연산은 다양한 JOIN 기능으로 구현 (가장 다양하게 발전)
- DIVIDE 연산은 현재 미사용
FROM 절 JOIN 형태
ANSI/ISO SQL에서 규정한 JOIN 문법은 WHERE 절을 사용하던 기존 JOIN 방식과 차이가 있음.
사용자는 기존 WHERE 절의 검색 조건과 테이블 간의 JOIN 조건을 구분 없이 사용하던 방식을 그대로 사용할 수 있으면서, 추가된 선택 기능으로 테이블 간의 JOIN 조건을 FROM 절에서 명시적으로 정의할 수 있게 됨.
JOIN 명 | 특징 |
INNER JOIN(내부조인) | - JOIN 조건에서 동일한 값이 있는 행만 반환 (CROSS JOIN, OUTER JOIN 과는 같이 사용 불가) - 그동안 WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수적으로 사용해야 함. |
NATURAL JOIN | - INNER JOIN의 하위 개념. 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행(NATURAL INNER JOIN 이라고도 표시) - 테이블의 데이터 성격(도메인)과 칼럼명 등이 동일해야 하는 제약 조건 있음. - 추가로 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없음. - SQL Server에서는 미지원 |
USING 조건절 | - USING 절에 두 테이블에 존재하는 공통된 컬럼명 사용. - 데이터 유형도 동일해야 함. - SQL Server에서는 미지원 |
ON 조건절 | - JOIN 조건이 숨이 있지 않고, 명시적으로 JOIN 조건을 구분할 수 있고, NATURAL JOIN이나 USING 조건절처럼 칼럼명이 똑같아야 된다는 제약 없이 칼럼명이 상호 다르더라도 JOIN 조건으로 사용 가능. - FROM 절에 테이블이 많아 사용될 경우 다소 복잡하게 보여 가독성이 떨어지는 단점. |
CROSS JOIN | 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합 |
OUTER JOIN (외부조인) | JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용 가능 |
LEFT OUTER JOIN | 조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어옴. 우측 JOIN 칼럼에서 같은 값이 없는 경우에는 우측 테이블에서 가져오는 칼럼들은 NULL 값으로 표기 |
RIGHT OUTER JOIN | 우측 테이블이 기준이 되어 결과 생성. |
FULL OUTER JOIN | 조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과 생성. UNION ALL 이 아닌, UNION 기능과 동일. (모든 중복된 행은 하나의 행으로 만듦.) |
JOIN 비교
[각 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건 출력
이전글
다음글
'자격증 > SQLD' 카테고리의 다른 글
SQLD 2과목 SQL 활용 - 집합연산자 (1) | 2024.01.16 |
---|---|
SQLD 2과목 SQL 활용 - 서브쿼리 (1) | 2024.01.15 |
SQLD 2과목 SQL 기본 및 활용 - 조인 (1) | 2024.01.13 |
SQLD 2과목 SQL 기본 및 활용 - GROUP BY, HAVING 절 (1) | 2024.01.12 |
SQLD 2과목 SQL 기본 및 활용 - WHERE 절 (1) | 2024.01.11 |