Думаю всем известна разница между 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 с полным соединением.