Оператор UNION MySQL, операторы INTERSECT и EXEPT

UNION, INTERSECT, EXEPT значительно упрощают работу с таблицами в реляционных DBMS когда результат должен включать элементы из более, чем одной из них. INTERSECT и EXEPT применяются в некоторых других системах управления базами данных, поэтому из трех указанных можно говорить только о UNION MySQL.

 

 

Оператор UNION MySQL, операторы INTERSECT и EXEPT

INTERSECT и EXEPT MySQL не поддерживается в принципе и все запросы, для которых их можно бы было использовать приходится замещать запросами с JOIN . 

UNION применяется часто, поэтому рассмотрим его.

UNION оператор объединяет два SELECT-а и выводит общий результат.

UNION MySQL

 

SELECT city as cityall from PEOPLE union SELECT city as cityall from REAL_ESTATE;

+——————+
| cityall |
+——————+
| Yekaterinburg |
| Novosibirsk |
| Krasnodar |
| Elabuga |
| Sankt-Peterburg |
| Moskow |
| Moscow |
| Tver |
| Kemerovo |
| Nizniy Tagil |
| Sochi |
+——————+
11 rows in set (0.00 sec)

 

Также использованы алиасы для двух колонок в разных таблицах.

UNION MySQL по умолчанию устраняет все дубли, если дубли нужны следует использовать UNION ALL

Для того же запроса с UNION ALL получим уже 21 результат вместо 11.

 

SELECT city as cityall from PEOPLE union all SELECT city as cityall from REAL_ESTATE;

+——————+
| cityall |
+——————+
| Yekaterinburg |
| Novosibirsk |
| Krasnodar |
| Elabuga |
| Sankt-Peterburg |
| Moskow |
| Moskow |
| Moskow |
| Yekaterinburg |
| Moscow |
| Tver |
| Novosibirsk |
| Kemerovo |
| Moscow |
| Yekaterinburg |
| Nizniy Tagil |
| Sochi |
| Sankt-Peterburg |
| Moscow |
| Novosibirsk |
| Krasnodar |
+——————+
21 rows in set (0.00 sec)

 

 

INTERSECT MySQL, как уже, упоминалось Выше не поддерживается.

Запросы с их использованием могли бы выглядеть так:

SELECT city from PEOPLE where profession='ElectriacalEngineer' intersect SELECT city from REAL_ESTATE where type='Appartment';

 

SELECT city from PEOPLE where profession='ElectriacalEngineer' intersect EXEPT city from REAL_ESTATE where type='Appartment';

 

MySQL при попытке их выполнения будет выдавать ошибки, сообщающие о неверном синтаксисе.