본문 바로가기

dev/DB

Join

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;


'dev > DB' 카테고리의 다른 글

window 함수  (0) 2019.03.10
그룹 함수  (0) 2019.03.10
SQL 표준 함수  (0) 2019.03.10
서브쿼리  (0) 2019.03.10
Java 진영의 persistent framework  (0) 2019.03.07