FROM절 JOIN 형태
- INNER JOIN
- NATURAL JOIN
- USING 조건절
- ON 조건절
- CROSS JOIN
- OUTER JOIN
ANSI/ISO SQL에서 규정한 JOIN 문법은 WHERE 절을 사용하던 기존 JOIN 방식과 차이가 있다.
INNER JOIN
→ WHERE 절에서부터 사용하던 JOIN의 DEFAULT 옵션으로, JOIN 조건에서 동일한 값이 있는 행만 반환.
→ CROSS JOIN, OUTER JOIN과는 같이 사용할 수 없다.
NATURAL JOIN
→ INNER JOIN의 하위 개념. 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행
WHERE 절에서 JOIN 조건과 데이터 검증 조건이 같이 사용되었을 때 용도가 불분명한 경우가 발생
→ WHERE 절의 JOIN 조건을 FROM 절의 ON 조건절로 분리
단, FROM 절에 테이블이 많이 사용될 경우 가독성이 떨어질 수 있다.
INNER JOIN
JOIN 조건에서 동일한 값이 있는 행만 반환.
→ WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의하는 것.
→ USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.
//WHERE 절 JOIN 조건
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
//FROM 절 JOIN 조건
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;
→ INNER는 생략 가능.
NATURAL JOIN
두 테이블 간 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN을 수행.
→ NATURAL JOIN이 명시되면, USING 조건절, ON 조건절, WHERE 조건절에서 JOIN 조건을 정의할 수 없다.
→ SQL Server에서는 지원하지 않는다.
SELECT DEPTNO, EMPNO, ENAME, DNAME
FROM EMP NATURAL JOIN DEPT;
→ EMP와 DEPT 테이블에서 공통된 칼럼을 자동으로 인식하여 JOIN을 처리한다.
NATURAL JOIN 특징
- NATURAL JOIN에 사용된 칼럼은 ALIAS나 테이블 명과 같은 접두사를 붙일 수 없다.
- JOIN이 되는 테이블의 데이터 성격(도메인)과 칼럼명 등은 동일해야 한다.
- 별도의 칼럼 순서를 지정하지 않으면(SELECT *) NATURAL JOIN의 기준이 되는 칼럼들이 다른 칼럼보다 먼저 출력된다.
- NATURAL JOIN은 JOIN에 사용된 같은 이름의 칼럼을 하나로 처리하지만, INNER JOIN은 별개의 칼럼으로 표시한다.
USING 조건절
같은 이름을 가진 칼럼들 중 원하는 칼럼에 대해 선택적으로 EQUI JOIN.
→ SQL Server에서는 지원하지 않는다.
USING 조건절 특징
- ALIAS나 테이블 명과 같은 접두사를 붙일 수 없다.
//ERROR
SELECT DEPT.DEPTNO, DEPT.DNAME, DEPT.LOC
FROM DEPT JOIN DEPT_TEMP
USING (DEPTNO);
//CORRECT
SELECT DEPTNO, DEPT.DNAME, DEPT.LOC
FRFOM DEPT JOIN DEPT_TEMP
USING (DEPTNO);
- 별도의 칼럼 순서를 지정하지 않으면(SELECT *) USING 조건절의 기준이 되는 칼럼들이 다른 칼럼보다 먼저 출력된다.
- USING JOIN은 JOIN에 사용된 같은 이름의 칼럼을 하나로 처리한다.
- 두 개의 테이블에서 JOIN 조건에 참여하지 않은 나머지 칼럼은 두 개의 칼럼으로 표시된다.
↓
ex) 세 개의 칼럼명(LOC, DEPTNO, DNAME)이 같은 테이블 DEPT, DEPT_TEMP이 있을 때 LOC, DEPTNO 두 개 칼럼을 이용
SELECT *
FROM DEPT JOIN DEPT_TEMP
USING (LOC, DEPTNO);
USING에 사용된 LOC, DEPTNO가 첫 번째, 두 번째 칼럼으로 출력되고, JOIN 조건에 참여하지 않은 나머지 칼럼(DNAME)은 2개의 칼럼으로 표시된다.
[실행 결과]
ON 조건절
칼럼명이 다르더라도 JOIN 조건을 사용할 수 있다.
ON 조건절 특징
- ALIAS나 테이블 명과 같은 접두사를 사용하여 SELECT에 사용되는 칼럼을 논리적으로 명확하게 지정해줘야 한다.
- 임의의 JOIN 조건을 지정하거나, 이름이 다른 칼럼명을 JOIN 조건으로 사용하거나, JOIN 칼럼을 명시하기 위해 ON 조건절을 사용한다.
CROSS JOIN
테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합.
→ 일반 집합 연산자의 PRODUCT의 개념
CROSS JOIN 특징
- 결과: 양쪽 집합의 M * N 건의 데이터 조합이 발생.
- WHERE 절에 JOIN 조건을 추가할 수 있으나, 이 경우는 INNER JOIN과 같은 결과를 얻기 때문에 CROSS JOIN을 사용하는 의미가 없어지므로 권고하지 않는다.
- 데이터 웨어하우스의 개별 DIMENSION을 FACT 칼럼과 JOIN하기 전에 모든 DIMENSION의 CROSS PRODUCT를 먼저 구할 때 사용하는 경우 사용.
OUTER JOIN
JOIN 조건에서 동일한 값이 없는 행도 반환.
→ WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의하는 것.
→ USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.
OUTER JOIN 특징
- 테이블1의 모든 값에 대해 테이블2의 데이터가 반드시 존재한다는 보장이 없을 때 사용
1) LEFT OUTER JOIN
좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 우측 테이블에서 JOIN 대상 데이터를 읽어온다.
→ 좌측 테이블이 기준
테이블1과 테이블2를 비교
↓
테이블2의 JOIN 칼럼에서 같은 값이 있을 때 해당 데이터를 가져옴.
테이블2의 JOIN 칼럼에서 같은 값을 없을 때 테이블2에서 가져오는 칼럼들은 NULL.
2) RIGHT OUTER JOIN
우측 테이블에 해당하는 데이터를 먼저 읽은 후, 좌특 테이블에서 JOIN 대상 데이터를 읽어온다.
→ 우측 테이블이 기준
테이블1과 테이블2를 비교
↓
테이블1의 JOIN 칼럼에서 같은 값이 있을 때 해당 데이터를 가져옴.
테이블1의 JOIN 칼럼에서 같은 값을 없을 때 테이블1에서 가져오는 칼럼들은 NULL.
3) FULL OUTER JOIN
좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과를 생성.
→ RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일.
( = UNION 기능, 중복되는 데이터 삭제)
'데이터베이스 > 데이터베이스 공부' 카테고리의 다른 글
그룹 함수(ROLLUP, CUBE, GROUPING SETS) (0) | 2022.09.03 |
---|---|
뷰(VIEW, VIEW 장점, VIEW 생성, VIEW 사용, VIEW 제거) (0) | 2022.09.03 |
일반 집합 연산자, 순수 관계 연산자 (0) | 2022.09.03 |
EQUI JOIN(등가 조인)과 Non EQUI JOIN(비등가 조인) (0) | 2022.09.02 |
조인수행원리(NL Join, Sort Merge Join, Hash Join) (0) | 2022.09.01 |