- •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 **************
102 Понимание sql
______________________________________________________________________
ГЛ. 9
первым псевдонимом, и проверять ее в комбинации с каждой строкой
таблицы Порядков под вторым псевдонимом, одну за другой. Если комби-
нация строк удовлетворяет предикату, она выбирается для вывода. В этом
случае предикат будет рассматривать эту строку, найдет строку где поле
cnum=2008 а поле snum=1007, и затем рассмотрит каждую следующую
строку с тем же самым значением поля cnum. Если он находит что какая
-то из их имеет значение отличное от значения поля snum, предикат
будет верен, и выведет выбранные поля из текущей комбинации строк.
Если же значение snum с данным значением cnum в наш таблице сов-
падает, эта команда не произведет никакого вывода.
Больше псевдонимов
Хотя обьединение таблицы с собой - это первая ситуация когда понятно
что псевдонимы необходимы, вы не ограничены в их использовании что
бы только отличать копию одлной таблицы от ее оригинала. Вы можете
использовать псевдонимы в любое время когда вы хотите создать альтер-
нативные имена для ваших таблиц в команде. Например, если ваши
таблицы имеют очень длинные и сложные имена, вы могли бы определить
простые односимвольные псевдонимы, типа a и b, и использовать их вмес-
то имен таблицы в предложении SELECT и предикате. Они будут также
использоваться с соотнесенными подзапросами(обсуждаемыми в Главе 11).
ЕЩЕ БОЛЬШЕ КОМПЛЕКСНЫХ ОБЪЕДИНЕНИЙ
Вы можете использовать любое число псевдонимов для одной таблицы
в запросе, хотя использование более двух в данном предложении
SELECT * будет излишеством.
Предположим что вы еще не назначили ваших заказчиков к вашему
продавцу. Компании должна назначить каждому продавцу первонача-
льно трех заказчиков, по одному для каждого рейтингового значения.
Вы лично можете решить какого заказчика какому продавцу назначить,
но следующий запрос вы используете чтобы увидеть все возможные
комбинации заказчиков которых вы можете назначать.
( Вывод показывается в Рисунке 9.3 ):
SELECT a.cnum, b.cnum, c.cnum
FROM Customers a, Customers b, Customers c
WHERE a.rating = 100
AND b.rating = 200
AND c.rating = 300;
ОБЪЕДИНЕНИЕ ТАБЛИЦ С СОБОЙ 103
______________________________________________________________________
=============== SQL Execution Log ==============
| |
| AND c.rating = 300; |
| =============================================== |
| cnum cnum cnum |
| ----- ------ ------ |
| 2001 2002 2004 |
| 2001 2002 2008 |
| 2001 2003 2004 |
| 2001 2003 2008 |
| 2006 2002 2004 |
| 2006 2002 2008 |
| 2006 2003 2004 |
| 2006 2003 2008 |
| 2007 2002 2004 |
| 2007 2002 2008 |
| 2007 2003 2004 |
| 2007 2003 2008 |
=================================================
Рисунок 9.3 Комбинация пользователей с различными значениями
рейтинга
Как вы можете видеть, этот запрос находит все комбинации заказчиков с
тремя значениями оценки, поэтому первый столбец состоит из заказчиков
с оценкой 100, второй с 200, и последний с оценкой 300. Они повторяются
во всех возможных комбинациях. Это - сортировка группировки которая
не может быть выполнена с GROUP BY или ORDER BY, поскольку они
сравнивают значения только в одном столбце вывода.
Вы должны также понимать, что не всегда обязательно использовать
каждый псевдоним или таблицу которые упомянуты в предложении FROM
запроса, в предложении SELECT. Иногда, предложение или таблица стано-
вятся запрашиваемыми исключительно потому что они могут вызываться в
предикате запроса. Например, следующий запрос находит всех заказчиков
размещенных в городах где продавец Serres ( snum 1002 ) имеет заказиков
( вывод показывается в Рисунке 9.4 ):
SELECT b.cnum, b.cname
FROM Customers a, Customers b
WHERE a.snum = 1002
AND b.city = a.city;