Menu
Coddy logo textTech

유니온

Coddy SQL 여정의 기초 섹션에 포함된 레슨. 72개 중 48번째.

UNION은 조인과 다릅니다. 조인은 조건을 사용해 테이블을 결합하지만 UNION은 두 테이블을 위아래로 단순히 합칩니다. UNION을 사용하려면 다음과 같이 작성합니다:

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

SELECT 모두 다음 규칙을 따라야 합니다:

  • 필드의 개수는 같아야 합니다
  • 순서가 중요합니다
  • 같은 위치에 있는 열은 데이터 유형이 일치해야 합니다

예를 들어, 다음과 같은 테이블이 있다고 가정해 보겠습니다:

germany_people

idname
1Lena
2Leonie

england_people

idname
1George
2Lena

문제: 우리가 가지고 있는 모든 이름을 하나의 큰 테이블로 만들고 싶습니다.

SELECT name from germany_people
UNION
SELECT name from england_people

결과:

name
Lena
Leonie
George

UNION중복되지 않는 값만 반환하는 반면, UNION ALL은 모든 레코드를 있는 그대로 반환합니다:

SELECT name from germany_people
UNION ALL
SELECT name from england_people

결과:

name
Lena
Leonie
George
Lena

여러 테이블의 데이터를 요약하기 위해 UNION ALL집계 함수, GROUP BY, ORDER BY와 함께 사용할 수도 있습니다. 핵심은 UNION ALL을 서브쿼리 안에 넣은 다음, 그 위에 그룹화와 정렬을 적용하는 것입니다.

예를 들어, 두 테이블 전체에서 각 이름이 몇 번 나타나는지 세고 싶다고 가정해 보겠습니다.

SELECT name, COUNT(*) AS total_count
FROM (
    SELECT name FROM germany_people
    UNION ALL
    SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESC

결과:

nametotal_count
Lena2
Leonie1
George1

여기서는 UNION이 아니라 UNION ALL을 사용하여 Lena와 같은 중복 항목을 유지합니다. 그렇지 않으면 개수를 세기 전에 중복 항목이 제거됩니다. 서브쿼리는 모든 행을 병합한 다음, GROUP BY + COUNT가 해당 행을 요약합니다. ORDER BY는 최종 결과를 정렬합니다.

challenge icon

챌린지

쉬움

사용 가능한 테이블과 열:

  • sales_2009: product_id, quantity_sold
  • sales_2010: product_id, quantity_sold
  • sales_2011: product_id, quantity_sold

판매 테이블은 3개입니다.

모든 테이블을 합쳐 각 제품의 판매량 합계를 구하세요.

결과에는 product_id와 총 판매량이 포함되어야 합니다.

이 열의 이름을 total_sales로 지정하세요.

결과를 총 판매량의 내림차순으로 정렬하세요.

직접 해보기

-- 세 개의 테이블을 하나의 결과로 쌓아 모든 행을 유지
SELECT product_id, ____ AS total_sales
FROM (
    SELECT * FROM sales_2009
    ____
    SELECT * FROM sales_2010
    ____
    SELECT * FROM sales_2011
)
-- 제품당 한 행, 가장 큰 총합부터
GROUP BY ____
ORDER BY ____ DESC;
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨

직접 연습해 보세요: SQL 플레이그라운드