Spec-Zone .ru
спецификации, руководства, описания, API
|
Наиболее популярный способ использования подзапроса находится в форме:
non_subquery_operand
comparison_operator
(subquery
)
Где comparison_operator
один из этих операторов:
= > < >= <= <> != <=>
Например:
... WHERE 'a' = (SELECT column1 FROM t1)
MySQL также разрешает эту конструкцию:
non_subquery_operand
LIKE (subquery
)
Когда-то единственное юридическое место для подзапроса было на правой стороне сравнения, и Вы могли бы все еще найти некоторые старые DBMSs, которые настаивают на этом.
Вот пример сравнения подзапроса стандартной формы, которое невозможно сделать с соединением. Это находит все
строки в таблице t1
для которого column1
значение
равно максимальному значению в таблице t2
:
SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2);
Вот другой пример, который снова невозможен с соединением, потому что он включает агрегацию для одной из таблиц.
Это находит все строки в таблице t1
содержа значение, которое происходит дважды в
данном столбце:
SELECT * FROM t1 AS t WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
Для сравнения подзапроса к скаляру подзапрос должен возвратить скаляр. Для сравнения подзапроса конструктору строки подзапрос должен быть подзапросом строки, который возвращает строку с тем же самым числом значений как конструктор строки. См. Раздел 13.2.10.5, "Подзапросы Строки".