1. 핵심 원리
NATURAL JOIN은 두 테이블 간에 동일한 이름을 가진 열을 자동으로 찾아서 조인하는 SQL 구문입니다. 이 조인 방식은 조인 조건을 명시하지 않아도 동일한 이름의 열을 기준으로 조인 작업을 수행합니다.
2. 실무에서 쓰이는 이유
NATURAL JOIN은 간단한 조인 작업에서 사용하기 쉽지만, 동일한 이름을 가진 열이 여러 개 존재할 경우 의도하지 않은 조인이 발생할 수 있습니다. 따라서, 명확한 조인 조건을 사용하지 않아도 되는 간단한 상황에서 주로 사용됩니다.
3. 실무에서 구체적으로 사용되는 상황 예측
- 데이터베이스 스키마가 명확하게 정의되어 있고, 동일한 이름을 가진 열이 많지 않은 경우 NATURAL JOIN을 사용하여 코드를 간결하게 작성할 수 있습니다.
- 일시적인 데이터 분석 작업에서, 간단한 조인 작업을 빠르게 수행하고자 할 때 유용합니다.
- 비즈니스 로직이 명확하고 동일한 이름의 열이 의미적으로 일치하는 경우 사용됩니다.
4. 자주 사용되는 윈도우 표시 및 설명
NATURAL JOIN은 윈도우 함수와 직접적인 관련은 없지만, 조인된 결과에 윈도우 함수를 적용할 수 있습니다. 예를 들어, 조인된 테이블에서 특정 조건에 따른 순위를 구할 때 사용할 수 있습니다.
예시 SQL 코드:
SELECT e.ename, e.job, e.sal, d.loc,
RANK() OVER (PARTITION BY d.loc ORDER BY e.sal DESC) as rank
FROM emp e
NATURAL JOIN dept d
WHERE e.job = 'SALESMAN';
이 코드는 각 지역(d.loc
)별로 SALESMAN
의 급여 순위를 계산합니다.
5. 연습 문제
다음 SQL 쿼리를 작성하시오:
- 사원 테이블(
emp
)과 부서 테이블(dept
)을 NATURAL JOIN을 사용하여 조인하고, 각 사원의 이름(ename
), 직업(job
), 급여(sal
), 부서 위치(loc
)를 출력하시오. - 조건: 직업이 ‘MANAGER’인 사원만 출력하시오.
6. 연습 문제 해답 및 테이블 표시
SQL 쿼리:
SELECT e.ename as 이름, e.job as 직업, e.sal as 월급, d.loc as 부서 위치
FROM emp e
NATURAL JOIN dept d
WHERE e.job = 'MANAGER';
예상 결과 테이블:
이름 | 직업 | 월급 | 부서 위치 |
---|---|---|---|
KING | MANAGER | 5000 | NEW YORK |
BLAKE | MANAGER | 2850 | CHICAGO |
CLARK | MANAGER | 2450 | DALLAS |
7. 응용 문제
다음 조건에 맞는 SQL 쿼리를 작성하시오:
- 사원 테이블(
emp
)과 부서 테이블(dept
)을 NATURAL JOIN을 사용하여 조인하고, 각 사원의 이름, 직업, 급여, 부서 위치, 그리고 부서 번호를 출력하시오. - 부서 번호가 20인 사원만 출력하시오.
8. 응용 문제 해답 및 테이블 표시
SQL 쿼리:
SELECT e.ename as 이름, e.job as 직업, e.sal as 월급, d.loc as 부서 위치, d.deptno as 부서 번호
FROM emp e
NATURAL JOIN dept d
WHERE d.deptno = 20;
예상 결과 테이블:
이름 | 직업 | 월급 | 부서 위치 | 부서 번호 |
---|---|---|---|---|
SCOTT | ANALYST | 3000 | DALLAS | 20 |
FORD | ANALYST | 3000 | DALLAS | 20 |
JONES | MANAGER | 2975 | DALLAS | 20 |
9. 전자상거래 업계에서 쓰일 수 있는 경우 예측
- 고객 테이블과 주문 테이블을 NATURAL JOIN하여 특정 고객의 모든 주문 내역을 조회할 때 사용될 수 있습니다.
- 제품 테이블과 재고 테이블을 NATURAL JOIN하여 특정 제품의 재고 상태를 조회할 때 유용할 수 있습니다.
10. 전자상거래 업계에서 사용할 수 있는 경우 예상 상황 문제 2가지 및 그 경우에 대한 SQL 코드 작성
- 고객 테이블(
customers
)과 주문 테이블(orders
)을 NATURAL JOIN하여, ‘NEW YORK’에 거주하는 고객의 이름과 주문 날짜를 출력하시오.
SQL 코드:
SELECT c.cust_name, o.order_date
FROM customers c
NATURAL JOIN orders o
WHERE c.city = 'NEW YORK';
- 제품 테이블(
products
)과 재고 테이블(inventory
)을 NATURAL JOIN하여, 재고가 10개 미만인 제품의 이름과 재고 수량을 출력하시오.
SQL 코드:
SELECT p.product_name, i.quantity
FROM products p
NATURAL JOIN inventory i
WHERE i.quantity < 10;
11. 10번에 대한 SQL 코드를 시각적으로 이해하기 쉽도록 테이블 예시 작성
(1) 고객 테이블과 주문 테이블의 결과:
고객 이름 | 주문 날짜 |
---|---|
JOHN DOE | 2024-08-15 |
JANE SMITH | 2024-08-16 |
(2) 제품 테이블과 재고 테이블의 결과:
제품 이름 | 재고 수량 |
---|---|
스마트폰 | 8 |
태블릿 | 5 |