← Назад ко всем вопросам

Чем отличается UNION от UNION ALL?

1️⃣ Как кратко ответить

UNION объединяет результаты двух или более SQL-запросов, удаляя дубликаты строк. UNION ALL также объединяет результаты, но сохраняет все дубликаты.

2️⃣ Подробное объяснение темы

В SQL, когда необходимо объединить результаты нескольких запросов в один набор данных, используются операторы UNION и UNION ALL. Оба оператора позволяют объединять результаты, но они имеют ключевые различия в том, как они обрабатывают дубликаты.

UNION

  • Удаление дубликатов: UNION автоматически удаляет дубликаты строк из результирующего набора данных. Это означает, что если одна и та же строка появляется в результатах нескольких объединяемых запросов, она будет включена в итоговый набор данных только один раз.
  • Производительность: Поскольку UNION должен проверять и удалять дубликаты, он может быть менее производительным по сравнению с UNION ALL, особенно на больших наборах данных.

UNION ALL

  • Сохранение дубликатов: UNION ALL сохраняет все дубликаты строк. Если одна и та же строка появляется в результатах нескольких объединяемых запросов, она будет включена в итоговый набор данных столько раз, сколько она встречается.
  • Производительность: UNION ALL обычно быстрее, чем UNION, так как он не выполняет проверку на дубликаты.

Пример использования

Рассмотрим два простых примера, чтобы понять, как работают UNION и UNION ALL.

-- Создаем две таблицы для примера
CREATE TABLE table1 (id INT, name VARCHAR(50));
CREATE TABLE table2 (id INT, name VARCHAR(50));
​
-- Вставляем данные в первую таблицу
INSERT INTO table1 (id, name) VALUES (1, 'Alice'), (2, 'Bob');
​
-- Вставляем данные во вторую таблицу
INSERT INTO table2 (id, name) VALUES (2, 'Bob'), (3, 'Charlie');
​
-- Используем UNION
SELECT * FROM table1
UNION
SELECT * FROM table2;

В этом примере, результирующий набор данных будет содержать:

1, 'Alice'
2, 'Bob'
3, 'Charlie'

Строка (2, 'Bob') появляется в обеих таблицах, но в результате UNION она будет включена только один раз.

-- Используем UNION ALL
SELECT * FROM table1
UNION ALL
SELECT * FROM table2;

В этом случае, результирующий набор данных будет содержать:

1, 'Alice'
2, 'Bob'
2, 'Bob'
3, 'Charlie'

Здесь строка (2, 'Bob') включена дважды, так как UNION ALL сохраняет все дубликаты.

Когда использовать

  • Используйте UNION, когда необходимо получить уникальный набор данных без дубликатов.
  • Используйте UNION ALL, когда важна производительность и дубликаты допустимы или даже необходимы для анализа.

Тема: Базы данных и SQL
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки