- •Iso (международной организацией по
- •2 Понимание sql
- •Что такое - реляционная база данных?
- •Порядок строк произволен
- •4 Понимание sql ___________________________________________________________________
- •Идентификация строк ( первичные ключи )
- •Столбцы именуются и нумеруются
- •8 Понимание sql
- •************** Работа с sql **************
- •Sql : обзор
- •Что делает ansi ?
- •Интерактивный и вложенный sql
- •14 Понимание sql
- •Субподразделения sql
- •16 Понимание sql
- •Sql несогласованности
- •Что такое - пользователь?
- •18 Понимание sql
- •Условия и терминология
- •************** Работа с sql **************
- •24 Понимание sql
- •26 Понимание sql
- •Переупорядочение столбца
- •28 Понимание sql
- •Параметры distinct
- •30 Понимание sql
- •32 Понимание sql
- •************* Работа с sql ***************
- •38 Понимание sql
- •40 Понимание sql
- •42 Понимание sql
- •44 Понимание sql
- •Использование специальных операторов в условиях
- •50 Понимание sql
- •52 Понимание sql
- •54 Понимание sql
- •56 Понимание sql
- •************** Работа с sql **************
- •Обобщение данных с помощью агрегатных функций
- •64 Понимание sql
- •66 Понимание sql
- •Включение дубликатов в агрегатные функции
- •Предложение group by
- •68 Понимание sql
- •Предложение having
- •70 Понимание sql
- •72 Понимание sql
- •************** Работа с sql **************
- •Формирование выводов запросов
- •Помещение текста в вашем выводе запроса
- •78 Понимание sql
- •80 Понимание sql
- •82 Понимание sql
- •Упорядочение вывода по номеру столбца
- •84 Понимание sql
- •************** Работа с sql **************
- •Запрашивание многочисленых таблиц также как одной
- •90 Понимание sql
- •92 Понимание sql
- •94 Понимание sql
- •************** Работа с sql **************
- •Объединение таблицы с собой
- •Псевдонимы
- •100 Понимание sql
- •Устранение избыточности
- •102 Понимание sql
- •Больше псевдонимов
- •104 Понимание sql
- •106 Понимание sql
- •************** Работа с sql **************
- •Вставка одного запроса внутрь другого
- •112 Понимание sql
- •114 Понимание sql
- •116 Понимание sql
- •In определяет набор значений, одно из которых должно совпадать с другим
- •118 Понимание sql
- •In является подходящим, если запрос может ограниченно производить одно
- •120 Понимание sql
- •122 Понимание sql
- •*************** Работа с sql *************
- •Соотнесенные подзапросы
- •130 Понимание sql
- •132 Понимание sql
- •Соотнесенные подзапросы в предложении having
- •134 Понимание sql
- •*************** Работа с sql *************
- •Использование оператора exists
- •140 Понимание sql
- •142 Понимание sql
- •144 Понимание sql
- •146 Понимание sql
- •************** Работа с sql **************
- •Использование оператора exists
- •152 Понимание sql
- •154 Понимание sql _____________________________________________________________________
- •156 Понимание sql
- •158 Понимание sql
- •160 Понимание sql
- •162 Понимание sql
- •Использование count вместо exists
- •166 Понимание sql
- •************** Работа с sql **************
146 Понимание sql
______________________________________________________________________
ГЛ. 12
================ РЕЗЮМЕ ================
EXISTS, хотя он и кажется простым, может быть одним из самых непонят-
ных операторов SQL. Однако, он облажает гибкостью и мощностью. В этой
главе, вы видели и овладели большинством возможностей которые EXISTS
дает вам. В дальнейшем, ваше понимание улучшеной логики подзапроса
расширится значительно.
Следующим шагом будет овладение тремя другими специальными операто-
рами которые берут подзапросы как аргументы, это - ANY, ALL, и SOME.
Как вы увидете в Главе 13, это - альтернативные формулировки некоторых
вещей которые вы уже использовали, но которые в некоторых случаях, могут
оказаться более предпочтительными.
ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА EXISTS 147
______________________________________________________________________
************** Работа с sql **************
1. Напишите запрос который бы использовал оператор EXISTS для извле-
чения всех продавцов которые имеют заказчиков с оценкой 300.
2. Как бы вы решили предыдущую проблему используя обьединение ?
3. Напишите запрос использующий оператор EXISTS который выберет
всех продавцов с заказчиками размещенными в их городах которые ими
не обслуживаются.
4. Напишите запрос который извлекал бы из таблицы Заказчиков каждого
заказчика назначенного к продавцу который в данный момент имеет
по крайней мере еще одного заказчика ( кроме заказчика которого вы
выберете ) с порядками в таблице Порядков ( подсказка: это может
быть похоже на структуру в примере с нашим трех-уровневым подзап-
росом ).
( См. Приложение A для ответов. )
12
Использование оператора exists
150 ПОНИМАНИЕ SQL
______________________________________________________________________
ГЛ. 13
ТЕПЕРЬ, КОГДА ВЫ ОВЛАДЕЛИ ОПЕРАТОРОМ EXISTS,
Вы узнаете приблизительно три специальных оператора ориентируемых
на подзапросы.
(Фактически, имеются только два, так как ANY и SOME - одно и то же.)
Если вы поймете работу этих операторов, вы будете понимать все типы
подзапросов предиката используемых в SQL . Кроме того, вы будете
представлены различным способам где данный запрос может быть
сформирован используя различные типы подзапросов предиката, и вы
поймете преимущества и недостатки каждого из этих подходов.
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) из их равняется значению города текущей строки
внешнего запроса.
ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ANY, ALL, И SOME 151
______________________________________________________________________
=============== 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, который просто определяет, производит ли под-
запрос результаты или нет, и фактически не использует эти результаты.
ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ IN ИЛИ EXISTS
ВМЕСТО ОПЕРАТОРА ANY
Мы можем также использовать оператор IN чтобы создать запрос аналогич-
ный предыдущему :
SELECT *
FROM Salespeople
WHERE city IN
( SELECT city
FROM Customers );
Этот запрос будет производить вывод показанный в Рисунке 13.2.
Однако, оператор ANY может использовать другие реляционные опера-
торы кроме равняется ( = ), и таким образом делать сравнения которые
являются выше возможностей IN. Например, мы могли бы найти всех
продавцов с их заказчиками которые следуют им в алфавитном поряд-
ке ( вывод показан на Рисунке 13.3)
SELECT *
FROM Salespeople
WHERE sname < ANY
( SELECT cname
FROM Customers);