study/Oracle

4_oracle_JOIN

스파이크12 2019. 11. 19. 08:56

JOIN

용어정리

오라클 SQL:1999 표준(ANSI)
등가조인

내부조인(INNER JOIN)

JOIN USING/ON

+자연조인 (NATURAL JOIN, 등가조인방법중하나)

포괄조인

왼쪽 외부 조인(LEFT OUTER JOIN)

오른쪽 외부 조인(RIGHT OUTER JOIN)

전체 외부 조인(FULL OUTER JOIN)

--> 오라클구문으로 사용못함

비등가 조인

자체 조인

JOIN ON

CARTESIAN PRODUCT

(카티션 곱)

교차조인(CROSS JOIN)

JOIN

- 하나 이상의 테이블에서 데이터를 조회하기 위해 사용하는 구문

- 수행 결과는 하나의 RESULT SET으로 나옴

- 관계형 데이터베이스에서 SQL을 이용한 테이블간의 '관계'를 맺는 방법

- 관계형 데이터베이스(RDBMS)는 최소한 데이터를 테이블에 담고 있어 원하는

정보를 테이블에서 조회해야 할 경우 하나 이상의 테이블에서 데이터를 읽어봐야

하는 경우가 많음

이때 무작정 데이터를 읽어오는 것이 아닌, 테이블간의 연결고리로 관계가 맺어진

데이터를 추출해야함

--> 'JOIN'을 통해 이를 구현 가능

 

1. 내부조인(INNER JOIN, 오라클 등가 조인(EQUAL JOIN))

- 연결되는 컬럼의 값이 일치하는 행들만 조인됨

-(일치하는 값이 없는 행은 조인에서 제외됨)

*오라클 전용 구문

-FROM 절에 ','(콤마)로 구분하여 합칠 테이블명을 기술하고

WHERE절에 합치기에 사용될 컬럼명을 명시

*ANSI 표준구문

1) 연결에 사용할 컬럼명이 다를 경우

JOIN ON() 구문사용

2) 연결에 사용할 컬럼명이 같은경우

JOIN USING() 사용

2. 외부조인(OUTER JOIN)

- 두 테이블의 지정하는 컬럼값이 일치하지 않는 행도 조인결과에 포함시킴

--> 반드시 OUTER JOIN을 명시해야함

1. LEFT(OUTER) JOIN

- 합치기에 사용된 두 테이블 중 왼편에 기술된 테이블 컬럼수를 기준으로 JOIN 진행

*ANSI 표준

SELECT 컬럼명
FROM 테이블명
LEFT JOIN 조인할테이블명 ON (중복컬럼=중복컬럼);

*오라클 구문

SELECT 컬럼명
FROM 테이블명, 테이블명
WHERE 중복컬럼 = 중복컬럼(+);
왼쪽에 기술된 컬럼을 기준으로 컬럼값을 추가하겠다

2. RIGHT(OUTER) JOIN

- 합치기에 사용된 두 테이블 중

- 오른편에 기술된 테이블 컬럼수를 기준으로 JOIN

*ANSI 표준
SELECT 컬럼명
FROM 테이블명
RIGHT JOIN 조인할테이블명(기준) ON (중복컬럼=중복컬럼);

*오라클 구문
SELECT 컬럼명
FROM 테이블명,테이블명
WHERE 중복컬럼(+) = 중복컬럼;
오른쪽에 기술된 컬럼을 기준으로 컬럼값을 추가하겠다.

3. FULL[OUTER] JOIN

- 합치기에 사용한 두 테이블이 가진 모든행을 결과에 포함시키는 조인

*ANSI 표준
SELECT 컬럼명
FROM 테이블명
FULL OUTER JOIN 테이블명 ON (중복컬럼=중복컬럼);

*오라클 구문
- 오라클 전용 구문은 FULL OUTER JOIN 사용 못함

3. 교차 조인(CROSS JOIN, 오라클 CARTESIAN PRODUCT)

- 조인되는 테이블의 각 행들이 모두 매핑된 데이터가 조회됨(곱집합)

SELECT 컬럼명
FROM 테이블명
CROSS JOIN 테이블명

4. ★비등가 조인(NON EQUAL JOIN)

- '='(등호)를 사용하지 않는 조인

- 지정한 컬럼 값이 일치하는 경우가 아닌 값의 범위에 포함되는 행들을 연결하는 조인

SELECT 컬럼명
FROM 테이블명
JOIN 테이블명 ON (컬럼명 BETWEEN 컬럼명 AND 컬럼명);

5. 자체조인(SELF JOIN)

*ANSI 표준 구문
SELECT 별칭.테이블
FROM 테이블 별칭
LEFT JOIN 테이블 별칭 ON (별칭.테이블 = 별칭.테이블)

*오라클 전용구문
SELECT 별칭,테이블
FROM 테이블 별칭
WHERE 별칭.테이블 = 별칭.테이블

6. 자연조인(NATURAL JOIN)

- 동일한 타입과 이름을 가진 컬럼이 있는 테이블들 간의 조인시

- 조인 구문을 간단히 표현한 방법

-★ 반드시 두 테이블 간의 동일한 컬럼명, 타입을 가진 컬럼이 필요


SELECT 컬럼명
FROM 테이블명
NATURAL JOIN 테이블명

7. 다중조인

- N개의 테이블들을 조인하여 조회할 경우

- 조인 순서가 매우 중요함!!

*ANSI 표준
SELECT 컬럼명
FROM 테이블
JOIN 테이블 ON (컬럼 = 컬럼)
JOIN 테이블 ON (컬럼 = 컬럼)

- FROM 절에서 JOIN 발생시 위에서부터 차례대로 JOIN을 한번 실행할 때 마다

- RESULT SET이 새롭게 만들어짐 (RESULT SET을 테이블로 취급가능)

- NULL값을 포함하려면 각 JOIN할때마다 LEFT를 붙여야함

- 조인관계가 제대로 맺어지지 않은 상태로 없는 컬럼 접근 시 에러 발생

오라클 전용 구문
SELECT 컬럼명
FROM 테이블1, 테이블2, 테이블3
WHERE 테이블1컬럼 = 테이블2컬럼
AND 테이블1+테이블2(RESULT SET)의 컬럼 = 테이블3의 컬럼