Using
2개의 다른 테이블을 조인 할 때 2개의 테이블이 공통적으로 가지고 있는 컬럼을 조인조건으로 조인을 수행한다. 그런데 만약 이름과 타입이 모두 같지만 내용은 전혀 다른 컬럼이 존재한다면 어떻게 될까? 예를들어 dept 테이블과 emp 테이블에 동일하게 VACHAR2 타입을 갖는 name이라는 컬럼이 있다. 그러나 이 컬럼의 내용은 각각 부서이름과 직원이름으로 전혀 다른 내용을 가지고 있는 컬럼이다. 여기서 일반적인 조인조건을 하게 되면, 물론 원하는 결과를 얻을 수 없다. 이 때 정확한 조인을 위해 사용하는 것이 Using절이다.
SELECT 컬럼,...
FROM 테이블1
JOIN 테이블2 USING (조인_컬럼) JOIN 테이블3 USING (조인_컬럼)...
// Using절을 이용해 화학과 1학년 학생들의 유기화학 점수를 검색하라
SELECT sno 학번, sname 학생명, major 전공, syear 학년, cname 과목명, result 점수
FROM student JOIN score USING (sno) JOIN course USING (cno)
WHERE syear=1 AND cname='유기화학' AND major='화학';
ON
조인조건의 컬럼명이 서로 다르거나, 비등가조인일 경우에 많이 사용한다. WHERE절에 해당하는 일반 조건도 ON절에 넣을 수는 있지만 혼동을 방지하기 위해 원칙상 피하는 것이 좋다.
SELECT 테이블1.컬럼, ... 테이블2.컬럼...
FROM 테이블1 JOIN 테이블2 ON 조인_조건 JOIN 테이블3 ON 조인_조건
WHERE 검색_조건
// 지원업무를 담당하는 사원의 급여등급을 검색(ON절로 조인조건에 대한 조건을 명시함)
SELECT eno 사번, ename 이름, job 업무, sal 급여, grade 급여등급
FROM emp JOIN salgrade ON sal BETWEEN losal AND hisal WHERE job = '지원';
Using + ON
- 등가 조인: 일반 조건에 등호(=)를 사용하는 조인
- 비등가 조인: 일반 조건에 부등호(>,<, BETWEEN A AND B...)를 사용하는 조인
등가조인과 비등가조인이 모두 필요한 경우, 원칙을 정해서 사용하는 것이 좋다. (등가조인은 USING절, 비등가조인은 ON절)
//직원의 부서명과 급여등급을 검색한다
SELECT eno 사번, ename 사원명, dname 부서명, grade 급여등급
FROM emp e
JOIN dept d ON e.dno = d.dno
JOIN salgrade ON sal BETWEEN losal AND hisal;