SQL

[SQL] JOIN + USING

bornsoon 2024. 10. 1. 09:36

NATURAL JOIN은 

두 재료 집합에서 이름이 같고 데이터 형이 호환되는 컬럼끼리 조인해주는데
조인 결과 집합에 조인 컬럼은 한 번만 나타나고
ON절을 사용하지 않아서 조인 조건이 없어 편하지만,
조인 컬럼과 조인 조건을 제어할 수 없기 때문에호환되는 컬럼이 두 개 이상이거나 할 때
원하지 않은 조인 결과가 나올 수 있다.
 

이 때 JOIN ~ USING(컬럼1, 컬럼2)를 유용하게 쓰면 좋다.

JOIN ~ USING은 NATURAL 조인을 하되, 필요한 컬럼만 지정하고자 할 때 사용한다.
괄호 안의 두 재료 집합에 공통인 컬럼을 써주면 된다.
이때 주의할 점은 JOIN 컬럼에 대해서는 별칭이나 테이블 이름과 같은 접두사를 붙이면 syntax 에러가 발생한다. 따라서 기준이 되는 JOIN 컬럼은 컬럼명만을 명시해주어야 한다.
NATURAL JOIN에서도 조인이 되는 기준 컬럼명을  WHERE 절에서 쓸 때는 위와 같이 컬럼명만을 명시하여야 한다.
조인 결과는 NATURAL JOIN과 동일하게 조인 컬럼은 조인 결과 집합에 한 번만 나타난다.
 

SELECT department_id, e.last_name, e.job_id, e.salary
-- 공통컬럼 d.department_id 하면 에러 발생
FROM employees e
JOIN departments d
USING (department_id, manager_id);
-- USING (d.department_id, manager_id) 하면 에러 발생!!

-- 위와 동일한 조인이지만 컬럼이 중복되서 나타남
SELECT department_name, last_name, job_id, salary
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
AND e.manager_id = d.manager_id;


SELECT department_id, e.last_name, e.job_id, e.salary
-- USING 조건절과 똑같이 d.deprtment_id 하면 에러 발생
FROM employees e
NATURAL JOIN departments d
WHERE e.job = 'SALESMAN'
AND department_id = 10;
-- d.department_id = 10 이면 에러 발생!!

 
 

728x90