/

/

SQL Query for UNION: Complete Guide with Examples | Free

TOOLS

SQL Query for UNION: Complete Guide with Examples | Free

SQL Query for UNION: Complete Guide with Examples | Free

SQL Query for UNION: Complete Guide with Examples | Free

Dec 25, 2024

Dec 25, 2024

Dec 25, 2024

sql query for union
sql query for union
sql query for union

Introduction to SQL Union Operations

The SQL UNION operator combines results from multiple SELECT statements into a single result set. This powerful feature allows you to merge data from different tables or queries while eliminating duplicates.

Quick Example

-- Combine active and inactive customers
SELECT customer_name, 'Active' as status
FROM active_customers
UNION
SELECT customer_name, 'Inactive' as status
FROM inactive_customers
ORDER BY

For more tools and AI-powered SQL query solutions, visit our AI SQL Tools page.

Basic Syntax and Functionality

UNION Syntax

SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM

UNION vs UNION ALL

-- UNION (removes duplicates)
SELECT product_id, product_name
FROM products_2023
UNION
SELECT product_id, product_name
FROM products_2024;

-- UNION ALL (keeps duplicates)
SELECT product_id, product_name
FROM products_2023
UNION ALL
SELECT product_id, product_name
FROM

For additional SQL query optimization tips, check out our SQL Query Optimization Guide.

Advanced Techniques and Best Practices

1. Combining Different Tables

-- Combine sales from multiple channels
SELECT
    order_date,
    amount,
    'Online' as channel
FROM online_sales
WHERE order_date >= '2024-01-01'
UNION
SELECT
    order_date,
    amount,
    'Retail' as channel
FROM retail_sales
WHERE order_date >= '2024-01-01'
ORDER BY

2. Using WITH Clause

-- Complex analysis using CTEs and UNION
WITH online_metrics AS (
    SELECT
        DATE_FORMAT(order_date, '%Y-%m') as month,
        SUM(amount) as revenue,
        COUNT(*) as orders
    FROM online_sales
    GROUP BY DATE_FORMAT(order_date, '%Y-%m')
),
retail_metrics AS (
    SELECT
        DATE_FORMAT(order_date, '%Y-%m') as month,
        SUM(amount) as revenue,
        COUNT(*) as orders
    FROM retail_sales
    GROUP BY DATE_FORMAT(order_date, '%Y-%m')
)
SELECT
    month,
    revenue,
    orders,
    'Online' as channel
FROM online_metrics
UNION ALL
SELECT
    month,
    revenue,
    orders,
    'Retail' as channel
FROM retail_metrics
ORDER BY month,

3. Column Type Matching

-- Proper type casting in UNION
SELECT
    CAST(product_id AS VARCHAR) as id,
    product_name
FROM products
UNION
SELECT
    order_id,
    order_reference
FROM

Comparative Analysis with Other Set Operators

UNION vs INTERSECT

-- UNION: All customers from both sets
SELECT customer_id FROM online_customers
UNION
SELECT customer_id FROM retail_customers;

-- INTERSECT: Customers present in both sets
SELECT customer_id FROM online_customers
INTERSECT
SELECT customer_id FROM

UNION vs JOIN

-- Using UNION
SELECT product_id, product_name, 'Current' as status
FROM current_products
UNION
SELECT product_id, product_name, 'Discontinued' as status
FROM discontinued_products;

-- Equivalent using JOIN
SELECT
    COALESCE(c.product_id, d.product_id) as product_id,
    COALESCE(c.product_name, d.product_name) as product_name,
    CASE
        WHEN c.product_id IS NOT NULL THEN 'Current'
        ELSE 'Discontinued'
    END as status
FROM current_products c
FULL OUTER JOIN discontinued_products d
    ON

Real-world Applications

1. Sales Analysis

-- Combine sales data from multiple years
SELECT
    DATE_FORMAT(order_date, '%Y') as year,
    COUNT(*) as total_orders,
    SUM(amount) as total_revenue,
    'Historical' as data_type
FROM sales_history
WHERE order_date < '2024-01-01'
GROUP BY DATE_FORMAT(order_date, '%Y')
UNION
SELECT
    DATE_FORMAT(order_date, '%Y') as year,
    COUNT(*) as total_orders,
    SUM(amount) as total_revenue,
    'Current' as data_type
FROM current_sales
WHERE order_date >= '2024-01-01'
GROUP BY DATE_FORMAT(order_date, '%Y')
ORDER BY year

Best Practices

  1. Column Matching

    • Ensure same number of columns

    • Match data types

    • Use consistent column names

  2. Performance

    • Use UNION ALL when duplicates are acceptable

    • Create proper indexes

    • Consider materialized views for large datasets

  3. Maintenance

    • Document complex unions

    • Use CTEs for clarity

    • Consider performance impact

FAQs

Q: When should I use UNION vs UNION ALL?
A: Use UNION ALL when duplicates are acceptable or known to be impossible, as it's more efficient.

Q: Can I use UNION with different column names?
A: Yes, but the column names from the first SELECT statement will be used in the result.

Learn more about AI-powered SQL tools at AI2SQL.

Share this

More Articles

More Articles

More Articles