Ответ
Для объединения результатов двух или более SELECT-запросов в SQL используются операторы UNION и UNION ALL. Их основное отличие — в обработке дубликатов.
UNIONобъединяет наборы результатов и удаляет дублирующиеся строки. Для этого выполняется дополнительная сортировка и сравнение, что может быть затратным.UNION ALLпросто склеивает все строки из всех запросов, включая дубликаты. Он работает быстрее, так как не проверяет уникальность.
Пример использования:
-- Получить всех поставщиков из двух разных городов
SELECT supplier_id, supplier_name FROM suppliers WHERE city = 'Москва'
UNION ALL
SELECT supplier_id, supplier_name FROM suppliers WHERE city = 'Санкт-Петербург';
Критически важные условия для объединения:
- Количество столбцов в каждом
SELECTдолжно быть одинаковым. - Соответствующие столбцы должны иметь совместимые типы данных (например,
VARCHARиTEXT,INTиBIGINT). - Столбцы выбираются в одном и том же порядке.
Сортировка объединенного результата: ORDER BY применяется только один раз в конце всего запроса.
SELECT product_name FROM current_products
UNION
SELECT product_name FROM archived_products
ORDER BY product_name; -- Сортирует финальный объединенный набор
Когда что использовать:
UNION ALL— когда дубликаты невозможны или их наличие некритично, а производительность важна.UNION— когда необходимо получить строго уникальный набор строк из нескольких источников.