4_oracle_JOIN
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의 컬럼