- •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 **************
116 Понимание sql
______________________________________________________________________
ГЛ. 10
одиночную агрегатную функцию с предложением WHERE что устранит неже-
лательные группы. Например, следующий запрос который должен найти сред-
нее значение комиссионных продавца в Лондоне -
SELECT AVG (comm)
FROM Salespeople
GROUP BY city
HAVlNG city = "London";
не может использоваться в подзапросе! Во всяком случае это не лучший спо-
соб формировать запрос. Другим способом может быть -
SELECT AVG (comm)
FROM Salespeople
WHERE city = "London";
ИСПОЛЬЗОВАНИЕ ПОДЗАПРОСОВ КОТОРЫЕ ВЫДАЮТ
МНОГО СТРОК С ПОМОЩЬЮ ОПЕРАТОРА IN
Вы можете использовать подзапросы которые производят любое число
строк если вы используете специальный оператор IN ( операторы BETWEEN,
LIKE, и IS NULL не могут использоваться с подзапросами ). Как вы помните,
In определяет набор значений, одно из которых должно совпадать с другим
термином уравнения предиката в порядке, чтобы предикат был верным.
Когда вы используете IN с подзапросом, SQL просто формирует этот набор из
вывода подзапроса. Мы можем, следовательно, использовать IN чтобы выпол-
нить такой же подзапрос который не будет работать с реляционным операто-
ром, и найти все атрибуты таблицы Порядков для продавца в Лондоне ( вывод
показывается в Рисунке 10.4 ):
SELECT *
FROM Orders
WHERE snum IN
( SELECT snum
FROM Salespeople
WHERE city = "LONDON" );
РАЗМЕЩЕНИЕ ЗАПРОСОВ ВНУТРИ ДРУГА ДРУГА 117
______________________________________________________________________
=============== SQL Execution Log ==============
| |
| SELECT * |
| FROM Orders |
| WHERE snum IN |
| (SELECT snum |
| FROM Salespeople |
| WHERE city = 'London'); |
| =============================================== |
| onum amt odate cnum snum |
| ----- -------- ---------- ----- ------ |
| 3003 767.19 10/03/1990 2001 1001 |
| 3002 1900.10 10/03/1990 2007 1004 |
| 3006 1098.19 10/03/1990 2008 1007 |
| 3008 4723.00 10/05/1990 2006 1001 |
| 3011 9891.88 10/06/1990 2006 1001 |
================================================
Рисунок 10. 4: Использование подзапроса с IN
В ситуации подобно этой, подзапрос - более прост для пользователя чтобы
понимать его и более прост для компьютера чтобы его выполнить, чем если
бы Вы использовали обьединение:
SELECT onum, amt, odate, cnum, Orders.snum
FROM Orders, Salespeople
WHERE Orders.snum = Salespeople.snum
AND Salespeople.city = "London";
Хотя это и произведет тот же самый вывод что и в примере с подзапросом,
SQL должен будет просмотреть каждую возможную комбинацию строк из
двух таблиц и проверить их снова по составному предикату.
Проще и эффективнее извлекать из таблицы Продавцов значения поля snum
где city = "London", и затем искать эти значения в таблице Порядков, как это
делается в варианте с подзапросом. Внутренний запрос дает нам snums=1001
и snum=1004. Внешний запрос, затем, дает нам строки из таблицы Порядков
где эти поля snum найдены.
Строго говоря, быстрее или нет работает вариант подзапроса, практически
зависит от реализации - в какой программе вы это используете.
Эта часть вашей программы называемой - оптимизатор, пытается найти
наиболее эффективный способ выполнения ваших запросов.