НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
122 of 150 menu

Команда UNION

Команда UNION объединяет данные из нескольких таблиц в одну при выборке. При объединении количество столбцов во всех таблицах должно совпадать, иначе будет ошибка. Имена столбцов будут такие же, как в основной таблице, в которую добавляются данные из других таблиц.

Внимание: если не используется ключевое слово ALL для UNION, все возвращенные строки будут уникальными, так как по умолчанию подразумевается DISTINCT, который удаляет неуникальные значения. Чтобы отменить такое поведение - нужно указать ключевое слово ALL, вот так: UNION ALL.

Синтаксис

С удалением дублей:

SELECT * FROM table_one WHERE condition UNION SELECT * FROM table_two WHERE condition

Без удаления дублей:

SELECT * FROM table_one WHERE condition UNION ALL SELECT * FROM table_two WHERE condition

Можно объединять не две таблицы, а три или более:

SELECT * FROM table_one WHERE condition UNION SELECT * FROM table_two WHERE condition UNION SELECT * FROM table_three WHERE condition UNION SELECT * FROM table_four WHERE condition

Таблицы для примеров

countries
id name
1 Belarus
2 Russia
3 Ukraine
cities
id name country_id
1 Minsk 1
2 Minsk 1
3 Moscow 2
4 Kyiv 3

Пример

Давайте объединим записи из двух таблиц:

SELECT id, name FROM countries UNION ALL SELECT id, name FROM cities

Результат выполнения кода:

id name
1 Belarus
2 Russia
3 Ukraine
1 Minsk
2 Minsk
3 Moscow
4 Kyiv

Пример

Давайте объединим записи без использования ключевого слова ALL, при этом дубли не будут удалены, так как дублями считается полное совпадение строк:

SELECT id, name FROM countries UNION SELECT id, name FROM cities

Результат выполнения кода:

id name
1 Belarus
2 Russia
3 Ukraine
1 Minsk
2 Minsk
3 Moscow
4 Kyiv

Пример

Давайте удалим дубли, так как будет иметь место полное совпадение строк (из двух Minsk останется один):

SELECT name FROM countries UNION SELECT name FROM cities

Результат выполнения кода:

name
Belarus
Russia
Ukraine
Minsk
Moscow
Kyiv

Пример

Давайте добавим ключевое слово ALL, и дубли не будут удаляться:

SELECT name FROM countries UNION ALL SELECT name FROM cities

Результат выполнения кода:

name
Belarus
Russia
Ukraine
Minsk
Minsk
Moscow
Kyiv

Пример

Давайте продемонстрируем работу условий WHERE в комбинации с UNION:

SELECT id, name FROM countries WHERE id >= 2 UNION SELECT id, name FROM cities WHERE id <= 2

Результат выполнения кода:

id name
2 Russia
3 Ukraine
1 Minsk
2 Minsk

Пример

Давайте используем имена колонок из первой таблицы, при этом имена колонок таблиц, подключённых через UNION, нигде себя не проявят:

SELECT id AS country_id, name AS country_name FROM countries UNION SELECT id, name FROM cities

Результат выполнения кода:

country_id country_name
1 Belarus
2 Russia
3 Ukraine
1 Minsk 1
2 Minsk 1
3 Moscow 2
4 Kyiv 3

Пример

Давайте учтём, что если количество колонок не совпадает, запрос выдаст ошибку:

SELECT id, name FROM countries UNION SELECT id, name, country_id FROM cities

И такой запрос тоже выдаст ошибку в нашем случае - количество колонок в обеих таблицах не совпадает:

SELECT * FROM countries UNION SELECT * FROM cities

Пример

Давайте создадим дополнительные поля вручную, если нам необходимо получить из одной таблицы больше полей, чем существует в другой:

К примеру, мы хотим забрать 3 поля из второй таблицы, а в первой таблице полей только 2. Решим эту проблему создав поле с именем country_id и содержимым 0 для первой таблицы (вот так: 0 as country_id):

SELECT id, name, 0 AS country_id FROM countries UNION SELECT id, name, country_id FROM cities

Результат выполнения кода:

id name country_id
1 Belarus 0
2 Russia 0
3 Ukraine 0
1 Minsk 1
2 Minsk 1
3 Moscow 2
4 Kyiv 3

Смотрите также

  • команду JOIN,
    которая объединяет связанные таблицы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить