
- •Введение
- •Общая схема банка данных в системе
- •Основные понятия
- •Базы данных
- •Банк данных как система управления основные понятия
- •Банк данных как автоматизированная система
- •Субд с включающим языком
- •Информационные системы
- •Документальные аис основные понятия дескриптор
- •Фактографические аис
- •Основные понятия
- •Основные данные
- •Уровни моделей
- •Классификация моделей
- •Роль подсхемы
- •Этапы проектирования базы данных
- •Архитектура банка данных
- •Последовательность действий при чтении записи
- •Инфологическое проектирование базы данных
- •Модели данных и подъязыки данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Реляционные базы данных
- •Алгебра отношений
- •Преимущества реляционных бд
- •Отношения
- •Нормализация отношений
- •Функциональная зависимость
- •Полная функциональная зависимость.
- •Проектирование баз данных.
- •Специальные операции над отношениями
- •Операции над отношениями.
- •Централизация и децентрализация процессов обработки данных.
- •Традиционный набор операций
- •Нормализация отношений
- •Исчисление отношений
- •Вторая и третья нормальные формы.
- •26. Язык запросов sql
- •1 Основы sql
- •Многотабличные запросы на чтение (объединения)
- •Сортировка результатов запроса (предложение order by)
- •Объединение результатов нескольких запросов (union)*
- •Запрос на объединение и сортировка *
- •Многотабличные запросы на чтение (объединения)
- •Простое объединение таблиц (объединение по равенству)
- •Запросы с использованием отношения предок/потомок
- •Объединения с условием для отбора строк
- •Несколько связанных столбцов
- •Запросы на чтение к трем и более таблицам
- •Чтение всех столбцов
- •Самообъединения
- •Псевдонимы таблиц
- •Правила выполнения многотабличных запросов
- •Внешнее объединение таблиц *
- •Итоговые запросы на чтение
- •Агрегатные функции
- •Агрегатные функции в списке возвращаемых столбцов
- •Запросы с группировкой (предложение group by)
- •Несколько столбцов группировки
- •Ограничения на запросы с группировкой
- •Вложенные запросы на чтение
- •Внешние ссылки
- •Вложенные запросы и объединения
- •Связанные вложенные запросы
- •Однострочный оператор insert
- •В интерактивном режиме удобно не включать в оператор insert список столбцов, так как это уменьшает длину оператора. В случае программного
- •Многострочный оператор insert
- •Удаление существующих данных
- •Удаление всех строк
- •Оператор delete с вложенным запросом *
- •Обновление существующих данных
-
Псевдонимы таблиц
Как уже было сказано в предыдущем параграфе, псевдонимы таблиц необходимы в запросах, включающих самообъединения. Однако псевдоним можно использовать в любом запросе (например, если запрос касается таблицы другого пользователя или если имя таблицы очень длинное и использовать его в полных именах столбцов утомительно). Следующий запрос ссылается на таблицу birthdays, принадлежащую пользователю по имени sam:
Если вместо имен двух таблиц использовать псевдонимы S и В, то и вводить, и читать этот запрос будет легче:
Предложение from для многотабличного оператора select содержит псевдонимы таблиц и выполняет две важные функции:
• В предложении from указаны все таблицы, из которых считываются данные. Любой столбец, указанный в операторе select, должен принадлежать одной из таблиц, заданных в предложении from. (Имеется исключение для внешних ссылок, содержащихся во вложенном запросе).
• Предложение from содержит метку таблицы, которая в операторе select используется для идентификации таблицы в полном имени столбца. Если в предложении from вводится псевдоним таблицы, то он становится ее меткой; в противном случае меткой становится имя таблицы в том виде, в каком оно присутствует в предложении from. Единственное требование, предъявляемое к меткам таблиц в предложении from, состоит в том, что все они должны отличаться друг от друга. Стандарт SQL2 допускает вставку ключевого слова as между именем и псевдонимом таблицы. Хотя это ключевое слово облегчает чтение предложения from, оно поддерживается не во всех версиях SQL.
ПРОИЗВОДИТЕЛЬНОСТЬ ПРИ ОБРАБОТКЕ МНОГОТАБЛИЧНЫХ ЗАПРОСОВ
С увеличением количества таблиц в запросе резко возрастает объем работы; необходимой для выполнения запроса. В самом языке SQL нет ограничений на число таблиц, объединяемых в одном запросе. Но некоторые программные продукты, использующие SQL, ограничивают число таблиц; чаще всего их количество ограничивается восемью. На практике высокие затраты на обработку многотабличных запросов во многих приложениях накладывают еще более сильные ограничения на количество таблиц.
В приложениях, предназначенных для оперативной обработки транзакций (OLTP), запрос обычно ссылается только на одну или две таблицы. В этих приложениях время ответа является критичной величиной — пользователь, как правило, вводит один или два элемента данных и ему требуется получить ответ от базы данных в течение одной или двух секунд. Вот некоторые типичные OLTP-запросы для учебной базы данных:
• Пользователь вводит в какую-нибудь форму идентификатор клиента, и СУБД выводит на экран лимит кредита, состояние счета и другие данные об этом клиенте (запрос к одной таблице). .
• Пользователь с помощью специального устройства сканирует с упаковки номер товара, и СУБД выводит на экран наименование и цену товара (запрос к одной таблице).
• Пользователь вводит имя служащего, и программа выдает список текущих заказов, принятых данным служащим (запрос к двум таблицам).
В отличие от OLTP-приложений, в приложениях, предназначенных для поддержки принятия решений, запрос, как правило, обращается ко многим таблицам и использует сложные отношения, существующие в базе данных. В этих приложениях результаты запроса часто используются для принятия важных решений, поэтому вполне приемлемыми считаются запросы, которые выполняются несколько минут или даже несколько часов. Вот типичные для учебной базы данных запросы, поддерживающие принятие решений:
• Пользователь вводит название офиса, и программа выдает список двадцати пяти самых больших заказов, принятых служащими этого офиса (запрос к трем таблицам).
• Отчет суммирует продажи каждого служащего по типам товаров, показывая, какой служащий какие товары продал (запрос к трем таблицам).
• Руководитель рассматривает возможность открытия нового офиса в Сиэтле и выполняет запрос для анализа заказов, клиентов, товаров и служащих (запрос к четырем таблицам).
Структура объединения таблиц
Для простых объединений таблиц довольно легко написать правильный оператор select на основе запроса, выраженного на обычном языке. И наоборот, глядя на оператор select, можно легко определить, что он делает. Однако если в объединении участвует много таблиц или используется сложное условие поиска, бывает не так-то просто определить, какую функцию выполняет тот или иной оператор select. По этой причине необходимо дать более точное определение понятию "объединение".
Умножение таблиц
Объединение представляет собой частный случай более общей комбинации данных из двух таблиц, известной под названием декартово произведение (или просто произведение) двух таблиц. Произведение двух таблиц представляет собой таблицу (называемую таблицей произведения), состоящую из всех возможных пар строк двух таблиц. Столбцами таблицы произведения являются все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы.
Если создать запрос к двум таблицам без предложения where, то таблица результатов запроса окажется произведением двух таблиц. Например, результатом запроса
будет произведение таблиц salesreps и offices, состоящее из всех возможных комбинаций служащий/город. Таблица результатов запроса будет иметь 50 строк (5 офисов * 10 служащих = 50 комбинаций). Обратите внимание, что для объединения двух упомянутых таблиц используется точно такой же оператор select, но только с предложением where, содержащим условие сравнения связанных столбцов:
Объединение двух таблиц является произведением этих таблиц, из которого удалены некоторые строки. Удаляются именно те строки, которые не удовлетворяют условию сравнения связанных столбцов (условию поиска) для данного объединения.
Понятие произведения важно из-за того, что оно входит в формальное определение правил выполнения многотабличных запросов.