ANSI 조인 문법
1999 ANSI 표준 조인 문법인 JOIN ... ON, JOIN ... USING, NATURAL JOIN의 사용법과 별칭 사용 제한
#핵심 요약
1999 ANSI 문법은 다섯 가지임
ON 절 조인, USING 절 조인, NATURAL 조인, LEFT/RIGHT/FULL OUTER 조인, CROSS 조인
FROM emp e JOIN dept d ON (e.deptno = d.deptno): 쉼표 대신 JOIN을 쓰고 조인 조건은 ON 절에 씀
다른 검색 조건은 WHERE에 둠
JOIN dept d USING (deptno): 같은 이름의 컬럼으로 잇음
컬럼을 괄호로 감싸고, USING 절의 컬럼 앞에 테이블 별칭을 쓰면 오류임
NATURAL JOIN: 같은 이름의 컬럼으로 자동으로 잇음
조인에 쓰인 컬럼(deptno)은 SELECT 절에서도 별칭이나 테이블명을 붙일 수 없음
#개념과 동작 원리
| 문법 | 조인 조건 위치 | 공통 컬럼 별칭 |
|---|---|---|
JOIN ... ON (조건) |
ON 절 |
붙여야 함(양쪽 컬럼을 구분) |
JOIN ... USING (컬럼) |
USING 절 |
붙이면 오류 |
NATURAL JOIN |
자동(같은 이름 컬럼) | 붙이면 오류 |
USING과 NATURAL에 사용한 공통 열은 테이블명, 별칭으로 한정하지 않음CROSS JOIN은 실습 목록에만 있고 예제가 없음
#주요 용어와 구성 요소
| 구문 | 의미 |
|---|---|
| 내부 조인 | 조인 조건을 만족하는 행 조합을 반환함 |
| 카티션 곱 | 두 입력의 가능한 행 조합 전체이며 조건이 누락된 조인에서도 발생할 수 있음 |
#필수 명령어 또는 SQL
| 항목 | 실행 조건 |
|---|---|
| 작업 대상 | emp, dept, salgrade의 행 조합과 공통 열 |
| 필요 권한 | 모든 입력 테이블에 대한 조회 권한이 있는 계정 |
| 바꿀 입력값 | 테이블, 별칭, 조인 열, 필터 조건 |
| 결과 해석 | CROSS JOIN의 실습 출력은 기재 없음 |
#ON 절
SELECT e.ename, e.job, e.sal, d.loc
FROM emp e JOIN dept d
ON (e.deptno = d.deptno);
SELECT e.ename, e.sal, d.loc
FROM emp e JOIN dept d
ON (e.deptno = d.deptno)
WHERE d.loc = 'DALLAS';
SELECT e.ename, e.sal, d.loc, s.grade
FROM emp e JOIN dept d
ON (e.deptno = d.deptno)
JOIN salgrade s
ON (e.sal BETWEEN s.losal AND s.hisal);결과 해석: 세 번째 문장은 테이블이 셋이라 연결 고리(ON 절)가 둘임
#USING 절
SELECT e.ename, e.job, e.sal, d.loc
FROM emp e JOIN dept d
USING (deptno);
SELECT e.ename, e.sal, d.loc
FROM emp e JOIN dept d
USING (deptno)
WHERE e.sal >= 3000;결과 해석: 개별 실행 출력은 기재 없음
#NATURAL JOIN
SELECT e.ename, d.loc, deptno
FROM emp e NATURAL JOIN dept d;결과 해석:
설명(SQLD, SQLP 기출): deptno에 e.나 d.를 붙이면 오류임
#구문과 옵션 설명
CROSS JOIN은 두 입력의 카티션 곱임
ON은 조인 조건을 명시하고 USING은 이름이 같은 열을 지정하며 NATURAL은 모든 동일 이름 열을 사용함
#사용 조건과 주의사항
NATURAL JOIN은 같은 이름의 컬럼을 모두 조인 조건으로 씀
두 테이블에 이름만 같고 뜻이 다른 컬럼이 있으면 동일 이름 열이 추가되면 조인 조건도 늘어날 수 있으므로 스키마 변경 때 확인해야 함
ON의 열 이름이 양쪽 테이블에서 겹치면 별칭으로 어느 쪽 열인지 구분함
조인 조건 누락은 대량의 행 조합을 만들 수 있으므로 출력 건수와 업무상 연결 조건을 함께 확인함