Думаю всем известна разница между UNION и UNION ALL. Если нет то стоит обратится к соответствующей справочной информации. В данном же посте мы разберем одну особенность данных соединений.
UNION ALL соединяет данные без учета уникальности записей. Тогда как UNION учитывает уникальные записи и две одинаковые записи (строки) в выборке будут отфильтрованы и останется только одна строка.
Вот так это работает:
1,2,3 + 1,2,3 UNION ALL 2,3,4 = 1,2,3 + 1,2,3 + 2,3,4
1,2,3 + 1,2,3 UNION 2,3,4 = 1,2,3 + 2,3,4
А если мы соединяем не две, а четыре выборки и нам надо применить и конструкцию UNION и UNION ALL.
Тогда в таком случае пользуемся как в математике скобками, вот так:
1,2,3 + 1,2,3
UNION ALL
2,3,4
UNION ALL
(4,5,6
UNION
4,5,6 + 5,6,7)
Получаем в результате выборку:
1,2,3 +1,2,3 + 2,3,4 + 4,5,6 + 5,6,7
Если бы мы не использовали скобки, то результат был бы совершенно другим:
1,2,3 + 2,3,4 + 4,5,6 + 5,6,7
То есть неуникальные записи в первом соединении UNION ALL были бы отфильтрованы соединением UNION дальше. Использование же скобок позволило сначала использовать конструкцию UNION фильтрующую неуникальные записи, и только потом конструкцию UNION ALL с полным соединением.