English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы представляем синтаксис и примеры оператора MySQL UNION.
Оператор MySQL UNION используется для объединения результатов двух и более SELECT-запросов в один набор результатов. Множественные SELECT-запросы удаляют дублирующиеся данные.
Синтаксис оператора MySQL UNION:
SELECT выражение1, выражение2, ... выражение_n FROM таблицы [WHERE условия] UNION [ALL | DISTINCT] SELECT выражение1, выражение2, ... выражение_n FROM таблицы [WHERE условия];
выражение1, expression2, ... expression_n: столбцы для поиска.
таблицы: Таблица данных для поиска.
WHERE условия: Опция, условия поиска.
DISTINCT: Опция, удаляющая дублирующиеся данные из набора результатов. По умолчанию оператор UNION уже удаляет дублирующиеся данные, поэтому модификатор DISTINCT не влияет на результат.
ALL: Опция, возвращающая все наборы результатов, включая дублирующиеся данные.
В этом руководстве мы будем использовать образец базы данных w3codebox.
Ниже приведены данные из таблицы "Websites";
mysql> SELECT * FROM Websites; +----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | 基础教程网 | http://ru.oldtoolbag.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
Ниже приведены данные APP "apps":
mysql> SELECT * FROM apps; +----+------------+-------------------------+---------+ | id | app_name | url | country | +----+------------+-------------------------+---------+ | 1 | QQ APP | http://im.qq.com/ | CN | | 2 | 微博 APP | http://weibo.com/ | CN | | 3 | 淘宝 APP | https://www.taobao.com/ | CN | +----+------------+-------------------------+---------+ 3 строк в наборе (0.00 сек)
Ниже приведено SQL-выражение, которое выбирает все из таблиц "Websites" и "apps"Разныеcountry (только уникальные значения):
SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country;
Результат выполнения SQL будет следующим:
Комментарий:UNION не может использоваться для перечисления всех country из двух таблиц. Если некоторые веб-сайты и приложения из одной и той же страны, каждая страна будет перечислена только один раз. UNION выбирает только уникальные значения. Используйте UNION ALL для выбора дублируемых значений!
Следующие SQL запросы используют UNION ALL для выбора из таблиц "Websites" и "apps"Всеcountry (есть дублируемые значения):
SELECT country FROM Websites UNION ALL SELECT country FROM apps ORDER BY country;
Результат выполнения SQL будет следующим:
Следующие SQL запросы используют UNION ALL для выбора из таблиц "Websites" и "apps"ВсеДанные Китая (CN) (есть дублируемые значения):
SELECT country, name FROM Websites WHERE country='CN' UNION ALL SELECT country, app_name FROM apps WHERE country='CN' ORDER BY country;
Результат выполнения SQL будет следующим: