Spec-Zone.ru › MySQL 9.2

15.2.4 Оператор EXCEPT

query_expression_body EXCEPT [ALL | DISTINCT] query_expression_body
    [EXCEPT [ALL | DISTINCT] query_expression_body]
    [...]

query_expression_body:
    See Section 15.2.14, “Set Operations with UNION, INTERSECT, and EXCEPT”

EXCEPT ограничивает результат из первого блока запроса строками, которые также отсутствуют во втором блоке. Как и в случае с UNION и INTERSECT, любой блок запроса может использовать любой из SELECT, TABLE или VALUES. Пример с использованием таблиц a, b и c, определённых в разделе 15.2.8 «Оператор INTERSECT», показан здесь:

mysql> TABLE a EXCEPT TABLE b;
+------+------+
| m    | n    |
+------+------+
|    2 |    3 |
+------+------+
1 row in set (0.00 sec)

mysql> TABLE a EXCEPT TABLE c;
+------+------+
| m    | n    |
+------+------+
|    1 |    2 |
|    2 |    3 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE b EXCEPT TABLE c;
+------+------+
| m    | n    |
+------+------+
|    1 |    2 |
+------+------+
1 row in set (0.00 sec)

Как и в случае с UNION и INTERSECT, если ни DISTINCT, ни ALL не указаны, по умолчанию используется DISTINCT.

DISTINCT удаляет дубликаты, найденные с любой стороны отношения, как показано здесь:

mysql> TABLE c EXCEPT DISTINCT TABLE a;
+------+------+
| m    | n    |
+------+------+
|    1 |    3 |
+------+------+
1 row in set (0.00 sec)

mysql> TABLE c EXCEPT ALL TABLE a;
+------+------+
| m    | n    |
+------+------+
|    1 |    3 |
|    1 |    3 |
+------+------+
2 rows in set (0.00 sec)

(Первый оператор имеет тот же эффект, что и TABLE c EXCEPT TABLE a.)

В отличие от UNION или INTERSECT, EXCEPT не является коммутативным — то есть результат зависит от порядка операндов, как показано здесь:

mysql> TABLE a EXCEPT TABLE c;
+------+------+
| m    | n    |
+------+------+
|    1 |    2 |
|    2 |    3 |
+------+------+
2 rows in set (0.00 sec)

mysql> TABLE c EXCEPT TABLE a;
+------+------+
| m    | n    |
+------+------+
|    1 |    3 |
+------+------+
1 row in set (0.00 sec)

Как и в случае с UNION, наборы результатов для сравнения должны иметь одинаковое количество столбцов. Типы столбцов наборов результатов также определяются так же, как для UNION.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/except.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API