
- •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 **************
154 Понимание sql _____________________________________________________________________
ГЛ. 13
Большинство пользователей, однако, находят ANY и ALL более удобными
в использовании чем EXISTS, который требует соотнесенных подзапросов.
Кроме того, в зависимости от реализации, ANY и ALL могут, по крайней
мере в теории, быть более эффективными чем EXISTS.
Подзапросы ANY или ALL могут выполняться один раз и иметь вывод ис-
пользуемый чтобы определять предикат для каждой строки основного зап-
роса. EXISTS, с другой стороны, берет соотнесенный подзапрос, который
требует чтобы весь подзапрос повторно выполнялся для каждой строки
основного запроса. SQL пытается найти наиболее эффективный способ вы-
полнения любой команды, и может попробовать преобразовать менее эф-
фективную формулу запроса в более эффективную (но вы не можете всегда
рассчитывать на получение самой эффективной формулировки ).
Основная причина для формулировки EXISTS как альтернативы ANY и ALL
в том что ANY и ALL могут быть несколько неоднозначен, из-за способа ис-
пользования этого термина в Английском языке, как вы это скоро увидите.
С приходом понимания различия способов формулирования данного запроса,
вы сможете поработать над процедурами которые сейчас кажутся Вам труд-
ными или неудобными.
КАК ANY МОЖЕТ СТАТЬ НЕОДНОЗНАЧНЫМ
Как подразумевалось выше, ANY не полностью однозначен. Если мы соз-
даем запрос чтобы выбрать заказчиков которые имеют больший рейтинг
чем любой заказчик в Риме, мы можем получить вывод который несколько
отличался бы от того что мы ожидали ( как показано в Рисунке 13.5 ):
SELECT *
FROM Customers
WHERE rating > ANY
( SELECT rating
FROM Customers
WHERE city = Rome );
В Английском языке, способ которым мы обычно склонны интерпретировать
оценку " больше чем любой ( где city = Rome ) " , должен вам сообщить
что это значение оценки должно быть выше чем значение оценки в каждом
случае где значение city = Rome. Однако это не так, в случае ANY - исполь-
зуемом в SQL . ANY оценивает как верно, если подзапрос находит любое
значение которое делает условие верным.
ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ANY, ALL, И SOME 155
______________________________________________________________________
=============== SQL Execution Log ============
| |
| SELECT * |
| FROM Customers |
| WHERE rating > ANY |
| (SELECT rating |
| FROM Customers |
| WHERE city = 'Rome'); |
| ============================================= |
| cnum cname city rating snum |
| ----- -------- ---- ------ ------ |
| 2002 Giovanni Rome 200 1003 |
| 2003 Liu San Jose 200 1002 |
| 2004 Grass Berlin 300 1002 |
| 2008 Cisneros San Jose 300 1007 |
=============================================
Рисунок 13.5 Как оператор "больше чем"( >) интерпретируется ANY
Если мы оценим ANY способом использующим грамматику Английского
Языка, то только заказчики с оценкой 300 будут превышать Giovanni,
который находится в Риме и имеет оценку 200. Однако, подзапрос ANY
также находит Periera в Риме с оценкой 100. Так как все заказчики с
оценкой 200 были выше этой, они будут выбраны, даже если имелся дру-
гой заказчик из Рима(Giovanni) чья оценка не была выше ( фактически,
то что один из выбранных заказчиков также находится в Риме несущест-
венно). Так как подзапрос произвел по крайней мере одно значение ко-
торое сделает предикат верным в отношении этих строк, строки были
выбраны.
Чтобы дать другой пример, предположим что мы должны были выбирать
все порядки сумм приоретений которые были больше чем по крайней мере
один из порядков на 6-е Октября:
SELECT *
FROM Orders
WHERE amt > ANY
( SELECT amt
FROM Orders
WHERE odate = 10/06/1990 );
Вывод для этого запроса показывается в Рисунке 13.6.