
- •Введение
- •Глава 1 информационные системы
- •1.1 Информация как ресурс
- •1.2 Файловые системы
- •1.3 Информационные системы, использующие базы данных
- •1.3.1 Иерархические и сетевые модели данных
- •1.3.2 Реляционные системы управления базами данных
- •1.4 Компоненты информационных систем
- •1.4.1 Технические средства
- •1.4.2 Программное обеспечение
- •1.4.3 Данные
- •1.4.4 Пользователи
- •1.4.5 Организационное обеспечение
- •1.4.6 Отношения между компонентами системы
- •1.5 Основы проектирования информационных систем
- •1.5.1 Жизненный цикл программного обеспечения
- •1.5.2 Модели жизненного цикла по
- •1.5.3 Подходы к проектированию ис
- •1.6 Задания и вопросы для повторения
- •2.2 Подходы к проектированию баз данных
- •2.3 Создание базы данных
- •2.4 Основы концептуального проектирования баз данных
- •Объекты и отношения
- •2.3.2. Атрибуты
- •2.3.3 Ключи
- •2.3.4 Наследование
- •2.3.5 Составные объекты
- •2.3.6 Моделирование концептуальных и физических объектов
- •2.4 Реляционная модель данных
- •2.4.1 Поддержка целостности данных
- •Процесс нормализации таблиц
- •2.4.3 Пример построения нормализованной базы данных
- •2.4.4 Преобразование концептуальной модели в реляционную
- •2.5 Элементы er-моделирования
- •2.5.1 Основные понятия модели «сущность-связь»
- •2.5.2 Основные графические обозначения элементов модели
- •2.6 Заключительный этап проектирования
- •2.7 Сравнение концептуального и реляционного моделирования
- •2.8 Вопросы и задания для повторения
- •2.9 Упражнения и задачи
- •2.10 Проекты и профессиональные вопросы
- •Глава 3 реляционная алгебра и реляционное исчисление
- •3.1 Реляционная алгебра
- •3.1.1 Обзор реляционной алгебры
- •3.1.2 Теоретико-множественные операторы
- •3.1.3 Специальные реляционные операторы
- •3.1.4 Зависимые реляционные операторы
- •3.1.5 Примитивные реляционные операторы
- •3.2 Реляционное исчисление
- •3.2.1 Целевой список и определяющее выражение
- •3.2.2 Квантор существования
- •3.2.3 Квантор всеобщности
- •3.3 Заключение
- •3.4 Вопросы на повторение
- •3.5 Упражнения и задачи
- •Глава 4 управление реляционной базой данных с помощью sql
- •4.1 Элементы Transact-sql
- •Комментарии
- •4.1.2 Алфавит
- •4.1.3 Идентификаторы
- •Выражения
- •4.1.5 Ключевые слова
- •Операторы
- •4.1.7 Логические операторы
- •Типы данных
- •- Функции Transact-sql
- •4.2 Выборка данных из таблиц
- •4.2.1 Структура команды select
- •Результаты выборки
- •Отбор столбцов
- •Select Фамилия, Город from Гостиница.Dbo.Клиент
- •4.2.4 Определение заголовков столбцов
- •Выражения в выборках
- •Отбор записей
- •Порядок вывода данных
- •Котов Кузьма Кузьмич
- •Группировка данных
- •Отбор данных для групп
- •4.2.10 Директива compute
- •Выборка данных из нескольких таблиц
- •Объединение с помощью предложения where
- •Внутреннее объединение
- •4.2.14 Объединение и опция join
- •Оператор union
- •Подзапросы и структурированные запросы
- •Создание таблицы на основе выборки
- •Предложение for browse
- •4.3 Модификация данных
- •Добавление данных
- •Изменение данных
- •Удаление строк
- •Управляющие конструкции
- •Создание таблиц базы данных
- •4.6 Транзакции и блокировки
- •4.6.1 Понятие транзакций и блокировок
- •Управление транзакциями
- •Явные транзакции
- •Автоматические транзакции
- •Неявные транзакции
- •Управление блокировками
- •4.7 Хранимые процедуры
- •4.7.1 Типы хранимых процедур
- •Создание хранимых процедур
- •4.8 Триггеры
- •Создание триггера
- •Ограничения при создании триггеров
- •Использование триггеров
- •Вопросы на повторение
- •4.10 Упражнения и задачи
- •4.11 Проекты и профессиональные вопросы
- •Заключение
- •Приложение а sql скрпит, для создания таблиц согласно модели бд "Университет"
- •Литература
Оператор union
Оператор UNION позволяет объединить результаты нескольких запросов. Он полезен, если требуется просмотреть аналогичные данные из разных таблиц. Его синтаксис:
Оператор_1 SELECT
UNION [ALL]
Оператор_2 SELECT
UNION [ALL]
…
Оператор_N SELECT
При работе с оператором UNION необходимо помнить, что он удаляет дублирующие значения. Для включения всех записей в результат выборки необходимо использовать оператор ALL сразу за оператором UNION. Все списки выборки должны совпадать по количеству, а соответствующие элементы выборок (столбцы, константы, выражения) по типу и по номеру в списке. Имена столбцов в любом случае определяются в первой команде SELECT. Если в последующих выборках не хватает столбцов, то вместо них необходимо подставить константы.
Подзапросы и структурированные запросы
Подзапрос – дополнительный метод манипулирования несколькими таблицами. Другими словами, это инструкция SELECT, вложенная:
в предложение WHERE, HAVING или SELECT;
в инструкцию INSERT, UPDATE или DELETE;
в другой подзапрос.
Именно возможность вложение инструкций SQL друг в друга является причиной, по которой SQL получил свое название – Structured Query Language (структурированный язык запросов). Подзапросы могут иметь один из трех типов в зависимости от предложения WHERE внешнего запроса:
подзапросы, которые не возвращают ни одного или возвращают несколько элементов и начинаются со слова IN или оператора сравнения и содержат ключевые слова ANY или ALL;
подзапросы, которые возвращают единственное значение и начинаются с простого оператора сравнения;
подзапросы, которые представляют собой проверку (тест) на существование и начинаются с ключевого слова EXISTS.
Рассмотрим примеры.
Чтобы узнать фамилии клиентов, которые останавливались в гостинице в феврале, можно выполнить следующий запрос:
SELECT Фамилия FROM Клиент
WHERE Код_клиента IN
(SELECT Код_клиента FROM Проживает
WHERE MONTH(П.Дата_прибытия) = 2
AND YEAR(П.Дата_прибытия) = 2006)
Рассмотрим, для чего нужны ключевые слова ANY и ALL. Если воспользоваться оператором сравнения >, то >ALL означает «больше, чем каждое значение». ANY означает «больше любого значения». Например, определим список клиентов, прибывших в гостиницу после Алексеева и Поповича.
SELECT К.Фамилия
FROM Проживает П, Клиент К
WHERE П.Код_клиента = К.Код_клиента
AND П.Дата_прибытия > ALL
(SELECT П1.Дата_прибытия
FROM Проживает П1, Клиент К1
WHERE П1.Код_клиента = К1.Код_клиента
AND К1.Фамилия IN ('Алексеев', 'Попович'))
Если внутренний подзапрос, стоящий после оператора сравнения и слова ALL, возвращает в качестве одного из значений NULL, то считается, что в целом запрос завершился неудачно.
Оператор ANY полностью эквивалентен оператору IN. Однако оператор <> ANY существенно отличается от оператора NOT IN. Например, следующие два запроса вернут разные результаты:
1. SELECT Код_клиента
FROM Клиент
WHERE Код_клиента NOT IN
(SELECT Код_клиента FROM Проживает
WHERE Дата_прибытия > '02/02/01')
Результат выборки:
Код_клиента
-----------
2
9
11
(3 row(s) affected)
2. SELECT Код_клиента
FROM Клиент
WHERE Код_клиента <> ANY
(SELECT Код_клиента FROM Проживает
WHERE Дата_прибытия > '02/02/01')
Второй запрос выводит коды всех клиентов. Это происходит потому, что оператор <>ANY трактуется как <>a ИЛИ <>b ИЛИ <>c, где a, b, c элементы списка, получаемые с помощью подзапроса.
Когда запрос начинается с ключевого слова EXISTS, он действует как «тест на существование». Другими словами, ключевое слово EXISTS в предложении WHERE выполняет проверку на существование (или отсутствие) данных, которые удовлетворяют критериям соответствующего подзапроса. Такие подзапросы имеют общую форму:
Начало инструкции SELECT, INSERT, UPDATE, DELETE или подзапроса
WHERE [NOT] EXISTS (подзапрос)
[Окончание инструкции SELECT, INSERT, UPDATE, DELETE или подзапроса]
Например, следующий запрос выводит список клиентов, проживавших в гостинице в 2006 году:
SELECT Фамилия
FROM Клиент
WHERE EXISTS
(SELECT * FROM Проживает
WHERE Код_клиента=Клиент.Код_клиента
AND YEAR(Дата_прибытия)=2006)
Синтаксис подзапросов, начинающихся с EXISTS, отличается от синтаксиса других подзапросов следующим:
ключевому слову EXISTS не предшествует имя столбца, константа или какое-либо другое выражение;
список выбора подзапроса практически всегда содержит только символ звездочки, поскольку выполняется лишь тест на существование строк, которые удовлетворяют условиям подзапроса.
Использование ключевых слов EXISTS и NOT EXISTS позволяет реализовать выполнение двух операций из теории множеств: поиск пересечения и разности. Пересечение двух множеств содержит все элементы, которые принадлежат обоим исходным множествам, а разность содержит элементы, принадлежащие только первому из двух множеств и не входящие во второе множество.