1. STANDARD SQL 개요
설명
현재 기업형 DBMS 는 객체 지원 기능이 포함된 객체관계형 데이터베이스를 대부분 사용 중이다.
관계형 데이터베이스를 유일하게 접속 가능한 언어가 SQL 이다.
여러 불편사항을, 사용자 입장에서는 ANSI / ISO SQL 의 새로운 기능들을 사용함으로써 더 쉽게 데이터를 추출하고 SQL 튜닝의 효과를 함께 얻을 수 있게 되었다.
대표적인 ANSI / ISO 표준 SQL 기능
STANDARD JOIN 기능 추가 ( CROSS, OUTER JOIN 등 새로운 FROM 절 JOIN 기능들 )
SCALAR SUBQUERY , TOP-N QUERY 등 새로운 SUBQUERY 기능들
ROLLUP , CUBE , GROUPING SETS 등 새로운 리포팅 기능들
WINDOW FUNCTION 등 새로운 개념의 분석 기능들
SQL에서의 연산
E.F.Codd 박사 논문에 8가지 관계형 대수가 언급되어있음.
8가지 관계형 대수는 4개의 일반집합 연산자와 4개의 순수관계연산자로 나눌 수 있음
일반집합연산자
종류 | SQL 문장 | 뜻 |
UNION | UNION | 합집합 |
INTERSECTION | INTERSECT | 교집합 |
DIFFERENCE | MINUS (오라클) EXCEPT (SQL Server) |
차집합 |
PRODUCT | CROSS JOIN | 곱집합 (생길 수 있는 모든 데이터 조합) |
순수관계연산자
순수 관계 연산자는 관계형 데이터베이스를 구현하기 위해 새롭게 만든 연산자이다
종류 | SQL 문장 | 뜻 |
SELECT | WHERE절 | 조건에 맞는 행 조회 |
PROJECT | SELECT절 | 조건에 맞는 칼럼 조회 |
JOIN | 여러 JOIN | |
DIVIDE | 없음 | 공통요소를 추출하고 분모 릴레이션의 속성 삭제한 후 중복된 행 제거 |
2. FROM JOIN 의 형태
FRM 절 JOIN의 종류
INNER JOIN / NATURAL JOIN / USING 조건절 / ON 조건절 / CROSS JOIN / OUTER JOIN
INNER JOIN(내부조인)
JOIN 조건에서 동일한 값이 있는 행만 반환
USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.( WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의)
CROSS JOIN이나 OUTER JOIN과 동시 사용 불가
두 테이블에 동일 이름 칼럼이 있을 경우 SELECT절에 앨리어스 필수
명령어1: SELECT 칼럼s FROM 테이블1 A, 테이블2 B WHERE A.칼럼=B.칼럼;
명령어2: SELECT 칼럼s FROM 테이블1 A INNER JOIN 테이블2 B ON A.칼럼=B.칼럼; (ANSI/ISO 표준)
NATURAL JOIN
두 테이블 간 동일한 이름을 갖는 모든 칼럼에 대해 EQUI JOIN(등가조인)을 수행
추가로 USING 조건절, ON 조건절, WHERE 절에 JOIN 조건 사용 X
SQL Server에서 지원하지 않음
JOIN 되는 테이블의 데이터 성격과 칼럼명 등이 동일해야 한다.
명령어: SELECT 칼럼s FROM 테이블1 NATURAL JOIN 테이블2;
USING 조건절
FROM 절의 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중 선택적으로 EQUI JOIN(등가조인) 수행
(NATURAL JOIN 은 모든 일치되는 칼럼들에 대해 JOIN 이 된다.)
SQL Server 에서 지원 X
USING 조건절을 이용한 EQUI JOIN 에서도 NATURAL JOIN 처럼, JOIN 칼럼에 대해서 ALIAS 나 테이블명과 같은 접두사를 사용할 수 없다.
( * ) 와일드카드를 사용하여 별도의 칼럼 순서를 지정하지 않으면 USING 조건절의 기준이 되는 칼럼이 다른 칼럼보다 먼저 출력된다.
명령어: SELECT 칼럼s FROM 테이블1 A JOIN 테이블2 B USING (칼럼명);
ON 조건절
JOIN 서술부 ( ON 조건절 ) 와 비 JOIN 서술부 ( WHERE 조건절 ) 을 분리하여 이해가 쉽다.
칼럼명이 다르더라도 JOIN 조건절을 사용 가능하다.
이름이 다른 칼럼명을 JOIN 조건에 사용하거나, JOIN 칼럼을 명시하기 위해 ON 조건절을 사용한다.
ON 조건절에 사용된 괄호는 옵션 사항이다.
ON 조건절을 사용한 JOIN 은 ALIAS 나 테이블명과 같은 접두사를 사용하여 SELECT 에 사용되는 칼럼을 논리적으로 명확하게 한다.(USING 조건절을 이용한 JOIN 에서는 ERROR)
명령어: SELECT 칼럼s FROM 테이블1 A JOIN 테이블2 B ON (A.칼럼=B.칼럼);
CROSS JOIN
일반 집합 연산자의 PRODUCT 개념으로, 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합
두 개의 테이블에 대한 CARTESIAN PRODUCT 또는 CROSS PRODUCT 표현
결과는 양쪽 집합의 M * N 건의 데이터 조합이 발생한다.
명령어: SELECT 칼럼 FROM 테이블1, 테이블2; (조인 조건이 없을 때 발생 ↔ NATURAL JOIN은 명시해야 됨)
OUTER JOIN(외부조인)
JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용
명령어1: SELECT 칼럼s FROM 테이블1 A, 테이블2 B A.칼럼=B.칼럼(+);
명령어2: SELECT 칼럼s FROM 테이블1 A LEFT/RIGHT/FULL OUTER JOIN 테이블2 B ON (A.칼럼=B.칼럼);
LEFT OUTER JOIN | RIGHT OUTER JOIN | FULL OUTER JOIN |
JOIN 수행시 좌측 테이블의 데이터를 먼저 읽은 후, 우측 테이블의 JOIN 대상 데이터를 읽음 | JOIN 수행시 우측 테이블의 데이터를 먼저 읽은 후, 좌측 테이블의 JOIN 대상 데이터를 읽는다. | OIN 수행시 좌측, 우측 테이블 모두의 데이터를 읽어 JOIN 한다. |
A 와 B를 비교해서 B의 JOIN 칼럼에서 같은 값이 있을 때 해당 데이터를 가져옴 B의 JOIN 칼럼에서 같은 값이 없는 경우엔, B 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다. |
A 와 B를 비교해서 A의 JOIN 칼럼에서 같은 값이 있을 때 해당 데이터를 가져옴 A의 JOIN 칼럼에서 같은 값이 없는 경우엔, A 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다. |
TABLE A 와 B 둘다 기준이 된다. RIGHT OUTER JOIN 과 LEFT OUTER JOIN의 결과를 합집합 처리한 결과와 동일 UNION 기능과 같으므로 중복되는 데이터는 삭제 |
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 건이 출력 |
'Study > SQLD' 카테고리의 다른 글
2-2장 SQL 활용 - 3절 계층형 질의와 셀프 조인 (0) | 2022.06.30 |
---|---|
2-2장 SQL 활용 - 2절 집합연산자 (0) | 2022.06.29 |
2-1장 SQL 기본 - 9절 조인(JOIN) (2) | 2022.06.28 |
2-1장 SQL 기본 - 8절 ORDER BY 절 (0) | 2022.06.27 |
2-1장 SQL 기본 - 7절 GROUP BY, HAVING 절 (0) | 2022.06.26 |