Spec-Zone.ru › MariaDB

Подзапросы и ALL

Подзапросы с использованием ключевого слова ALL вернут true если сравнение возвращает true для каждой строки, возвращённой подзапросом, или если подзапрос не возвращает ни одной строки.

Синтаксис

scalar_expression comparison_operator ALL <Table subquery>
  • scalar_expression может быть любым выражением, оценивающимся в единственное значение
  • comparison_operator может быть одним из: =, >, <, >=, <=, <> или !=

ALL возвращает:

  • NULL если оператор сравнения возвращает NULL по крайней мере для одной строки, возвращенной подзапросом таблицы, или скалярное выражение возвращает NULL.
  • FALSE если оператор сравнения возвращает FALSE по крайней мере для одной строки, возвращенной подзапросом таблицы.
  • TRUE если оператор сравнения возвращает TRUE для всех строк, возвращенных подзапросом таблицы, или если подзапрос таблицы не возвращает ни одной строки.

NOT IN является псевдонимом для <> ALL.

Примеры

CREATE TABLE sq1 (num TINYINT);

CREATE TABLE sq2 (num2 TINYINT);

INSERT INTO sq1 VALUES(100);

INSERT INTO sq2 VALUES(40),(50),(60);

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);
+------+
| num  |
+------+
|  100 |
+------+

Поскольку 100 > всех 40, 50 и 60, вычисление истинно, и строка возвращается

Добавление второй строки в sq1, где вычисление для этой записи ложно:

INSERT INTO sq1 VALUES(30);

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);
+------+
| num  |
+------+
|  100 |
+------+

Добавление новой строки в sq2, что приводит к ложности всех вычислений:

INSERT INTO sq2 VALUES(120);

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);
Empty set (0.00 sec)

Когда подзапрос не возвращает результатов, вычисление по-прежнему истинно:

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2 WHERE num2 > 300);
+------+
| num  |
+------+
|  100 |
|   30 |
+------+

Вычисление по отношению к NULL приведет к результату, неизвестному или не истинному, и, следовательно, не вернет ни одной строки:

INSERT INTO sq2 VALUES (NULL);

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/subqueries-and-all/

Spec-Zone.ru

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