표준 조인
- ANSI 표준으로 작성되는 INNER JOIN, CROSS JOIN, NATURAL JOIN, OUTER JOIN을 말함
INNER JOIN
- 내부 조인, 조인 조건이 일치하는 행만 추출 (ORACLE 조인 기본)
- ANSI 표준의 경우 FROM 절에 INNER JOIN 혹은 줄여서 JOIN 명시
- , 으로 연결만 X
- ANSI 표준의 경우 USING이나 ON 조건절을 필수적으로 사용
ON 절
- 조인할 양 컬럼의 컬럼명이 서로 다르더라도 사용 가능
- ON 조건의 괄호는 옵션 (생략 가능)
- 컬럼명이 같을 경우 테이블 이름이나 ALIAS를 사용하여 명확하게 지정 (테이블 출처 명확히)
- ON 조건절에서 조인 조건 명시, WHERE 절에서는 일반 조건 명시
** 문법
예) EMP 테이블과 DEPT 테이블을 사용하여 각 직원의 이름과 부서명을 함께 출력 (EQUI JOIN)
- ORACLE 표준은 FROM 절에 테이블을 컴마로 구분, WHERE 절에 조인 조건 나열
- ORACLE은 INNER JOIN이 기본 조인 연산이므로 별도의 문법 존재 X
USING 조건절
- 조인할 컬럼명이 같은 경우 사용
- ALIAS나 테이블 이름 같은 접두사 붙이기 불가
- 괄호 필수
** 문법
예) USING 절을 이용한 사원 이름과 부서 이름 조회
NATURAL JOIN
- 두 테이블 간의 동일한 이름을 가지는 모든 컬럼들에 대해 EQUI JOIN을 수행
- USING, ON, WHERE 절에서 조건 정의 불가
- JOIN에 사용된 컬럼들은 데이터 유형이 동일해야 함, 접두사 사용 불가
- 이름이 동일한 컬럼이 여러 개일 때, 모든 컬럼이 일치하는 것들만 조회됨
** 문법
예1) NATURAL 조인을 이용한 사원 이름, 부서명 출력
예2) NATURAL JOIN 시 주의점
- NATURAL JOIN은 동일한 이름의 모든 컬럼을 조인 컬럼으로 사용 → 조인 컬럼의 값이 모두 같을 때만 결과가 리턴됨
- STUDENT와 PROFESSOR 테이블의 NAME 컬럼과 PROFNO 컬럼 컬럼명이 서로 동일
- STUDENT NAME과 PROFESSOR NAME이 같고, STUDENT의 PROFNO과 PROFESSOR의 PROFNO가 같은 경우 존재하지 않아 아무 것도 조회되지 않음
CROSS JOIN
- 테이블 간 JOIN 조건이 없는 경우 생성 가능한 모든 데이터들의 조합
- 카타시안 곱 출력
- 양쪽 테이블 행의 수를 곱한 수 만큼의 데이터 조합 발생 (m, n → m*n)
** 문법
예) CROSS 조인
- 일부만 표시, 실제로는 EMP 14건, DEPT 4건 → 총 56건 출력됨
OUTER JOIN
- INNER JOIN과 대비되는 조인 방식
- JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용
- 두 테이블 중 한쪽에 NULL을 가지면 EQUI JOIN 시 출력되지 않음 → 이를 출력 시 OUTER JOIN 사용
- 테이블 기준 방향에 따라 LEFT, RIGHT, FULL OUTER JOIN으로 구분
- OUTER 생략 가능
OUTER JOIN 종류
- LEFT OUTER JOIN
- FROM 절에 나열된 왼쪽 테이블에 해당하는 데이터를 읽은 후, 우측 테이블에서 JOIN 대상 읽어옴
- 왼쪽 테이블이 기준이 되어 오른쪽 테이블 데이터를 채우는 방식
- 우측 값에서 같은 값이 없는 경우 NULL 값으로 출력
- RIGHT OUTER JOIN
- LEFT OUTER JOIN의 반대
- 오른쪽 테이블 기준으로 왼쪽 테이블 데이터를 채우는 방식
- FROM 절에 테이블 순서를 변경하면 LEFT OUTER JOIN으로 수행 가능
- FULL OUTER JOIN
- 두 테이블 전체 기준으로 결과를 생성하여 중복 데이터는 삭제 후 리턴
- LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN 결과의 UNION 연산 결과와 동일
- ORACLE 표준에는 없음 → LEFT JOIN UNION RIGHT JOIN으로 수행해야 함
예1) LEFT OUTER JOIN - STUDENT 테이블과 PROFESSOR 테이블 조인하여 1, 4학년 학생들의 이름, 학년, 지도교수이름 출력
- 지도교수가 없는 학생 정보 출력 시 OUTER JOIN 수행
- 기준이 되는 데이터 (생략되지 않았으면 하는 쪽)은 STUDENT 테이블이므로 LEFT OUTER JOIN 수행
ORACLE 표준)
- ORACLE 표준에서는 WHERE 절에 조인 조건을 작성하므로 LEFT OUTER JOIN을 기술하지 않고 , 로 연결
- WHERE 절에서 기준이 되는 테이블 반대 테이블 조건 컬럼 뒤에 (+)를 붙임
ANSI 표준)
- ANSI 표준에서는 조인의 종류를 FROM 절에 명시 (테이블과 테이블 사이)
- 조인 조건을 바로 뒤 ON 절에 나열
- WHERE 절은 ON 절 밑 (순서 중요 JOIN 종류 → ON → WHERE )
예2) FULL OUTER JOIN - ANSI 표준
- LEFT OUTER JOIN에서도, RIGHT OUTER JOIN에서도 출력되는 정보 가장 먼저 출력, 다음 LEFT OUTER JOIN 결과, RIGHT OUTER JOIN 결과
- 중복 데이터는 한 번만 출력
- (+) 기호를 양방향 전달 시 에러 발생
- 성능적으로 좋지 않기 때문에 사용 시 주의 필요!
ORACLE 문법)
- LEFT OUTER JOIN과 RIGHT OUTER JOIN 수행하여 UNION → 중복 결과 제거됨
'sqld' 카테고리의 다른 글
2-10) 집합 연산자 (0) | 2024.08.21 |
---|---|
2-9) 서브쿼리 (0) | 2024.08.21 |
2-7) 조인 (0) | 2024.08.21 |
2-6) ORDER BY 절 (0) | 2024.08.21 |
2-5) GROUP BY 절과 HAVING 절 (0) | 2024.08.21 |