공통 데이터가 있는 경우만 조회
조인 조건에 일치하지 않으면 제외
Innser Join에서 ON 사용
- 조건: 두 테이블의 deptno 컬럼이 동일한 경우.
- ON을 사용하면 두 컬럼의 이름이 달라도 조건을 작성할 수 있습니다.
SELECT e.deptno, d.dname, e.empno, e.ename
FROM dept d
INNER JOIN emp e
ON d.deptno = e.deptno;
Inner Join에서 USING 사용
- 조건: 두 테이블에 동일한 이름의 deptno 컬럼이 존재해야 함.
- 결과에서 deptno는 한 번만 표시됩니다.
SELECT e.empno, e.ename, d.dname
FROM emp e
INNER JOIN dept d
USING (deptno);
한쪽 테이블에 없는 데이터도 포함
SELECT d.deptno, d.dname, e.empno, e.ename
FROM dept d
LEFT OUTER JOIN emp e
ON d.deptno = e.deptno;
SELECT e.deptno, e.ename, d.dname
FROM emp e
RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno;
SELECT d.deptno, d.dname, e.empno, e.ename
FROM dept d
LEFT OUTER JOIN emp e ON d.deptno = e.deptno
UNION
SELECT d.deptno, d.dname, e.empno, e.ename
FROM dept d
RIGHT OUTER JOIN emp e ON d.deptno = e.deptno;
조인 조건 없이 모든 경우의 수 반환(조인테이블1행수 * 조인테이블2행수).
SELECT *
FROM dept, emp;
동일 테이블에서 조인
SELECT e1.empno, e1.ename, e2.ename AS manager
FROM emp e1
LEFT JOIN emp e2
ON e1.mgr = e2.empno;
조인 조건이 =이 아닌 경우.
SELECT e.empno, e.ename, s.grade
FROM emp e
JOIN salgrade s
ON e.sal BETWEEN s.losal AND s.hisal;
| 상황 | ON 절 사용 | USING 절 사용 |
|---|---|---|
| 공통 컬럼 이름이 다른 경우 | ✅ 가능 (예: ON e.dept_id = d.department_id) | ❌ 사용할 수 없음 |
| 나조인 조건이 복잡한 경우 | ✅ 가능 (예: ON e.deptno = d.deptno AND e.job = 'Manager') | ❌ 단순 컬럼 비교만 가능 |
| 중복 컬럼 제거를 원하는 경우 | ❌ 중복 제거하려면 추가로 SELECT에서 처리해야 함 | 조인 조건 컬럼이 결과에 한 번만 나타남 |
| INNER JOIN, OUTER JOIN 사용 시 | ✅ 모든 조인에서 사용 가능 | ✅ INNER JOIN, OUTER JOIN에서만 사용 가능 |
| 컬럼 이름이 동일한 경우 | ✅ 가능 | ✅ 가능 (더 간결하게 작성 가능) |
SELECT deptno, dname
FROM dept
WHERE deptno NOT IN
(SELECT DISTINCT deptno FROM emp WHERE deptno IS NOT NULL);
SELECT e.empno, e.ename, e.deptno
FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno = d.deptno
WHERE d.deptno IS NULL;