- •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 **************
90 Понимание sql
______________________________________________________________________
ГЛ. 8
Так как это поле city имеется и в таблице Продавцов и таблице
Заказчиков, имена таблиц должны использоваться как префиксы. Хотя
это необходимо только когда два или более полей имеют одно и то же
имя, в любом случае это хорошая идея включать имя таблицы в обьеди-
нение для лучшего понимания и непротиворечивости. Несмотря на это,
мы будем, в наших примерах далее, использовать имена таблицы только
когда необходимо, так что будет ясно, когда они необходимы а когда нет.
Что SQL в основном делает в обьединении - так это исследует
каждую комбинацию строк двух или более возможных таблиц, и
проверяет эти комбинации по их предикатам. В предыдущем примере,
требовалась строка продавца Peel из таблицы Продавцов и объединение
ее с каждой строкой таблицы Пользователей, по одной в каждый момент
времени.
Если комбинация производит значение которое делает предикат верным,
и если поле city из строк таблиц Заказчика равно London, то Peel - это
то запрашиваемое значение которое комбинация выберет для вывода. То же
самое будет затем выполнено для каждого продавца в таблице Продавцов
( у некоторых из которых небыло никаких заказчиков в этих городах).
ОБЪЕДИНЕНИЕ ТАБЛИЦ ЧЕРЕЗ СПРАВОЧНУЮ ЦЕЛОСТНОСТЬ
Эта особенность часто используется просто для эксплуатации связей
встроенных в базу данных. В предыдущем примере, мы установили
связь между двумя таблицами в обьединении. Это прекрасно.
Но эти таблицы, уже были соединены через snum поле. Эта связь
называется состоянием справочной целостности, как мы уже говорили
в Главе 1. Используя обьединение можно извлекать данные в терминах
этой связи. Например, чтобы показать имена всех заказчиков соответст-
вующих продавцам которые их обслуживают, мы будем использовать
такой запрос:
SELECT Customers.cname, Salespeople.sname
FROM Customers, Salespeople
WHERE Salespeople.snum = Customers.snum;
Вывод этого запроса показывается в Рисунке 8.2.
ЗАПРАШИВАНИЕ МНОГОЧИСЛЕНЫХ ТАБЛИЦ КАК ОДНОЙ 91
______________________________________________________________________
Это - пример обьединения, в котором столбцы используются для определе-
ния предиката запроса, и в этом случае, snum столбцы из обеих таблиц,
удалены из вывода. И это прекрасно.
Вывод показывает какие заказчики каким продавцом обслуживаются; зна-
чения поля snum которые устанавливают связь - отсутствуют. Однако если
вы введете их в вывод, то вы должны или удостовериться что вывод понятен
сам по себе или обеспечить коментарий к данным при выводе.
=============== SQL Execution Log ============
| SELECT Customers.cname, Salespeople.sname, |
| FROM Salespeople, Customers |
| WHERE Salespeople.snum = Customers.snum |
| ============================================= |
| cname sname |
| ------- -------- |
| Hoffman Peel |
| Giovanni Axelrod |
| Liu Serres |
| Grass Serres |
| Clemens Peel |
| Cisneros Rifkin |
| Pereira Motika |
=============================================
Рисунок 8.2: Объединение продавцов с их заказчикам
ОБЪЕДИНЕНИЯ ТАБЛИЦ ПО РАВЕНСТВУ ЗНАЧЕНИЙ
В СТОЛБЦАХ И ДРУГИЕ ВИДЫ ОБЪЕДИНЕНИЙ
Обьединения которые используют предикаты основанные на равенствах
называются - объединениями по равенству. Все наши примеры в этой главе
до настоящего времени, относились именно к этой категории, потому что все
условия в предложениях WHERE базировались на математических выраже-
ниях использующих знак равно ( = ). Строки 'city = 'London' и
'Salespeople.snum = Orders.snum ' - примеры таких типов равенств най-
денных в предикатах.
Объединения по равенству - это вероятно наиболее общий вид объединения,
но имеются и другие. Вы можете, фактически, использовать любой из