- •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 **************
130 Понимание sql
______________________________________________________________________
ГЛ. 11
=============== SQL Execution Log ============
| |
| SELECT snum sname |
| FROM Salespeople main |
| WHERE 1 < |
| AND second.odate = 10/03/1990; |
| ============================================= |
| cnum cname city rating snum |
| ----- -------- ---- ------ ----- |
| 2001 Hoffman London 100 1001 |
| 2003 Liu San Jose 200 1002 |
| 2008 Cisneros San Jose 300 1007 |
| 2007 Pereira Rome 100 1004 |
=============================================
Рисунок 11.3: Нахождение продавцов с многочислеными заказчиками
ИСПОЛЬЗОВАНИЕ СООТНЕСЕННЫХ ПОДЗАПРОСОВ
ДЛЯ НАХОЖДЕНИЯ ОШИБОК
Иногда полезно выполнять запросы которые разработаны специально так
чтобы находить ошибки. Это всегда возможно при дефектной информации
которую можно ввести в вашу базу данных, и, если она введена, бывает
трудно ее определить. Следующий запрос не должен производить никако-
го вывода. Он просматривает таблицу Порядков чтобы видеть совпадают
ли поля snum и cnum в каждой строке таблицы Заказчиков и выводит каж-
дую строку где этого совпадения нет. Другими словами, запрос выясняет,
тот ли продавец кредитовал каждую продажу ( он воспринимает поле cnum,
как первичный ключ таблицы Заказчиков, который не будет иметь никаких
двойных значений в этой таблице ).
SELECT *
FROM Orders main
WHERE NOT snum =
( SELECT snum
FROM Customers
WHERE cnum = main.cnum );
СООТНЕСЕННЫЕ ПОДЗАПРОСЫ 131
______________________________________________________________________
При использовании механизма справочной целостности ( обсужденного
в Главе 19 ), вы можете быть гарантированы от некоторых ошибок такого
вида. Этот механизм не всегда доступен, хотя его использование жела-
тельно во всех случаях, причем поиск ошибки запроса описанный выше,
может быть еще полезнее.
СРАВНЕНИЕ ТАБЛИЦЫ С СОБОЙ
Вы можете также использовать соотнесенный подзапрос основанный на
той же самой таблице что и основной запрос. Это даст вам возможность
извлечть определенные сложные формы произведенной информации.
Например, мы можем найти все порядки со значениями сумм приобрете-
ний выше среднего для их заказчиков ( вывод показан в Рисунке 11.4 ):
SELECT *
FROM Orders outer
WHERE amt >
( SELECT AVG amt
FROM Orders inter
WHERE inner.cnum = outer.cnum );
=============== SQL Execution Log ==============
| |
| SELECT * |
| FROM Orders outer |
| WHERE amt > |
| (SELECT AVG (amt) |
| FROM Orders inner |
| WHERE inner.cnum = outer.cnum |
| =============================================== |
| onum amt odate cnum snum |
| ----- -------- ---------- ----- ------ |
| 3006 1098.19 10/03/1990 2008 1007 |
| 3010 1309.00 10/06/1990 2004 1002 |
| 3011 9891.88 10/06/1990 2006 1001 |
================================================
Рисунок 11.4: Соотнесение таблицы с собой