표준 조인(INNER·NATURAL·USING·ON·CROSS)
쉽게 말하면
표준 조인은 표를 잇는 조건을 FROM 쪽에 따로 적는 방식이에요. 'A 표와 B 표를 이 조건으로 이어라(JOIN … ON)'와 '그중에서 이런 줄만 골라라(WHERE)'가 나뉘어 읽기 쉬워요. 이름이 같은 칸으로 알아서 잇는 NATURAL JOIN, 모든 짝을 다 만드는 CROSS JOIN도 있어요.
시험용 정의
ANSI 표준 조인은 조인 조건을 WHERE가 아니라 FROM 절에 쓴다. INNER JOIN … ON 조건(가장 기본), USING (열)(같은 이름 열로 EQUI 조인), NATURAL JOIN(이름이 같은 모든 열로 자동 EQUI 조인), CROSS JOIN(카티션 곱)이 있다. 조인 조건과 일반 조건이 분리되어 읽기 쉽다.
비유로 이해하기
WHERE에 조인 조건을 섞어 쓰는 방식이 장보기 목록에 '두부, 대파, 그리고 정육점과 채소가게를 같은 날 들를 것'을 섞어 쓴 것이라면, 표준 조인은 '어디와 어디를 잇는지(FROM … JOIN … ON)'와 '무엇을 고를지(WHERE)'를 따로 적은 목록이다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| ANSI 표준 | 미국 표준 협회가 정한 SQL 표준. DBMS가 달라도 같은 문법으로 동작하게 한다 |
| INNER | 조건에 맞는 짝이 있는 행만 남기는 조인. 생략하고 JOIN만 써도 INNER |
| 공통 열 | 두 테이블에 이름이 같은 열(DEPTNO) |
표준 조인 종류
| 문법 | 조인 조건 | 주의 |
|---|---|---|
| a [INNER] JOIN b ON 조건 | ON에 자유롭게 (=, BETWEEN 모두) | 가장 유연하다. 열 이름이 달라도 된다 |
| a JOIN b USING (열) | 괄호 안 열 이름으로 = 조인 | 그 열에 접두사 금지. 결과에 한 번만 나온다 |
| a NATURAL JOIN b | 이름이 같은 모든 열로 = 조인 | 공통 열에 접두사 금지, ON·USING과 함께 못 씀. 자료형이 같아야 한다 |
| a CROSS JOIN b | 없음 (카티션 곱) | 행 수 = 곱 |
SELECT *의 열 순서
USING이나 NATURAL JOIN에서 SELECT *를 하면 공통 열이 맨 앞에 한 번만 나오고, 그 뒤에 첫 테이블의 나머지 열, 두 번째 테이블의 나머지 열이 온다. ON을 쓴 INNER JOIN은 두 테이블의 모든 열이 그대로 나와 DEPTNO가 두 번 보인다.
ON 절과 WHERE 절
INNER JOIN에서는 조건을 ON에 쓰든 WHERE에 쓰든 결과가 같다. 하지만 OUTER JOIN에서는 ON의 조건(짝을 찾는 조건)과 WHERE의 조건(다 만든 결과를 거르는 조건)이 결과를 다르게 만든다. 다음 개념에서 본다.
시험에 이렇게 나와요
- USING·NATURAL JOIN 공통 열에 접두사를 쓰면 오류
- NATURAL JOIN은 이름이 같은 모든 열로 조인, ON·USING과 같이 못 씀
- SELECT * 결과 열 순서와 개수 (공통 열 한 번)
- WHERE 방식 조인 ↔ 표준 조인 같은 결과 고르기
- CROSS JOIN 결과 행 수
출제 범위·공식 안내 기반
확인 문제
Q1. SELECT d.deptno, e.ename FROM emp e JOIN dept d USING (deptno)을 Oracle에서 실행하면?
- 정상 실행
- 오류: USING에 쓴 열에는 테이블 별칭을 붙일 수 없다
- OUTER JOIN 결과
- 카티션 곱
정답 보기
2번 오류: USING에 쓴 열에는 테이블 별칭을 붙일 수 없다
USING과 NATURAL JOIN의 공통 열은 하나로 합쳐지므로 접두사(별칭)를 붙이면 오류(ORA-25154)다. 그냥 deptno로 쓴다.
Q2. EMP(8열)와 DEPT(3열)를 NATURAL JOIN으로 SELECT * 하면 열은 몇 개인가? (공통 열은 DEPTNO 하나)
- 8
- 9
- 10
- 11
정답 보기
3번 10
공통 열 DEPTNO가 한 번만 나와 8 + 3 - 1 = 10.
Q3. NATURAL JOIN에 대한 설명으로 틀린 것은?
- ON 절과 함께 쓸 수 있다
- 공통 열은 결과에 한 번만 나온다
- 이름이 같은 모든 열로 EQUI 조인한다
- 공통 열에 테이블 별칭을 붙일 수 없다
정답 보기
1번 ON 절과 함께 쓸 수 있다
NATURAL JOIN은 조건을 자동으로 정하므로 ON·USING을 함께 쓸 수 없다.
Q4. FROM emp e, dept d WHERE e.deptno = d.deptno와 결과가 같은 것은?
- FROM emp e FULL JOIN dept d ON e.deptno = d.deptno
- FROM emp e JOIN dept d ON e.deptno = d.deptno
- FROM emp e CROSS JOIN dept d
- FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno
정답 보기
2번 FROM emp e JOIN dept d ON e.deptno = d.deptno
INNER JOIN … ON과 같다.
Q5. EMP 12행과 DEPT 4행을 CROSS JOIN 하면 결과 행 수는?
- 4
- 12
- 16
- 48
정답 보기
4번 48
48행이다. CROSS JOIN은 모든 조합을 만드는 카티션 곱이라 12 × 4다.
Q6. FROM emp JOIN dept USING (deptno) 에서 SELECT emp.deptno 라고 쓰면?
- DEPT의 값이 나온다
- 오류가 난다
- NULL이 나온다
- 정상 실행된다
정답 보기
2번 오류가 난다
USING의 공통 열에는 테이블 접두사를 붙일 수 없다.
헷갈리기 쉬운 O·X
JOIN 키워드만 쓰고 INNER를 생략하면 OUTER JOIN이 된다.
정답 보기
X JOIN만 쓰면 INNER JOIN이다.
USING 절의 열은 SELECT 결과에 한 번만 나온다.
정답 보기
O 공통 열이 하나로 합쳐진다.
ON 절에는 = 조건만 쓸 수 있다.
정답 보기
X BETWEEN 같은 NON-EQUI 조건도 쓸 수 있다.