Если в предикате надо сравнить значение с некоторым множеством, то, как было показано выше, можно использовать оператор IN.
Для того чтобы проверить, существуют ли строки, удовлетворяющие конкретному условию подзапроса, применяется оператор EXISTS.
Например:
SELECT f1,f2,f3 from tbl1
WHERE EXISTS
(SELECT * FROM tbl1 WHERE f4='10/11/2003');
Этот запрос будет формировать не пустой результирующий набор только в том случае, если в какое-либо значение столбца f4 таблицы была занесена дата, например: '10/11/2003'.
Преимущество применения оператора EXISTS с результатами подзапроса состоит в том, что подзапрос может возвращать как множество строк, так и множество столбцов.
При коррелированном подзапросе оператор EXISTS будет вычисляться каждый раз для каждой строки внешнего запроса.
В стандарте SQL-92 не предусмотрено использование в подзапросах, к которым применяется оператор EXISTS агрегирующих функций. Однако некоторые СУБД позволяют такой вид подзапросов.
Для использования результата подзапроса в предикате также применяются операторы ANY и ALL, которые были подробно рассмотрены в предыдущих лекциях.
Приведем пример использования оператора ANY:
SELECT f1,f2,f3 from tbl1
WHERE f3 = ANY (SELECT f3 FROM tbl2);
Данный оператор определяет, что в результирующий набор будут включены все строки, значение столбца f3 которых присутствует в таблице tbl2.