Класс/оператор
EXCEPT в SQL используется для объединения два
запроса SELECT и возвращает строку из первого SELECT, которых нет во вторым SELECT. Это означает, что UNION возвращает только те строки, которые не доступны во втором SELECT.
Так же, как с оператором UNION, одни и те же правила применяются при использовании оператора EXCEPT. MySQL не поддерживает оператор EXCEPT.
Синтаксис
Базовый синтаксис EXCEPT следующий:
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
EXCEPT
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
Здесь, в данном условии может быть любое выражение основанное на вашем требовании.
Пример
Рассмотрим следующие две таблицы.
Таблица 1 – Таблица CUSTOMERS выглядит следующим образом:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Maxim | 35 | Moscow | 21000.00 |
| 2 | AndreyEx | 38 | Krasnodar | 55500.00 |
| 3 | Oleg | 33 | Rostov | 34000.00 |
| 4 | Masha | 35 | Moscow | 34000.00 |
| 5 | Ruslan | 34 | Omsk | 45000.00 |
| 6 | Dima | 32 | SP | 45000.00 |
| 7 | Roma | 34 | SP | 10000.00 |
+----+----------+-----+-----------+----------+
Таблица 2 – таблица ORDERS состоит из следующих записей:
+-----+---------------------+-------------+--------+
|OID | DATE | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2017-01-08 00:00:00 | 3 | 34200 |
| 100 | 2017-01-08 00:00:00 | 3 | 25000 |
| 101 | 2017-02-10 00:00:00 | 2 | 23450 |
| 103 | 2017-03-12 00:00:00 | 4 | 34000 |
+-----+---------------------+-------------+--------+
Теперь, давайте объединим эти две таблицы в заявлении SELECT, как показано ниже.
SQL> SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
EXCEPT
SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
RIGHT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
Это произведет следующий результат.
+------+----------+--------+---------------------+
| ID | NAME | AMOUNT | DATE |
+------+----------+--------+---------------------+
| 1 | Maxim | NULL | NULL |
| 5 | Ruslan | NULL | NULL |
| 6 | Dima | NULL | NULL |
| 7 | Roma | NULL | NULL |
+------+----------+--------+---------------------+
Комментарии: