Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Использование подзапросов в предложении where

Использование подзапросов в предложении whereКак и в предложении SELECT, в предложении WHERE можно использовать подзапросы для получения отсутствующих значений. К примеру, из таблицы ORDER_HEADER нельзя напрямую получить информацию о заказах конкретного клиента, если известно только его имя. В данной таблице содержатся идентификаторы заказчиков, а их имена помещены в таблицу CUSTOMER. Таким образом, можно найти идентификатор нужного заказчика по его имени в таблице CUSTOMER, после чего использовать его для отбора значений из таблицы ORDER_HEADER. Подзапрос выполняется первым и обеспечивает внешний запрос своим результирующим набором данных. В представленном примере ожидается одно возвращаемое значение. Если по некоторой причине подзапрос возвращает больше одной строки (таким образом, полю ORDHDR_ CUSTID_FN должно соответствовать больше одного значения), будет сгенерирована ошибка. С подзапросами может использоваться любой из операторов, уже описанных в этой главе, однако нужно уделять особое внимание типу данных, с которыми он работает. К примеру, оператор IN может работать с диапазоном значений, в то время как оператор LIKE — только с одним значением. В следующем запросе применяется оператор IN, так как подзапрос может вернуть несколько значений. Иногда подзапрос возвращает множество возможных значений, а во внешнем запросе присутствует оператор сравнения с ними. Для таких случаев в SQL представлены два специальных оператора: ALL и ANY В базе данных ACME присутствует представление, содержащее общие суммы заказов одной компании, — WILE BESS COMPANY. Данное представление было специально создано для демонстрации работы этих двух операторов. Рассмотрим следующий запрос. Этот запрос ищет заказы с общей суммой, превышающий сумму хотя бы одного из заказов компании WILLE BESS COMPANY (т. е. больше хоть одного из значений, возвращаемых подзапросом). Таким образом, записи, отбираемые внешним запросом, должны отображать сумму, превышающую наименьшее из значений, возвращаемых подзапросом (т. е. 6608 долларов). Результирующий набор данных внешнего запроса сортируется по возрастанию. А вот другой запрос, возвращающий те же результаты. В приведенном примере подзапрос возвращает только одно значение — минимальную сумму заказа компании WILE BESS COMPANY. С ним сравниваются значения внешнего запроса.