- •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 **************
66 Понимание sql
______________________________________________________________________
CH 6
=============== SQL Execution Log ============
| |
| SELECT COUNT (*) |
| FROM Customers; |
| ==============================================|
| |
| ------- |
| 7 |
| |
| |
===============================================
Рисунок 6. 4: Подсчет строк вместо значений
строки, имеющие избыточные или NULL данные в этом поле.
DISTINCT не применим c COUNT (*), потому, что он не имеет никакого
действия в хорошо разработаной и поддерживаемой базе данных.
В такой базе данных, не должно быть ни таких строк, которые бы являлись
полностью пустыми, ни дубликатов ( первые не содержат никаких
данных, а последние полностью избыточны ). Если, с другой стороны,
все таки имеются полностью пустые или избыточные строки, вы
вероятно не захотите чтобы COUNT скрыл от вас эту информацию.
Включение дубликатов в агрегатные функции
Агрегатные функции могут также ( в большинстве реализаций )
использовать аргумент ALL, который помещается перед именем поля,
подобно DISTINCT, но означает противоположное: - включать дубликаты.
ANSI технически не позволяет этого для COUNT, но многие реализации
ослабляют это ограничение.
Различия между ALL и * когда они используются с COUNT -
* ALL использует имя_поля как аргумент.
* ALL не может подсчитать значения NULL.
Пока * является единственым аргументом который включает NULL
значения, и он используется только с COUNT; функции отличные от
COUNT игнорируют значения NULL в любом случае. Следующая
команда подсчитает(COUNT) число не-NULL значений в поле rating
CУММИРОВАНИЕ ДАННЫХ
С ПОМОЩЬЮ АГРЕГАТНЫХ ФУНКЦИЙ 67
______________________________________________________________________
в таблице Заказчиков ( включая повторения ):
SELECT COUNT ( ALL rating )
FROM Customers;
АГРЕГАТЫ ПОСТРОЕННЫЕ НА
СКАЛЯРНОМ ВЫРАЖЕНИИ
До этого, вы использовали агрегатные функции с одиночными полями как
аргументами. Вы можете также использовать агрегатные функции с
аргументами которые состоят из скалярных выражений включающих одно
или более полей. ( Если вы это делаете, DISTINCT не разрешается. )
Предположим, что таблица Порядков имеет еще один столбец который
хранит предыдущий неуплаченый баланс (поле blnc) для каждого заказчика.
Вы должны найти этот текущий баланс, добавлением суммы приобретений
к предыдущему балансу.
Вы можете найти наибольший неуплаченый баланс следующим образом:
SELECT MAX ( blnc + (amt) )
FROM Orders;
Для каждой строки таблицы, этот запрос будет складывать blnc и amt
для этого заказчика и выбирать самое большое значение которое он
найдет. Конечно, пока заказчики могут иметь многочисленые порядки,
их неуплаченый баланс оценивается отдельно для каждого порядка.
Возможно, порядок с более поздней датой будет иметь самый большой
неуплаченый баланс. Иначе, старый баланс должен быть выбран как в
запросе выше.
Фактически, имеются большое количество ситуаций в SQL где вы
можете использовать скалярные выражения с полями или вместо полей,
как вы увидете это в Главе 7.