암시적 JOIN- 모든 조건을 WHERE 절에 기술
명시적 JOIN- JOIN 기준 조건은 ON절에 기술 / 일반 조건은 WHERE절에 기술
EQUI JOIN
조인 조건으로 Equal(=) 연산 사용
-중복 칼럼의 경우, 칼럼명 앞에 테이블명을 붙여야함
-테이블명이 긴 경우 ALIAS 사용
SELECT EMP.ENAME, EMP.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
NON-EQUI JOIN
조인 조건으로 Equal(=) 이외의 연산 사용
BETWEEN, >, >=, <, <= 등
SELECT E.ENAME 사원명, E.SAL 급여, S.GRADE 급여등급
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
INNER JOIN
서로 대응되는 내용만 검색하는 조인
조인의 Defalut 이므로 "INNER" 생략 가능
--암시적, NON-EQUI, INNER JOIN
SELECT E.ENAME, E.DEPTNO, E.SAL, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND E.SAL > 2000;
--명시적, NON-EQUI, INNER JOIN
SELECT E.ENAME, E.DEPTNO, E.SAL, D.DNAME
FROM EMP E INNER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
WHERE E.SAL > 2000;
NATURAL JOIN
INNER JOIN의 특수한 경우
두 테이블 간 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행
칼럼 간 데이터 타입 또한 동일해야함
별도의 조인 칼럼 및 조건을 지정할 수 없음
조인의 대상이 되는 칼럼에는 접두사(테이블명 또는 ALIAS)를 사용할 수 없음
SELECT EMPNO, ENAME, DEPTNO, DNAME
FROM EMP NATURAL JOIN DEPT;
*NATURAL JOIN과 INNER JOIN의 차이는 NATURAL JOIN은 중복되는 칼럼을 제거하고 하나로 출력한다!
+WHERE, ON, USING절 조건 기술 비교
--암시적 조인
SELECT ENAME, EMP.DEPTNO, DNAME
FROM EMP DEPT
ON (E.DEPTNO=D.DEPTNO);
--명시적 조인
SELECT ENAME, EMP.DEPNO, DNAME
FROM EMP JOIN DEPT
ON EMP.DEPTNO=DEPT.NO;
--USING
SELECT ENAME, DEPTNO, DNAME
FROM EMP JOIN DEPT
USING (DEPTNO);
--두 테이블 간 동일한 칼럼명이 DEPTNO밖에 없는 경우
SELECT ENAME, DEPTNO, DNAME
FROM EMP NATURAL JOIN DEPT
OUTER JOIN
-서로 대응되지 않는 행도 출력하는 조인
-조건절을 필수로 사용
-성능 저하의 원인이 될 수 있으므로 필요한 경우에만 사용
LEFT OUTER JOIN / RIGHT OUTER JOIN
왼쪽/ 오른쪽의 테이블의 데이터를 모두 읽은 후, 왼쪽/오른쪽 테이블에서 JOIN 데이터를 가져옴
JOIN 조건에 해당되지 않는 경우, 해당 칼럼은 NULL로 채움
FULL OUTER JOIN
양쪽 테이블의 데이터를 모두 읽은 후, 상대 테이블에서 JOIN 데이터를 가져옴
JOIN 조건에 해당되지 않는 경우, 해당 칼럼은 NULL로 채움
LEFT OUTER JOIN 과 RIGHT OUTER JOIN 의 합집합에 해당
(즉, UNION ALL이 아닌 UNION과 동일)
CROSS JOIN
-두 테이블의 곱집합을 출력하는 조인
-별도의 조인 조건이 없음
SELF JOIN
-동일 테이블 사이의 조인
FROM 절에 동일 테이블이 두 번 이상 나타남
-테이블 식별을 위해 반드시 ALIAS를 사용해야함
동일한 테이블을 개념적으로 서로 다른 두 개의 테이블로 사용함
'[SQL]' 카테고리의 다른 글
| [SQL] TCL (Transaction Control Language) (0) | 2024.08.15 |
|---|---|
| [SQL] 계층형 질의 / 집합 연산자 (0) | 2024.08.15 |
| [SQL] TO_DATE 함수 (0) | 2024.08.13 |
| [SQL] 제어 함수 & NULL 함수 (0) | 2024.08.12 |
| [SQL] 문자형 함수와 REGEXP 함수 / 정규표현식 (0) | 2024.08.12 |