제1절 표준 조인
1. STANDARD SQL 개요
(1) 일반 집합 연산자
- UNION (합집합) -> UNION, UNION ALL
- INTERSECTION (교집합) -> INTERSECT
- DIFFERENCE (차집합) -> EXCEPT(Oracle은 MINUS)
- PRODUCT (곱집합) -> CROSS JOIN
(2) 순수 관계 연산자
- SELECT -> WHERE (SELECT 연산과 SELECT 절은 다르다)
- PROJECT -> SELECT
- (NATURAL) JOIN -> 다양한 JOIN
- DIVIDE -> 사용 X
2. FROM 절 JOIN 형태
[ANSI/ISO SQL FORM 절 JOIN의 형태]
- INNER JOIN
- NATURAL JOIN
- USING 조건절
- ON 조건절
- CROSS JOIN
- OUTER JOIN
3. INNER JOIN
- 내부 JOIN이라고 하며, JOIN조건에서 동일한 값이 있는 행만 반환한다.
- USING이나 ON 조건절을 필수적으로 사용해야 한다.
- WHERE 절 JOIN 조건
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP, DEPT WHERE EMP.DEPTNE = DEPT.DEPTNO
- FROM 절 JOIN 조건 (INNER는 생략 가능)
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
4. NATURAL JOIN
- 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) 등가 조인을 수행한다.
- USING, ON, WHERE 절에서 조건을 정의 할 수 없다.
- SQL Server는 지원하지 않는 기능이다.
- 코드
SELECT DEPTNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT;
-
NATURAL JOIN에 사용된 열은 식별자를 가질 수 없다.SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT;
- NATURAL JOIN에서 (*) 와일드카드 처럼 별도의 순서를 정하지 않으면 조인의 기준 칼럼이 먼저 출력된다. 그리고 JOIN에 사용된 칼럼이 하나로 출력된다. INNER JOIN은 각각 출력된다.
5. USING 조건절
- 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN 실행 (SQL Server는 없는 기능)
- ALIAS나 테이블이름과 같은 접두사를 붙일 수 없다.
- 코드
SELECT * FROM DEPT JOIN DEPT_TEMP USING (DEPTNO);
6. ON 조건절
- 칼럼명이 다르더라도 JOIN 조건을 사용할 수 있다.
- ON조건의 괄호는 옵션이다.
- ALIAS나 테이블 명과 같은 접두사를 사용하여 칼럼을 논리적으로 명확하게 지정해주어야 한다.
- 코드 예제
[WHERE과 혼용]SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);
[ON 조건절 + 데이터 검증 조건 추가]SELECT E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO) WHERE E.DEPTNO = 30;
[다중 테이블 JOIN] SELECT E.ENAME, E.MGR, D.DEPTNO, D.DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO AND E.MGR = 7698);
-
SELECT E.EMPNO, D.DEPTNO, D.DNAME, T.DNAME New_DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO) JOIN DEPT_TEMP T ON (E.DEPTNO = T.DEPTNO);
7. CROSS JOIN
- CARTESIAN PRODUCT / 테이블 간의 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합
- 양쪽 집합의 M*N건의 데이터 조합 발생
SELECT ENAME, DNAME FROM EMP CROSS JOIN DEPT ORDER BY ENAME;
8. OUTER JOIN
- INNER JOIN과 대비하여 외부 JOIN으로 불리면 JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용가능
- USING 이나 ON 을 필수적으로 사용해야 한다.
- LEFT OUTER JOIN
조인 수행 시 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 우측테이블에서 JOIN 대상 데이터를 읽어온다. - RIGHT OUTER JOIN
LEFT OUTER JOIN과 반대로 우측 테이블이 기준이 되어 결과 출력 - FULL OUTER JOIN
합집합 개념으로 LEFT와 RIGHT를 모두 읽어 온다
9. INNER vs OUTER vs CROSS JOIN 비교
- INNER JOIN : B-B, C-C 2건 출력
- LEFT OUTER JOIN : B-B, C-C, D-NULL, E-NULL 4건 출력
- RIGHT OUTER JOIN : NULL-A, B-B, C-C 3건 출력
- FULL OUTER JOIN : NULL-A, B-B, C-C, D-NULL, E-NULL 5건 출력
- CARTESIAN PRODUCT (CROSS JOIN) : 3 * 4 12건 출력
'자격증 > SQLD' 카테고리의 다른 글
SQLD 정리 / 과목 2 SQL 기본 및 활용 / 제2장 SQL 활용 / 제3절 계층형 질의와 셀프 조인 (0) | 2021.05.27 |
---|---|
SQLD 정리 / 과목 2 SQL 기본 및 활용 / 제2장 SQL 활용 / 제2절 집합 연산자 (0) | 2021.05.27 |
SQLD 정리 / 과목 2 SQL 기본 및 활용 / 제1장 SQL 기본 / 제9절 조인(JOIN) (0) | 2021.05.26 |
SQLD 정리 / 과목 2 SQL 기본 및 활용 / 제1장 SQL 기본 / 제8절 Order By 절 (0) | 2021.05.26 |
SQLD 정리 / 과목 2 SQL 기본 및 활용 / 제1장 SQL 기본 / 제7절 Group By, Having 절 (0) | 2021.05.26 |