Equi join / Non-equi join
1. Equality condition(=) join
- =을 사용해 일치하는 값을 조회한다.
- [tip] hash join은 Equi join만 사용 가능하다.
SELECT * FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.ENAME LIKE '임%'
ORDER BY ENAME;
2. Non-Equi join
- >, <, >=, <= 을 사용해 조인한다.
Inner join / Outer join (left, right)
1. Inner join
- 두 테이블 사이의 교집합을 조회한다.
- INNERT JOIN 조인할테이블명 ON 조인조건
SELECT * FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;
[tip] using 조건절을 이용한 inner join
- using(칼럼명) 으로 이너조인을 할 수 있다.
- 조인 기준 칼럼은 테이블명. 하면 안된다. (NATURAL JOIN 도 조인 기준 칼럼에 이거 안된다.)
SELECT DEPT.DEPTNO DEPTNO, DEPT.DNAME, DEPT.LOC
FROM DEPT JOIN DEPT_TEMP USING (DEPTNO);
2. Outer Join
- 두 테이블 사이의 교집합 조회 + 한쪽 테이블에만 있는 데이터도 포함해 조회
1) Left outer join
- 왼쪽 테이블에만 있는 데이터도 포함하여 조회(왼쪽 테이블 데이터는 다 포함)
- LEFT OUTER JOIN 조인할테이블명 ON 조인조건
SELECT * FROM DEPT LEFT OUTER JOIN EMP
ON EMP.DEPTNO = DEPT.DEPTNO;
2) Right outer join
- 오른쪽 테이블에만 있는 데이터도 포함하여 조회(오른쪽 테이블 데이터는 다 포함)
- RIGHT OUTER JOIN 조인할테이블명 ON 조인조건
SELECT * FROM DEPT RIGHT OUTER JOIN EMP
ON EMP.DEPTNO = DEPT.DEPTNO;
Cross join
- 조건 없이 테이블 조인
- 두 테이블 사이의 카테시안 곱 발생
- CROSS JOIN 조인할 테이블
SELECT * FROM EMP CROSS JOIN DEPT;
Self join
- 동일한 테이블이지만, 개념적으로는 두 개의 서로 다른 테이블을 사용하는 것과 동일
- 동일 테이블을 다른 테이블처럼 다루기 위해 alias 사용
SELECT E1.EMPNO 사원, E1.MGR 관리자, E2.MGR 관리자의_관리자
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO
1. 합집합 : UNION연산
- SELECT 연산의 결과를 하나로 합친다.
- 연산의 대상이 되는 칼럼 수 및 칼럼 데이터 형식은 모두 일치해야 한다.
- 중복된 데이터는 제거된다.
- 정렬 -> 중복되지 않는 튜플 합치기 과정으로 수행되기 때문에 정렬이 발생한다.
SELECT DEPTNO FROM EMP
UNION
SELECT DEPTNO FROM EMP
2. 교집합 : INTERSECT 연산
- SELECT 연산의 결과를 교집합한다.
SELECT DEPTNO FROM EMP
INTERSECT
SELECT DEPTNO FROM DEPT;
3. 차집합 : MINUS(EXCEPT) 연산
- 앞에 쓴 SELECT 문에는 있고, 뒤에 쓴 SELECT 문에는 없는 집합을 조회한다.
SELECT DEPTNO FROM EMP
MINUS
SELECT DEPTNO FROM DEPT;