пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Язык SQL: операторы EXISTS, ANY, ALL в командах с подзапросом

 

ANY, ALL, и SOME напоминают EXISTS который воспринимает подзапросы как аргументы; однако они отличаются от EXISTS тем, что используются сов- местно с реляционными операторами. В этом отношении, они напоминают оператор IN когда тот используется с подзапросами; они берут все значения выведенные подзапросом и обрабатывают их как модуль. Однако, в отличие от IN, они могут использоваться только с подзапросами.

СПЕЦИАЛЬНЫЕ ОПЕРАТОРЫ ANY или SOME

Операторы SOME и ANY - взаимозаменяемы везде и там где мы используем ANY, SOME будет работать точно так же. Различие в терминологии состоит в том чтобы позволить людям использовать тот термин который наиболее однозначен. Это может создать проблему; потому что, как мы это увидим, наша интуиция может иногда вводить в заблуждение. Имеется новый способ нахождения продавца с заказчиками размещенными в их городах ( вывод для этого запроса показывается в Рисунке 13.1 ):


 
            SELECT * 
               FROM Salespeople 
               WHERE city = ANY 
                  (SELECT city 
                     FROM Customers ); 

Оператор ANY берет все значения выведенные подзапросом, ( для этого случая - это все значения city в таблице Заказчиков ), и оценивает их как верные если любой(ANY) из их равняется значению города текущей строки внешнего запроса.


 

 
               ===============  SQL Execution Log ============ 
              | SELECT *                                      | 
              | FROM  Salespeople                             | 
              | WHERE city = ANY                              | 
              | (SELECT  city                                 | 
              | FROM Customers);                              | 
              | ============================================= | 
              |   cnum     cname     city         comm        | 
              |  -----    --------   ----       --------      | 
              |   1001    Peel       London         0.12      | 
              |   1002    Serres     San Jose       0.13      | 
              |   1004    Motika     London         0.11      | 
                ============================================= 

Рисунок 13. 1: Использование оператора ANY 

Это означает, что подзапрос должен выбирать значения такого же типа как и те, которые сравниваются в основном предикате. В этом его отличие от EXISTS, который просто определяет, производит ли под- запрос результаты или нет, и фактически не использует эти результаты.

 


13.06.2017; 21:48
хиты: 154
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь