01. 표준 조인
- ANSI 표준: INNER JOIN, CROSS JOIN, NATURAL JOIN, OUTER JOIN
02. INNER JOIN
- 내부 조인: 조인 조건이 일치하는 행만 추출
- ORACLE의 기본 조인
- ANSI 표준: FROM절에 [ INNER JOIN | JOIN ]을 명시
- ANSI 표준: USING이나 ON절을 필수적으로 사용
03. ON 절
- 조인할 양 컬럼의 컬럼명이 서로 다르더라도 사용 가능
- ON 조건의 괄호는 옵션 (생략 가능)
- 컬럼명이 같을 경우: 테이블 이름이나 별칭을 사용하여 명확하게 지정 (테이블 출처 명확히)
- ON 조건절에서 조인 조건 명시, WHERE 절에서는 일반 조건 명시 (WHERE절과 ON절을 쓰임에 따라 명확히 구분)
- 문법
SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1 INNER JOIN 테이블2
ON 테이블1.조인컬럼 = 테이블2.조인컬럼; --ANSI 표준 INNER JOIN의 ON절
SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1, 테이블2
WHERE 테이블1.조인컬럼 = 테이블2.조인컬럼; --ORACLE INNER JOIN
04. USING 조건절
- 조인할 컬럼명이 같을 경우 사용
- Alias나 테이블 이름(접두사) 붙이기 불가능
- 괄호 필수
- 문법
SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1 INNER JOIN 테이블2
USING (동일컬럼명); --ANSI 표준 INNER JOIN의 USING절
05. NATURAL JOIN
- 두 테이블 간의 동일한 이름을 가지는 모든 컬럼들에 대해 EQUI JOIN을 수행
- USING, ON, WHERE 절에서 조건 정의 불가
- JOIN에 사용된 컬럼들은 데이터 유형이 같아야 함, 접두사 사용 불가
- 문법
SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1 NATURAL JOIN 테이블2; --ANSI 표준 NATURAL JOIN, 동일한 이름을 갖는 모든 컬럼을 (=) EQUI JOIN 실행
06. CROSS JOIN
- 테이블간 JOIN 조건이 없는 경우: 생성 가능한 모든 데이터들의 조합
- Catesian product (카타시안 곱) 발생
- 양쪽 테이블 행의 수를 곱한 데이터의 조합 발생 (m * n)
- 문법
SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1 CROSS JOIN 테이블2; --ANSI 표준 CROSS JOIN
SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1 CROSS JOIN 테이블2; --ORACLE CROSS JOIN
07. OUTER JOIN
- INNER JOIN과 대비
- JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용
- 두 테이블 중 한쪽에 NULL을 가지면 EQUI JOIN시 출력되지 않음 → 이를 출력 시 OUTER JOIN 사용
- 테이블 기준 방향에 따라 [ LEFT OUTER JOIN | RIGHT OUTER JOIN | FULL OUTER JOIN ] 으로 구분
- OUTER 생략 가능
08. OUTER JOIN 종류
- LEFT OUTER JOIN
- 왼쪽 테이블이 기준
- 오른쪽 테이블의 데이터를 가져와 채움
- 우측 값에서 같은 값이 없는 경우 → NULL값으로 출력
SELECT *
FROM 테이블1 LEFT OUTER JOIN 테이블2
ON 테이블1.조인컬럼 = 테이블2.조인컬럼; --ANSI 표준 LEFT OUTER JOIN
SELECT *
FROM 테이블1, 테이블2
WHERE 테이블1.조인컬럼 = 테이블2.조인컬럼(+); --ORACLE LEFT JOIN, 기준이 되는 테이블의 반대 테이블에 (+) 기호 사용
- RIGHT OUTER JOIN
- 오른쪽 테이블이 기준
- 왼쪽 테이블의 데이터를 가져와 채움
- 좌측 값에서 같은 값이 없는 경우 → NULL값으로 출력
- FROM 절에 테이블 순서를 변경하면 LEFT OUTER JOIN으로 수행 가능
SELECT *
FROM 테이블1 RIGHT OUTER JOIN 테이블2
ON 테이블1.조인컬럼 = 테이블2.조인컬럼; --ANSI 표준 RIGHT OUTER JOIN
SELECT *
FROM 테이블2 LEFT OUTER JOIN 테이블1
ON 테이블1.조인컬럼 = 테이블2.조인컬럼; --테이블의 위치를 바꿔주면 LEFT OUTER JOIN
SELECT *
FROM 테이블1, 테이블2
WHERE 테이블1.조인컬럼(+) = 테이블2.조인컬럼; --ORACLE RIGHT OUTER JOIN
- FULL OUTER JOIN
- 두 테이블 전체 기준으로 결과를 생성
- 중복 데이터는 삭제 후 리턴
- LEFT OUTER JOIN [ UNION ] RIGHT OUTER JOIN 결과
- ORACLE 표준에서는 존재하지 X → UNION 사용해야 함
SELECT *
FROM 테이블1 FULL OUTER JOIN 테이블2
ON 테이블1.조인컬럼 = 테이블2.조인컬럼; --ANSI 표준 FULL OUTER JOIN
SELECT *
FROM 테이블1, 테이블2
WHERE 테이블1.조인컬럼 = 테이블2.조인컬럼(+)
UNION
SELECT *
FROM 테이블1, 테이블2
WHERE 테이브1.조인컬럼(+) = 테이블2.조인컬럼; --ORACLE FULL OUTER JOIN, UNION 이용
'SQL' 카테고리의 다른 글
[SQL] 집합 연산자 (0) | 2025.02.17 |
---|---|
[SQL] 서브쿼리 (0) | 2025.02.17 |
[SQL] JOIN (1) (0) | 2025.02.14 |
[SQL] ORDER BY 절 (0) | 2025.02.14 |
[SQL] GROUP BY 절, HAVING 절 (0) | 2025.02.14 |