Программирование >>  Sql: полное руководство 

1 ... 60 61 62 [ 63 ] 64 65 66 ... 264


Ниже приведено еще несколько примеров сравнения с результатом подчиненного запроса:

Вывести список клиентов, которых обслуживает Билл Адаме.

SELECT COMPANY FROM CUSTOMERS WHERE CUST REP = (SELECT EMPL NOM FROM SALESREPS WHERE NAME = Bill Adams)

COMPANY

Acme Mfg. Three-Way Lines

Вывести список имеющихся в наличии товаров от компании ACI, количество которых превышает количество товара ACI-41004

SELECT DESCRIPTION, QTY ON HAND FROM PRODUCTS WHERE MFR ID = ACI

AND QTy on HAND > (SELECT QTY ON HAND FROM PRODUCTS WHERE MFR ID = ACI

AND PRODOCT ID = 41004)

DESCRIPTION QTY ON HAND

Size 3 Widget 207

Size 1 Widget 277

Size 2 Widget 167

Обратите внимание на то, что сотасно стандарту SQL1 подчиненный запрос в операции сравнения может стоять только справа от опфатора сравнения. Неравенство

А < (подчиненный запрос)

разрешается, а неравенство

(подчиненный запрос) > А

недопустимо. Сказанное не ограничивает возможности операции сравнения, поскольку знак любого неравенства всегда можно перевернуть так, чтобы подчршенный запрос оказался с правой стороны. Однако это говорит о том, что иногда требуется переворачивать логику словесного запроса так, чтобы он формально соответствовал действительной инструкции SQL.

Стандарт SQL2 устраняет подобное ограничение и позволяет подчиненному запросу находиться с любой стороны от оператора сравнения. Более того, стандарт идет еще дальше и допускает выполнение сравнения с целой строкой значений, а не только с единичным значением. Эти и другие возможности составления сложных запросов описываются ниже в настоящей главе. Следует, однако, учитывать, что подобные запросы, как правило, не поддерживаются текущими версиями ведущих СУБД. По этой причине при составлении подчиненных запросов рекомендуется придерживаться ограничений, накладываемых стандартом SQLL



проверка на принадлежность результатам подчиненного запроса (предикат IN)

- проверяемое выражение

;- IN-подчиненный запрос-

L-NOT-J

Рис 94 Синтаксическая диагра\лма проверки на принадлежность резулыа1ам подчиненного запроса (предикат IN)

Как показано на рис. 9.4, проверка на принадлежность результатам подчиненного запроса (предикат in) является видоизмененной формой простой проверки на член;тво в множестве Одно значение сравнивается со столбцом данных, которые возвращаются подчиненным запросом, и если это значение равно одному из элементов столбца, проверка дает результат true Данная проверка используется, когда необходимо сравнить значение из проверяемой строки с множеством значений, отобранных подчиненным запросом. Вот простой пример:

Вывести список служащих тех офисов, где фактический объем продаж превышает плановый.

SELECT NAME

FROM SALESREPS WHERE REP OFFICE IN (SELECT OFFICE

FROM OFFICES WHERE SALES > TARGET)

NAME

Mary Jones Sam Clark Bill Adams Sue Smith Larry Fitch

Подчиненный запрос возвращает список идентификаторов офисов, где фактический объем продаж превьпиает плановый (в учебной базе данных есть три таких офиса - с номерами 11,13 и 21). Главный запрос затем проверяет каждую строку таблицы sales-Reps , чтобы определить, работает ли соответствующий служащий в одном из отобранных офисов. Ниже приведено еще несколько аналогичных примеров:

Вывести список служащих, не работающих в офисах, которыми руководит Ларри Фитч (служащий с идентификатором 108).

SELECT NAME

FROM SALESREPS WHERE REP OFFICE NOT IN (SELECT OFFICE

FROM OFFICES WHERE MGR = 108)

NAME



Bill Adams Mary Jones Sam Clark Bob Smith Dan Roberts Paul Cruz

Вывести список всех клиентов, заказавших изделия компании ACI (идентификатор изготовителя -ACI, идентификаторы товаров начинаются с номера 4100) в период между январем и июнем 1990 года.

SELECT COMPANY FROM CUSTOMERS WHERE CUST NUM IN (SELECT DISTINCT CUST FROM ORDERS

WHERE MFR = ACI

AND PRODUCT LIKE 4100% AND ORDER DATE BETWEEN Ol-JAN-90 AND 30-JAN-90)

COMPANY

Acme Mfg. Ace International Holm & Landis JCP Inc.

Bo всех приведенных примерах подчиненный запрос возвращает в качестве результата столбец данных, а предложение where главного запроса проверяет, равно ли значение из строки таблицы главного запроса одному из значений в полученном столбце. Таким образом, проверка in с подчиненным запросом выполняется аналогично простой проверке in, за исключением того что множество значений задается подчиненным запросом, а не указьшается явно в инструкции select.

Проверка на существование (предикат EXISTS)

Как показано на рис. 9.5, в результате проверки на существование (предикат exists) можно выяснить, содержится ли в таблице результатов подчиненного запроса хотя бы одна строка. Аналогичной простой проверки не существует. Проверка на существование допустима только в подчиненных запросах.

-NOT-t

EXISTS -подчиненный запрос-

-NOT

, I. C.iTi . и rraa/iMiorpciMMO проверки МП сумсс<п-чани<}(пр!.1.\1

Вот пример запроса, который можно легко сформулировать, используя проверку на существование:

Вывести список товаров, на которые получен заказ стоимостью $25000 или больше .



1 ... 60 61 62 [ 63 ] 64 65 66 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика