SQL JOIN문

1. JOIN문

두 개 이상의 테이블을 연결하여 데이터를 조회하는 방법이다.
연사자, From절의 JOIN 형태에 따라 4가지로 나뉘어진다.

2. INNER JOIN

1) EQUI JOIN

SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명 = 테이블명2.속성명

INNER JOIN 구문

SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
 FROM 테이블명1
INNER JOIN 테이블명2
 ON 테이블명1.속성명 = 테이블명2.속성명

2) NATURAL JOIN

SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1  NATURAL JOIN  테이블명2

NATURAL JOIN만 실행하면 동일한 이름을 가진 칼럼은 모두 조인되는데,
USING절을 활용하면 칼럼을 선택해 조인할 수 있다.
USING절 안에 포함되는 칼럼에 별칭을 지정하면 오류가 발생한다.

SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1  
   JOIN 테이블명2
 USING(속성명)

3) NON EQUI JOIN

SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2..
WHERE (NON EQUI JOIN 조건)

4) SELF JOIN

-- 방법1
SELECT [별칭1.]속성명, [별칭2.]속성명 ....
FROM 테이블명1 AS 별칭1,  테이블명2 AS 별칭2 
WHERE 별칭1.속성명 = 별칭2.속성명
 
-- 방법2
SELECT [별칭1.]속성명, [별칭2.]속성명 ....
FROM 테이블명1 AS 별칭1 
  JOIN  테이블명2 AS 별칭2 
    ON 별칭1.속성명 = 별칭2.속성명

5) CROSS JOIN

테이블 A에서 조회되는 하나의 행에 테이블 B에서 조회되는 모든 행을 연결하여 조인한다.

SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1 CROSS JOIN 테이블명2

3. OUTER JOIN

일반적인 INNER JOIN과 비슷하지만 한 쪽의 데이터에서 JOIN조건에 일치하지 않는 값까지 모두 가져와 조회한다.

1) LEFT OUTER JOIN

JOIN 수행 시 왼쪽에 표기된 테이블은 JOIN조건에 일치하지 않는 값까지 모두 조회된다.

-- 방법1
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1  LEFT OUTER JOIN   테이블명2..
ON 테이블명1.속성명 = 테이블명2.속성명
 
-- 방법2
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명 = 테이블명2.속성명(+)

2) RIGHT OUTER JOIN

JOIN 수행 시 오른쪽에 표기된 데이블은 JOIN조건에 일치하지 않는 값까지 모두 조회된다.

-- 방법1
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1  RIGHT  OUTER JOIN   테이블명2..
ON 테이블명1.속성명 = 테이블명2.속성명
 
-- 방법2
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명(+) = 테이블명2.속성명

3) FULL OUTER JOIN

조인 수행 시 왼쪽, 오른쪽 테이블의 모든 값을 읽어 JOIN을 수행한다. LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일하다.

SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1  FULL  OUTER JOIN   테이블명2..
ON 테이블명1.속성명 = 테이블명2.속성명