반응형
서브쿼리를 통해 만든 결과값을 특정 컬럼 기준으로 하나의 테이블로 합치려면 JOIN
, UNION
, 또는 CASE 문을 사용할 수 있습니다. 아래에서 각 방법을 설명합니다.
1. JOIN
을 사용하여 컬럼 기준으로 결합
JOIN
을 사용하면 서브쿼리의 결과를 특정 컬럼을 기준으로 합칠 수 있습니다.
예제
아래는 두 개의 서브쿼리 결과를 id
컬럼 기준으로 합치는 예제입니다.
SELECT
a.id,
a.name,
b.total_sales,
c.total_orders
FROM
(SELECT id, name FROM employees) AS a
LEFT JOIN
(SELECT employee_id AS id, SUM(sales) AS total_sales FROM sales GROUP BY employee_id) AS b
ON a.id = b.id
LEFT JOIN
(SELECT employee_id AS id, COUNT(order_id) AS total_orders FROM orders GROUP BY employee_id) AS c
ON a.id = c.id;
employees
테이블의id
를 기준으로sales
와orders
서브쿼리 결과를 결합.- 결과 테이블:
id | name | total_sales | total_orders |
1 | Alice | 5000 | 10 |
2 | Bob | 3000 | 5 |
2. UNION
을 사용하여 결과를 합치기
UNION
은 두 개 이상의 서브쿼리 결과를 행 단위로 결합합니다. 다만, 컬럼 개수와 순서가 동일해야 합니다.
예제
SELECT id, name, 'sales' AS category, total AS value
FROM (SELECT employee_id AS id, SUM(sales) AS total FROM sales GROUP BY employee_id) AS sales_data
UNION
SELECT id, name, 'orders' AS category, total AS value
FROM (SELECT employee_id AS id, COUNT(order_id) AS total FROM orders GROUP BY employee_id) AS orders_data;
- 결과:
id | name | category | value |
1 | Alice | sales | 5000 |
1 | Alice | orders | 10 |
2 | Bob | sales | 3000 |
2 | Bob | orders | 5 |
3. CASE
문을 사용하여 테이블 결합
CASE
문으로 여러 서브쿼리 결과를 단일 테이블에서 표현할 수 있습니다.
예제
SELECT
e.id,
e.name,
(SELECT SUM(sales) FROM sales WHERE employee_id = e.id) AS total_sales,
(SELECT COUNT(order_id) FROM orders WHERE employee_id = e.id) AS total_orders
FROM employees AS e;
- 서브쿼리를 각각의 컬럼으로 활용.
- 결과 테이블:
id | name | total_sales | total_oders |
1 | Alice | 5000 | 10 |
2 | Bob | 3000 | 5 |
4. CTE(Common Table Expression)를 활용한 결합
CTE를 사용하면 서브쿼리를 명시적으로 분리하여 가독성을 높일 수 있습니다.
예제
WITH sales_data AS (
SELECT employee_id AS id, SUM(sales) AS total_sales
FROM sales
GROUP BY employee_id
),
orders_data AS (
SELECT employee_id AS id, COUNT(order_id) AS total_orders
FROM orders
GROUP BY employee_id
)
SELECT
e.id,
e.name,
COALESCE(s.total_sales, 0) AS total_sales,
COALESCE(o.total_orders, 0) AS total_orders
FROM employees AS e
LEFT JOIN sales_data AS s ON e.id = s.id
LEFT JOIN orders_data AS o ON e.id = o.id;
WITH
절을 사용하여 서브쿼리를 정의.COALESCE
는 NULL 값을 0으로 변환.- 결과 테이블:
id | name | total_sales | total_orfers |
1 | Alice | 5000 | 100 |
2 | Bob | 3000 | 5 |
요약
JOIN
: 특정 컬럼을 기준으로 서브쿼리 결과를 결합.UNION
: 결과를 행 단위로 합침.CASE
: 서브쿼리의 결과를 각 컬럼으로 처리.- CTE: 복잡한 서브쿼리를 가독성 좋게 작성.
가장 적합한 방법은 데이터 구조와 목적에 따라 선택하세요. JOIN
과 CTE
는 성능 및 유지보수 측면에서 추천됩니다.
반응형
'DB > MySQL' 카테고리의 다른 글
[ MySQL ] 데이터 타입 알아보기 (0) | 2024.12.17 |
---|---|
[ MySQL ] COLUMN_KEY 사용하기 (1) | 2024.12.17 |
[ MySQL ] 원격으로 접속하기 (0) | 2024.12.17 |
[ MySQL ] Schema - 테이블 구조 확인하기 (0) | 2024.10.30 |
[ MySQL ] CREATE USER - 사용자 생성하고 DB 할당하기 (0) | 2024.10.15 |