이제 Non-Equi Join에 대해 설명드리겠습니다.
1. 핵심 원리
Non-Equi Join은 조인 조건이 등호(=)가 아닌 비교 연산자(BETWEEN
, <
, >
, <=
, >=
, <>
)를 사용하는 조인 방식입니다. 이 조인 방식은 서로 다른 테이블에서 연관된 데이터를 조회할 때 주로 사용되며, 두 테이블 간의 정확한 일치가 아닌 범위 매칭을 해야 할 때 유용합니다.
2. 실무에서 쓰이는 이유
실무에서 Non-Equi Join은 다음과 같은 이유로 사용됩니다:
- 범위 기반 데이터 매칭: 특정 조건에 따라 데이터를 범위 내에서 매칭할 때 유용합니다. 예를 들어, 급여 범위에 따른 등급 매칭, 날짜 범위에 따른 이벤트 매칭 등에 사용됩니다.
- 복잡한 데이터 분석: 두 테이블의 값을 정확하게 일치시키기보다는, 범위나 기타 비교 조건에 맞는 데이터를 연결하여 분석할 때 필요합니다.
3. 실무에서 구체적으로 사용되는 상황
Non-Equi Join은 다음과 같은 상황에서 자주 사용됩니다:
- 급여 등급 매칭: 직원의 급여를 기준으로 급여 등급 테이블과 매칭하여 직원의 등급을 조회할 때.
- 이벤트 기간 매칭: 특정 이벤트가 진행 중인 기간 내의 기록을 조회할 때.
예상 상황 예측:
- 예시 1: 직원 테이블과 급여 등급 테이블을 조인하여 각 직원의 급여 등급을 조회.
- 예시 2: 주문 테이블과 프로모션 테이블을 조인하여 주문 시점에 적용된 프로모션을 확인.
4. 자주 사용되는 윈도우 방식 및 설명
Non-Equi Join에서는 WHERE
절에서 비교 연산자를 사용하여 조인 조건을 지정합니다. 이는 EQUI JOIN
과는 다르게 정확히 일치하지 않는 값을 매칭하는 데 유용합니다.
- BETWEEN
- 설명: 주어진 범위 내의 값을 매칭하여 조인합니다.
- 사용 예시:
sql
SELECT e.ename, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
- <, >, <=, >=
- 설명: 특정 값보다 작거나 큰 값을 기준으로 조인합니다.
- 사용 예시:
sql SELECT e.ename, e.sal, s.grade FROM emp e, salgrade s WHERE e.sal >= s.losal AND e.sal <= s.hisal;
5. 연습 문제
문제 1:
orders
테이블과 discounts
테이블을 조인하여 각 주문에 적용된 할인율을 조회하는 SQL 쿼리를 작성하시오.
orders
테이블 열:order_id
,order_amount
discounts
테이블 열:min_amount
,max_amount
,discount_rate
문제 2:
employees
테이블과 salary_ranges
테이블을 조인하여 각 직원의 급여 범위를 조회하는 SQL 쿼리를 작성하시오.
employees
테이블 열:employee_id
,salary
salary_ranges
테이블 열:low_salary
,high_salary
,salary_grade
6. 연습 문제 해답
해답 1:
SELECT o.order_id, o.order_amount, d.discount_rate
FROM orders o, discounts d
WHERE o.order_amount BETWEEN d.min_amount AND d.max_amount;
해답 2:
SELECT e.employee_id, e.salary, s.salary_grade
FROM employees e, salary_ranges s
WHERE e.salary BETWEEN s.low_salary AND s.high_salary;
7. 응용 문제
문제 1:
products
테이블과 price_ranges
테이블을 조인하여 각 제품의 가격 범위를 조회하는 SQL 쿼리를 작성하시오.
products
테이블 열:product_id
,price
price_ranges
테이블 열:min_price
,max_price
,price_category
문제 2:
transactions
테이블과 tax_brackets
테이블을 조인하여 각 거래에 적용된 세율을 조회하는 SQL 쿼리를 작성하시오.
transactions
테이블 열:transaction_id
,transaction_amount
tax_brackets
테이블 열:lower_limit
,upper_limit
,tax_rate
8. 응용 문제 해답
해답 1:
SELECT p.product_id, p.price, r.price_category
FROM products p, price_ranges r
WHERE p.price BETWEEN r.min_price AND r.max_price;
해답 2:
SELECT t.transaction_id, t.transaction_amount, b.tax_rate
FROM transactions t, tax_brackets b
WHERE t.transaction_amount BETWEEN b.lower_limit AND b.upper_limit;
9. 전자상거래 업계에서의 사용 예시
사용될 수 있는 경우 예측:
- 가격 범위에 따른 제품 분류: 제품 테이블과 가격 범위 테이블을 조인하여 제품을 가격 범위에 따라 분류할 때.
- 주문 금액에 따른 할인 적용: 주문 테이블과 할인 테이블을 조인하여 각 주문에 적용된 할인율을 조회할 때.
예상 상황 문제:
- 주문 테이블과 할인 테이블을 조인하여 특정 주문 금액에 따른 할인율을 조회하는 SQL 쿼리를 작성하시오.
- 제품 테이블과 가격 범위 테이블을 조인하여 특정 가격 범위에 속하는 제품을 조회하는 SQL 쿼리를 작성하시오.
SQL 코드 및 시각적 예시
문제 1 SQL 코드:
SELECT o.order_id, o.order_amount, d.discount_rate
FROM orders o, discounts d
WHERE o.order_amount BETWEEN d.min_amount AND d.max_amount;
예시 테이블:
order_id | order_amount | discount_rate |
---|---|---|
1001 | 500 | 10% |
1002 | 750 | 15% |
1003 | 1200 | 20% |
… | … | … |
문제 2 SQL 코드:
SELECT p.product_id, p.price, r.price_category
FROM products p, price_ranges r
WHERE p.price BETWEEN r.min_price AND r.max_price;
예시 테이블:
product_id | price | price_category |
---|---|---|
101 | 1500 | Mid-Range |
102 | 2500 | High-End |
103 | 800 | Budget |
… | … | … |