조인의 기본(EQUI·NON-EQUI)
쉽게 말하면
조인은 두 표를 같은 값으로 이어 붙여 한 번에 보는 거예요. 사원 표에는 부서 번호만 있고 부서 이름은 부서 표에 있을 때, 부서 번호가 같은 줄끼리 이어 주면 사원 이름과 부서 이름을 함께 볼 수 있어요. 같은 값으로 이으면 등가 조인, '급여가 이 구간 안' 같은 범위로 이으면 비등가 조인이에요.
시험용 정의
조인(JOIN)은 두 개 이상의 테이블을 공통 값으로 연결해 한 결과로 보는 것이다. 조인 조건이 = 이면 EQUI 조인(등가 조인), BETWEEN·> 같은 다른 비교면 NON-EQUI 조인(비등가 조인)이다. 테이블 N개를 조인하려면 조인 조건이 최소 N-1개 필요하다.
비유로 이해하기
사원 명부에는 부서 '번호'만 있고, 부서 이름은 부서 명부에 있다. 두 명부를 부서 번호로 나란히 맞대어 읽는 것이 EQUI 조인이다. 급여를 보고 급여 등급표의 어느 구간에 드는지 찾는 것은 NON-EQUI 조인이다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 조인 조건 | 두 테이블의 행을 어떻게 짝지을지 정하는 조건. e.deptno = d.deptno |
| 테이블 별칭 | FROM emp e처럼 테이블에 붙인 짧은 이름. 열 앞에 e.ename으로 쓴다 |
| 카티션 곱 | 조인 조건 없이 모든 행끼리 짝지은 결과. 행 수 = 곱 |
| SALGRADE | 급여 등급표. GRADE(등급), LOSAL(하한), HISAL(상한). NON-EQUI 조인 연습용 |
EQUI vs NON-EQUI
| 구분 | 조건 | 예 |
|---|---|---|
| EQUI 조인 | = 로 같은 값끼리 연결. 대부분 PK = FK | WHERE e.deptno = d.deptno |
| NON-EQUI 조인 | = 가 아닌 비교 (BETWEEN, >, <=) | WHERE e.sal BETWEEN s.losal AND s.hisal |
알아 둘 규칙
- 두 테이블에 같은 이름의 열이 있으면 테이블 이름이나 별칭을 붙여야 한다. 안 붙이면 "열의 정의가 애매합니다"(ORA-00918) 오류
- FROM에서 별칭을 붙였다면 그 SQL 안에서는 별칭으로만 불러야 한다 (원래 이름 emp.ename은 오류)
- 테이블 3개를 조인하면 조인 조건이 최소 2개 필요하다
- 조인 조건과 일반 조건(
e.sal >= 5000)을 WHERE에 AND로 함께 쓸 수 있다 - 조인 값이 NULL인 행(부서 없는 OH)은 = 비교가 참이 될 수 없어 EQUI 조인 결과에서 빠진다
시험에 이렇게 나와요
- EQUI(=) vs NON-EQUI(BETWEEN 등) 조인 구분
- 조인 조건 누락 시 카티션 곱, 결과 행 수 계산
- N개 테이블 조인 → 최소 N-1개 조인 조건
- 같은 열 이름은 접두사 필요, 별칭을 주면 원래 테이블 이름 사용 불가
- 조인 값이 NULL인 행은 EQUI 조인 결과에서 빠짐
출제 범위·공식 안내 기반
확인 문제
Q1. EMP(12행)와 DEPT(4행)를 조인 조건 없이 FROM emp, dept로 조회하면 몇 행이 나올까요?
- 4
- 12
- 16
- 48
정답 보기
4번 48
조인 조건이 없으면 모든 행을 서로 짝짓는 카티션 곱이 된다. 12 × 4 = 48행. 조인 조건을 빠뜨리면 생기는 대표적인 실수다.
Q2. 테이블 4개를 조인할 때 필요한 최소 조인 조건 수는?
- 2
- 3
- 4
- 5
정답 보기
2번 3
3개다. N개 테이블을 빠짐없이 이으려면 최소 N-1개의 조인 조건이 필요하다. 조건이 모자라면 카티션 곱이 생긴다.
Q3. SALGRADE의 급여 구간으로 등급을 찾는 조인은?
- EQUI 조인
- CROSS 조인
- NON-EQUI 조인
- NATURAL 조인
정답 보기
3번 NON-EQUI 조인
= 가 아닌 BETWEEN으로 연결하므로 NON-EQUI 조인.
Q4. SELECT emp.ename FROM emp e WHERE e.sal > 3000의 결과는?
- 결과 없음
- 정상 실행
- 오류: 별칭을 붙였으면 원래 이름으로 부를 수 없다
- 카티션 곱
정답 보기
3번 오류: 별칭을 붙였으면 원래 이름으로 부를 수 없다
FROM에서 별칭 e를 붙였으면 SQL 안에서는 e로만 불러야 한다.
Q5. EMP 12행, DEPT 4행을 조인 조건 없이 FROM emp, dept로 조회하면 결과 행 수는?
- 4
- 12
- 16
- 48
정답 보기
4번 48
조건이 없으면 카티션 곱이라 12 × 4 = 48행이다.
Q6. EQUI 조인(e.deptno = d.deptno)에서 deptno가 NULL인 사원은?
- 결과에서 빠진다
- DEPT 첫 부서와 붙는다
- 오류가 난다
- 결과에 나온다
정답 보기
1번 결과에서 빠진다
NULL = 값은 참이 아니라 빠진다. 남기려면 OUTER JOIN.
헷갈리기 쉬운 O·X
EQUI 조인에서는 조인 열 값이 NULL인 행도 결과에 나온다.
정답 보기
X NULL = 값은 참이 될 수 없어 빠진다. 포함하려면 OUTER JOIN.
조인할 때 두 테이블의 조인 열 이름이 반드시 같아야 한다.
정답 보기
X 값만 비교하면 된다. 열 이름이 달라도 된다(e.mgr = m.empno).
두 테이블에 같은 이름의 열이 있는데 접두사 없이 쓰면 오류가 난다.
정답 보기
O ORA-00918 열의 정의가 애매합니다.