
- •Введение
- •Общая схема банка данных в системе
- •Основные понятия
- •Базы данных
- •Банк данных как система управления основные понятия
- •Банк данных как автоматизированная система
- •Субд с включающим языком
- •Информационные системы
- •Документальные аис основные понятия дескриптор
- •Фактографические аис
- •Основные понятия
- •Основные данные
- •Уровни моделей
- •Классификация моделей
- •Роль подсхемы
- •Этапы проектирования базы данных
- •Архитектура банка данных
- •Последовательность действий при чтении записи
- •Инфологическое проектирование базы данных
- •Модели данных и подъязыки данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Реляционные базы данных
- •Алгебра отношений
- •Преимущества реляционных бд
- •Отношения
- •Нормализация отношений
- •Функциональная зависимость
- •Полная функциональная зависимость.
- •Проектирование баз данных.
- •Специальные операции над отношениями
- •Операции над отношениями.
- •Централизация и децентрализация процессов обработки данных.
- •Традиционный набор операций
- •Нормализация отношений
- •Исчисление отношений
- •Вторая и третья нормальные формы.
- •26. Язык запросов sql
- •1 Основы sql
- •Многотабличные запросы на чтение (объединения)
- •Сортировка результатов запроса (предложение order by)
- •Объединение результатов нескольких запросов (union)*
- •Запрос на объединение и сортировка *
- •Многотабличные запросы на чтение (объединения)
- •Простое объединение таблиц (объединение по равенству)
- •Запросы с использованием отношения предок/потомок
- •Объединения с условием для отбора строк
- •Несколько связанных столбцов
- •Запросы на чтение к трем и более таблицам
- •Чтение всех столбцов
- •Самообъединения
- •Псевдонимы таблиц
- •Правила выполнения многотабличных запросов
- •Внешнее объединение таблиц *
- •Итоговые запросы на чтение
- •Агрегатные функции
- •Агрегатные функции в списке возвращаемых столбцов
- •Запросы с группировкой (предложение group by)
- •Несколько столбцов группировки
- •Ограничения на запросы с группировкой
- •Вложенные запросы на чтение
- •Внешние ссылки
- •Вложенные запросы и объединения
- •Связанные вложенные запросы
- •Однострочный оператор insert
- •В интерактивном режиме удобно не включать в оператор insert список столбцов, так как это уменьшает длину оператора. В случае программного
- •Многострочный оператор insert
- •Удаление существующих данных
- •Удаление всех строк
- •Оператор delete с вложенным запросом *
- •Обновление существующих данных
-
Многострочный оператор insert
Многострочный оператор insert добавляет в целевую таблицу несколько строк (более одной). В этой разновидности оператора insert значения данных для новых строк явно не задаются. Источником новых строк служит запрос на чтение, содержащийся внутри оператора insert.
Добавление строк со значениями, взятыми из той же базы данных, может сперва показаться странным, но иногда оказывается необходимым. Предположим, нам требуется скопировать номера, даты и стоимости всех заказов, сделанных до 1 января 1990 года, из таблицы orders в другую таблицу с именем oldorders, Многострочный оператор insert позволяет скопировать данные компактно и быстро:
Хотя многострочный оператор I nse rt выглядит сложнее однострочного, в действительности он является очень простым. В нем, как и в однострочном операторе insert, задаются таблица и столбцы, в которые заносятся новые элементы данных. Оставшаяся часть оператора представляет собой запрос, считывающий данные из таблицы orders. Вначале выполняется запрос к таблице orders, а затем таблица результатов этого запроса построчно добавляется в таблицу oldorders.
Вот еще одна ситуация, когда можно использовать многострочный оператор insert. Предположим, требуется проанализировать, что именно приобретают клиенты, и для этого необходимо просмотреть информацию о клиентах и служащих, имеющих большие заказы - стоимостью свыше $15000. Запросы, которые необходимо для этого выполнить, объединяют информацию из таблиц customers, salesreps и orders. В маленькой учебной базе данных эти трехтабличные запросы будут выполняться довольно быстро, но в реальной корпоративной базе данных, содержащей тысячи строк информации, выполнение таких запросов заняло бы длительное время
Вместо выполнения нескольких длинных трехтабличных запросов лучше создать для требуемых данных новую таблицу с именем bigorders, имеющую следующую структуру:
Столбец |
Информация |
amount |
Стоимость заказа (из таблицы orders) |
company |
Имя клиента (из таблицы customers) |
name |
Имя служащего (из таблицы salesreps) |
perf |
Перевыполнение/недовыполнение плана (вычисляется по таблице SALESREPS) |
mfr |
Идентификатор производителя (из таблицы orders) |
product |
Идентификатор товара (из таблицы orders) |
qty |
Заказанное количество (из таблицы orders) |
После создания таблицы bigqrders ее можно заполнить данными с помощью следующего оператора insert:
В больших базах данных выполнение такого оператора insert займет некоторое время, поскольку он содержит запрос к трем таблицам. После того как выполнение оператора завершится, в таблице bigorders будет содержаться копия данных из других таблиц. Кроме того, таблица bigorders не будет автоматически изменяться при добавлении в базу данных новых заказов, поэтому данные в ней могут быстро устареть. Оба этих фактора выглядят как недостаток. Однако последующие запросы на чтение к таблице bigorders будут представлять собой запросы к одной таблице. Следует также отметить, что каждый из этих запросов будет выполняться намного быстрее, чем если бы он использовал объединение. Следовательно, копирование данных можно назвать хорошим методом проведения анализа, особенно если исходные таблицы являются большими.
На запрос, содержащийся внутри многострочного оператора insert, стандарт SQL1 накладывает несколько логических ограничений:
• В запрос нельзя включать предложение order by. He имеет смысла сортировать таблицу результатов запроса, поскольку она добавляется в таблицу, которая, как и все остальные, не упорядочена.
• Таблица результатов запроса должна содержать такое же количество столбцов, что и оператор insert (или полностью всю целевую таблицу, если список столбцов опущен), а типы данных соответствующих столбцов таблицы результатов запроса и целевой таблицы должны быть совместимыми.
• Запрос не может быть запросом на объединение нескольких различных операторов select.
• Имя целевой таблицы оператора insert не может присутствовать в предложении from запроса на чтение или любого запроса, вложенного в него. Тем самым запрещается добавление таблицы самой в себя. В стандарте SQL2 последние два ограничения были ослаблены и в запросе допускаются объединения операторов, объединения таблиц и выражения; разрешается также "самодобавление".
Если принять, что в типичном случае ввод одной строки занимает полсекунды, то для интерактивного режима это, по-видимому, допустимое быстродействие. Но если необходимо загрузить 50000 строк данных, то такое быстродействие неприемлемо. Загрузка данных в этом случае заняла бы свыше шести часов.
По этой причине во всех коммерческих СУБД имеются средства пакетной загрузки, которые с высокой скоростью загружают данные из файла в таблицу. В стандарте SQL этот тип загрузки не упоминается, и обычно он осуществляется автономными служебными утилитами без участия SQL. Утилиты различных поставщиков СУБД немного отличаются набором функций, команд и свойств.