1. 핵심 원리
이 장에서는 SQL의 USING
절을 사용하여 두 테이블 간에 공통된 컬럼을 기준으로 데이터를 조인하는 방법에 대해 다룹니다. USING
절은 두 테이블에서 동일한 이름을 가진 컬럼을 이용해 조인을 수행할 때 유용합니다. 이 절은 WHERE 절에서 조인 조건을 작성하는 것과 달리 간결하게 조인 조건을 작성할 수 있게 해줍니다.
2. 실무에서 쓰이는 이유
실무에서 USING
절은 SQL 쿼리를 더욱 간결하고 명확하게 작성하는 데 사용됩니다. 특히 여러 테이블 간에 동일한 이름을 가진 컬럼이 있을 때 USING
절을 사용하면 코드의 가독성이 향상됩니다. 또한, 이 절은 ANSI SQL 표준을 따르므로 이식성과 호환성이 좋습니다.
3. 실무에서 구체적으로 사용되는 상황 예측
- 상황 1: 데이터베이스에서 직원 정보와 부서 정보를 조인해야 하는 경우, 직원 테이블(emp)과 부서 테이블(dept) 간에 공통된 컬럼인
deptno
를 기준으로 조인할 수 있습니다. - 상황 2: 매출 테이블과 상품 테이블을 조인하여 특정 상품의 매출 데이터를 조회할 때, 공통된
product_id
를 이용하여 조인을 수행할 수 있습니다. - 상황 3: 대형 프로젝트에서 여러 하위 시스템의 로그 데이터를 분석할 때, 동일한 사용자 ID를 기준으로 로그 테이블과 사용자 정보 테이블을 조인하여 특정 사용자의 활동을 분석할 수 있습니다.
4. 자주 사용되는 윈도우 표시 및 설명
1) USING 절을 이용한 간단한 조인:
- 공통된 컬럼을 이용하여 두 테이블 간의 데이터를 조인할 때 사용됩니다.
SELECT e.ename, d.loc
FROM emp e JOIN dept d
USING (deptno);
2) USING 절과 WHERE 절을 조합한 필터링 조인:
USING
절을 통해 조인을 수행하고WHERE
절을 통해 필터링 조건을 추가합니다.
SELECT e.ename, d.loc
FROM emp e JOIN dept d
USING (deptno)
WHERE e.job = 'SALES';
3) USING 절을 활용한 다중 테이블 조인:
USING
절을 사용하여 여러 테이블을 조인할 수 있습니다. 예를 들어, 세 개 이상의 테이블을 조인할 때 동일한 컬럼을 이용해 연속적으로 조인을 수행할 수 있습니다.
SELECT e.ename, d.loc, s.grade
FROM emp e
JOIN dept d USING (deptno)
JOIN salgrade s ON (e.sal BETWEEN s.losal AND s.hisal);
4) ANSI SQL 표준 조인:
- ANSI SQL 표준에 따라
USING
절을 사용하여 여러 테이블을 조인할 수 있습니다. 이는 데이터베이스 시스템 간의 호환성을 유지하는 데 유리합니다.
SELECT e.ename, d.loc, s.grade
FROM emp e
JOIN dept d USING (deptno)
JOIN salgrade s USING (sal);
5. 연습 문제
연습 문제: emp
테이블과 dept
테이블을 deptno
를 기준으로 조인하여 SALES
직무를 가진 직원들의 이름과 부서 위치를 조회하는 SQL 쿼리를 작성하세요.
6. 연습 문제 해답 및 테이블 표시
SELECT e.ename AS 이름, d.loc AS 부서위치
FROM emp e
JOIN dept d USING (deptno)
WHERE e.job = 'SALES';
출력 테이블:
이름 | 부서위치 |
---|---|
MARTIN | CHICAGO |
ALLEN | CHICAGO |
TURNER | CHICAGO |
WARD | CHICAGO |
7. 응용 문제
응용 문제: emp
테이블과 dept
테이블을 조인하여 각 부서의 위치와 그 부서에 속한 직원의 이름, 직무, 급여를 조회하는 SQL 쿼리를 작성하세요.
8. 응용 문제 해답 및 테이블 표시
SELECT e.ename AS 이름, e.job AS 직업, e.sal AS 급여, d.loc AS 부서위치
FROM emp e
JOIN dept d USING (deptno);
출력 테이블:
이름 | 직업 | 급여 | 부서위치 |
---|---|---|---|
KING | PRESIDENT | 5000 | NEW YORK |
BLAKE | MANAGER | 2850 | CHICAGO |
CLARK | MANAGER | 2450 | NEW YORK |
JONES | MANAGER | 2975 | DALLAS |
9. 전자상거래 업계에서 쓰일 수 있는 경우 예측
전자상거래 시스템에서 주문 테이블과 제품 테이블을 조인하여 특정 제품의 판매 내역을 조회할 때 유용하게 사용될 수 있습니다. 또한, 고객 테이블과 주문 테이블을 조인하여 특정 고객의 주문 내역을 확인할 때도 사용될 수 있습니다.
10. 전자상거래 업계에서 사용할 수 있는 경우 예상 상황 문제 2가지 및 그 경우에 대한 SQL 코드 작성
상황 1: 특정 제품의 최근 1개월간 판매 내역을 조회하려고 합니다. 주문 테이블(orders
)과 제품 테이블(products
)을 조인하여 제품 ID를 기준으로 특정 제품의 판매 내역을 조회하는 SQL 쿼리를 작성하세요.
SELECT p.product_name, o.order_date, o.quantity
FROM orders o
JOIN products p USING (product_id)
WHERE p.product_id = 'P12345' AND o.order_date >= ADD_MONTHS(SYSDATE, -1);
상황 2: 특정 고객이 주문한 모든 제품의 상세 정보를 조회하려고 합니다. 고객 테이블(customers
), 주문 테이블(orders
), 그리고 제품 테이블(products
)을 조인하여 고객 ID를 기준으로 해당 고객이 주문한 제품 내역을 조회하는 SQL 쿼리를 작성하세요.
SELECT c.customer_name, p.product_name, o.order_date, o.quantity
FROM customers c
JOIN orders o USING (customer_id)
JOIN products p USING (product_id)
WHERE c.customer_id = 'C67890';
11. SQL 코드를 시각적으로 이해하기 쉽도록 테이블 예시 작성
상황 1 테이블:
product_name | order_date | quantity |
---|---|---|
Product A | 2024-07-01 | 10 |
Product A | 2024-07-05 | 5 |
Product A | 2024-07-10 | 20 |
상황 2 테이블:
customer_name | product_name | order_date | quantity |
---|---|---|---|
John Doe | Product B | 2024-07-12 | 2 |
John Doe | Product C | 2024-07-15 | 3 |
John Doe | Product A | 2024-07-20 | 1 |