- •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 **************
Использование count вместо exists
Подчеркнем, что все формулировки с ANY и ALL могут быть в точности
выполнены с EXISTS, в то время как наоборот будет неверно. Хотя в этом
случае, также верно и то что EXISTS и NOT EXISTS подзапросы могут
обманывать при выполнении тех же самых подзапросов с COUNT(*)
в предложения SELECT подзапроса. Если больше чем ноль строк выводе
будет подсчитано, это эквивалентно EXISTS; в противном случае это рабо-
тает также как NOT EXISTS. Следующее является этому примером (вывод
показывается в Рисунке 13.12 ):
ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ANY, ALL, И SOMI: 165
______________________________________________________________________
SELECT *
FROM Customers outer
WHERE NOT EXISTS
( SELECT *
FROM Customers inner
WHERE outer.rating < = inner.rating
AND inner.city = 'Rome' );
=============== SQL Execution Log ============
| |
| SELECT * |
| FROM Customers outer |
| WHERE NOT EXISTS |
| (SELECT * |
| FROM Customers inner |
| WHERE outer.rating <= inner.rating |
| AND inner.city = 'Rome'); |
| ============================================= |
| cnum cname city rating snum |
| ----- -------- ---- ------ ------ |
| 2004 Grass Berlin 300 1002 |
| 2008 Cisneros San Jose 300 1007 |
=============================================
Рисунок 13.12: Использование EXISTS с соотнесенным подзапросом
Это должно также быть выполнено как
SELECT *
FROM Customers outer
WHERE 1 >
( SELECT COUNT (*)
FROM Customers inner
WHERE outer.rating < = inner.rating
AND inner.city = 'Rome' );
Вывод к этому запросу показывается в Рисунке 13.13.
Теперь Вы начинаете понимать сколько способов имеется в SQL. Если
это все кажется несколько путанным на этой стадии, нет причины волно-
ваться. Вы обучаетесь чтобы использовать ту технику которая лучше всего
отвечает вашим требованиям и наиболее понятна для вас.
Начиная с этого места, мы хотим показать Вам большое количество воз-
можностей, что бы вы могли найти ваш собственный стиль.
166 Понимание sql
______________________________________________________________________
ГЛ. 13
=============== SQL Execution Log ============
| |
| SELECT * |
| FROM Customers outer |
| WHERE 1 > |
| (SELECT COUNT (*) |
| FROM Customers inner |
| WHERE outer.rating <= inner.rating |
| AND inner.city = 'Rome'); |
| ============================================= |
| cnum cname city rating snum |
| ----- -------- ---- ------ ------ |
| 2004 Grass Berlin 300 1002 |
| 2008 Cisneros San Jose 300 1007 |
=============================================
Рисунок 13.13: Использование COUNT вместо EXISTS
============== РЕЗЮМЕ ================
Итак, вы прошли много чего в этой главе. Подзапросы не простая тема,
и мы потратили много время чтобы показать их разновидности и неодноз-
начности. То чему Вы теперь научились, вещи достаточно глубокие.
Вы знаете несколько технических решений одной проблемы, и поэтому вы
можете выбрать то которое более подходит вашим целям. Кроме того, вы
поняли, как различные формулировки будет обрабатывать пустые значения
(NULL) и ошибки.
Теперь, когда вы полностью изучили запросы, наиболее важный, и вероятно
наиболее сложный, аспект SQL, объем другого материала будет относительно
прост для понимания.
Мы имеем еще одну главу о запросах, которая покажет вам как объединить
выводы любого числа запросов в единое тело, с помощью формирования
объединения многочисленых запросов используя оператор UNION.
ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ ANY, ALL, SOME 167
______________________________________________________________________