- •1. Форматирование выходных данных запросов. 39
- •Тема 1.
- •1. Введение. История развития баз данных.
- •1. Введение. История развития баз данных
- •2. Основные понятия и определения
- •Тема 2.
- •1. Архитектура базы данных. Физическая и логическая независимость.
- •1. Архитектура базы данных. Физическая и логическая независимость
- •2. Разработка приложений в среде Microsoft Windows. Системы быстрой разработки приложений. Субд. Модели данных.
- •3. Основные этапы проектирование базы данных.
- •Тема 3.
- •1. Дополнительные общие рекомендации по проектированию базы данных.
- •2. Разработка приложений в среде Microsoft Windows.
- •1. Дополнительные общие рекомендации по проектированию базы данных.
- •2. Разработка приложений в среде Microsoft Windows.
- •Тема 4.
- •1. Построение таблиц.
- •2. Запросы в Microsoft Access. Параметры запросов на выборку данных.
- •3. Операции реляционной алгебры.
- •1. Построение таблиц
- •2. Запросы в Microsoft Access. Параметры запросов на выборку данных.
- •3. Операции реляционной алгебры.
- •Тема 5.
- •1. Понятие технологии «Клиент-сервер». Общие сведения о языке запросов sql.
- •2. Структура sql.
- •1. Понятие технологии «Клиент-сервер». Общие сведения о языке запросов sql.
- •2. Структура sql.
- •Тема 6.
- •1. Запрос выборки в языке sql. Выборка из одной таблицы.
- •2. Суммирование данных с помощью функций агрегирования (групповых функций).
- •1. Запрос выборки в языке sql. Выборка из одной таблицы.
- •2.Суммирование данных с помощью функций агрегирования (групповых функций).
- •Тема 7.
- •1. Форматирование выходных данных запросов.
- •2.Соединение таблиц
- •3.Вложенные подзапросы
- •4.Связанные подзапросы. Оператор exists
- •5.Вложенные и связанные подзапросы. Операторы any, all, come
- •Тема 8.
- •1. Форматирование выходных данных запросов.
- •1. Форматирование выходных данных запросов.
- •Тема 9.
- •1. Запросы обновления таблиц.
- •2. Создание, модификация и уничтожение таблиц. Ограничение на множество допустимых значений данных. Значение по умолчанию.
- •3. Создание и уничтожение индексов. Поддержка ссылочной целостности.
- •1. Запросы обновления таблиц.
- •2. Создание, модификация и уничтожение таблиц. Ограничение на множество допустимых значений данных. Значение по умолчанию.
- •3. Создание и уничтожение индексов. Поддержка ссылочной целостности.
- •Тема 10.
- •1. Создание представлений .
- •2. Определение правд доступа к данным.
- •1. Создание представлений.
- •2. Определение правд доступа к данным.
- •Тема 11.
- •1. Определение синонимов объектов. Понятие транзакций. Управление параллелизмом.
- •Тема 12.
- •1. Встроенный sql, основные понятия
- •1. Встроенный sql, основные понятия.
5.Вложенные и связанные подзапросы. Операторы any, all, come
Операторы ANY, ALL, COME используют в качестве аргументов подзапросы, но в отличие от EXIST, подзапросы используются как аргументы в операциях отношения.
Выражение имя_поля операция_отношения ANY(подзапрос), считается истинным, если оно истинно хотя бы для одного значения результат подзапроса. Если подзапрос не генерирует выходных данных, то выражение с ANY принимает значение ложь, независимо от операции отношения.
Пример: получить фамилии дипломников для преподавателей определенной кафедры.
Sname |
Sgrp |
С-1 |
Г-1 |
С-2 |
Г-2 |
С-3 |
Г-2 |
WHERE spdp = ANY
(SELECT pnum FROM преподаватель
WHERE pcaf = “K-1”);
В данном примере конструкция WHERE spdp=ANY, равносильна конструкции WHERE spdp IN. Разница между ANY и IN, заключается в возможности использовать в ANY любую операцию сравнения.
Пример: Получить оценки студента с кодом 002 больше чем какая-либо оценка у студента с кодом 003.
Odate |
Ocen |
11/01/01 |
4 |
WHERE osnum = “002” AND ocen> ANY
(SELECT ocen FROM оценка
WHERE osnum= “003”);
Выражение имя_поля операция_отношения ALL(подзапрос), считается истинным, если каждое значение результата подзапроса удовлетворяет условию:
…<>всем; …>всех и т.д.
Если подзапрос не генерирует выходных данных, то выражение с ALL принимает значение истина, независимо от операции отношения. Оператор ALL обычно не используется с операцией равенства, т.к. истина в этом случае возможна, когда подзапрос возвращает одинаковые значения, что в реальных базах маловероятно.
Пример: получить для преподавателя с кодом 001 все оценки студентов, которые не являются его дипломниками.
osnum |
Ocen |
003 |
3 |
WHERE opnum= ”001” AND osnum <>ALL
(SELECT snum FROM студент
WHERE spdp = “001”);
Этот подзапрос можно было бы сформулировать иначе, заменив osnum<>ALL на osnum NOT IN. Такой запрос является более эффективным, т.к. требует просмотра всего отношения.
Существуют различия в использовании ANY, ALL, EXIST при обработке NULL-значений.
Пример: получит оценки студента с кодом 001 большие, чем все оценки студента с кодом 003.
Odate |
Ocen |
10/01/01 |
5 |
15/01/01 |
5 |
WHERE osnum= “001” AND ocen <>ALL
(SELECT ocen FROM оценка
WHERE osnum = “003”);
Этот же запрос с EXISTS имеет следующий вид:
SELECT odate, ocen FROM оценка01
WHERE osnum=”001” AND NOT EXISTS
(Select ocen FROM оценка02
WHERE osnum =”003” AND
02.ocen >=01.ocen);
Тема 8.
1. Форматирование выходных данных запросов.
1. Форматирование выходных данных запросов.
Результаты выполнения нескольких запросов могут быть объединены путём использования предложения UNION.
Получить общий список руководителей дипломов и дипломников.
001 |
П-1 |
002 |
П-2 |
001 |
С-1 |
002 |
С-2 |
003 |
С-3 |
WHERE pnum IN
(SELECT DISTINCT spdp FROM студент)
UNION
SELECT snum, sname FROM студент
WHERE spdp IS NOT NULL;
Использование DISTINCT не обязательно, он используется только для оптимизации запроса. Только последний запрос кончается точкой с запятой. Если она отсутствует, то SQL решит, что идет еще один запрос и выдаст ошибку.
Столбцы результата не имеют имени, т.к. принадлежат разным таблицам. При необходимости ссылки на эти столбцы могут быть выполнены по номерам столбца. Некоторые системы, в том числе Microsoft Access, принимают в качестве имен столбцов имена первого предложения SELECT.
Предложение UNION реализует операцию объединения реляционной алгебры.
Для того, чтобы 2 или более запросов можно было бы объединить, их столбцы выходных данных должны быть совместимы по объединению.
Обычно, для большинства реализаций SQL, это означает совпадение типов и длин полей объединяемых столбцов различных таблиц.
UNION автоматически исключает из выходных данных повторяющиеся строки, по этому использование параметра DISTINCT не имеет смысла, хотя его и можно использовать для оптимизации запроса.
Можно вставлять константы и выражения в предложение SELECT, использующее UNION. Это не соответствует стандарту SQL, но часто и оправданно применяется, при этом применяемые константы и выражения должны быть совместимы по объединению.
Пример: Получить максимальные и минимальные оценки каждого студента.
001 |
5 |
MIN |
002 |
4 |
MIN |
003 |
2 |
MIN |
001 |
5 |
MAX |
002 |
4 |
MAX |
003 |
4 |
MAX |
GROUP BY osnum
UNION
SELECT osnum, MAX(ocen), “MAX” FROM оценка
GROUP BY osnum;
В приведенном примере минимальная и максимальная оценка студентов с кодом 001 и 002 – совпадают, но строки представлены дважды, т.к. различаются за счет комментариев.
В приводимых примерах данные результата приводились в порядке записи запроса. Однако, в общем случае, нельзя считать, что будет автоматически полученным такой порядок.
Выходные данные объединенного запроса могут быть отсортированы путем использования предложения ORDER BY в конце объединенного запроса (при этом использовать ORDER BY внутри объединенного запроса нельзя).
osnum |
Ocen |
Mm |
001 |
5 |
MIN |
001 |
5 |
MAX |
002 |
4 |
MIN |
002 |
4 |
MAX |
003 |
2 |
MIN |
003 |
4 |
MAX |
SELECT osnum, MIN(ocen), “MIN” FROM оценка
GROUP BY osnum
UNION
SELECT osnum, MAX(ocen), “MAX” FROM оценка
GROUP BY osnum
ORDER BY 1,3 DESC;
Может объединяться более двух запросов. Например, обозначим результаты данного запроса как максимальная-минимальная оценка MMOЦ. И обозначим названия столбцов:
osnum |
ocen |
mm |
Получим на основе этой таблицы таблицу кодов студентов с включением столбца признаков: 0 – отличник, 1 – 4,5; 2 – есть 3-ки; 3 – имеющие 2-ки.
SELECT osnum, 0 FROM ММОЦ
WHERE mm= ‘’MIN’’ AND ocen=5
UNION
(SELECT osnum, 1 FROM ММОЦ
001 |
0 |
002 |
1 |
003 |
3 |
UNION
(SELECT osnum, 2 FROM ММОЦ
WHERE mm= “MIN” AND ocen=3
SELECT osnum, 3 FROM ММОЦ
WHERE mm=”MIN” AND ocen<3))
OEDER BY 2;