ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Методичка
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 4812
Скачиваний: 8
51
Рис. 19 — Результат выполнения запроса с внешним соединением
Важно отметить, что операции LEFT JOIN или RIGHT JOIN могут
быть вложены в операцию INNER JOIN, но операция INNER JOIN не мо-
жет быть вложена в операции LEFT JOIN или RIGHT JOIN.
Создание перекрестного запроса
В Jet SQL существует такой вид запросов, как перекрестный. В таком
запросе отображаются результаты статистических функций — суммы,
средние значения и др., а также количество записей. При этом подсчет вы-
полняется по данным одного из полей таблицы. Результаты группируются
по двум наборам данных, один из которых расположен в левом столбце
таблицы, а другой в заголовке таблицы. Например, при необходимости вы-
числить средний балл студентов за семестр, обучающихся в разных груп-
пах, необходимо реализовать перекрестный запрос, результат выполнения
которого будет представлен в виде таблицы, где заголовками строк будут
служить название предмета, заголовками столбцов — номера групп,
а в полях таблицы будет рассчитан средний балл студентов группы по ка-
ждому предмету.
Для создания перекрестного запроса необходимо использовать сле-
дующую инструкцию:
52
TRANSFORM статистическая_функция
инструкция_SELECT
PIVOT поле [IN (значение_1[, значение_2[, ...]])],
где статистическая_функция — статистическая функция SQL, обрабаты-
вающая указанные данные;
инструкция_SELECT — запрос на выборку;
поле — поле или выражение, которое содержит заголовки столбцов
для результирующего набора;
значение_1, значение_2 — фиксированные значения, используемые
при создании заголовков столбцов.
Составим SQL-запрос, реализующий описанный выше пример:
TRANSFORM Avg(Успеваемость.Оценка)
SELECT Дисциплина.Наименование_дисциплины as [Предмет]
FROM Студент INNER JOIN
(Дисциплина INNER JOIN Успеваемость ON Дисциплина.
Код_дисциплины = Успеваемость.Код_дисциплины) ON Студент.
Код_студента = Успеваемость.Код_студента
GROUP BY Дисциплина.Наименование_дисциплины,
Успеваемость.Код_дисциплины
PIVOT Студент.Номер_группы;
В результате выполнения такого перекрестного SQL-запроса форми-
руется следующий набор данных (рис. 20).
Рис. 20 — Результат выполнения перекрестного запроса
53
Таким образом, когда данные сгруппированы с помощью перекрест-
ного запроса, можно выбирать значения из заданных столбцов или выра-
жений и определять как заголовки столбцов. Это позволяет просматривать
данные в более компактной форме, чем при работе с обычным запросом
на выборку. Отметим, что перекрестные запросы удобно использовать для
формирования статистических отчетов.
Создание запроса на удаление записей
Инструкция DELETE создает запрос на удаление записей из одной
или нескольких таблиц, перечисленных в предложении FROM и удовле-
творяющих предложению WHERE.
Синтаксис команды:
DELETE [Таблица.*]
FROM таблица
WHERE условие Отбора,
где Таблица — необязательное имя таблицы, из которой удаляются записи;
таблица — имя таблицы, из которой удаляются записи;
условие Отбора — выражение, определяющее удаляемые записи.
С помощью инструкции DELETE можно осуществлять удаление
большого количества записей. Данные из таблицы также можно удалить
и с помощью инструкции DROP, однако при таком удалении теряется
структура таблицы. Если же применить инструкцию DELETE, удаляются
только данные. При этом сохраняются структура таблицы и все остальные
ее свойства, такие, как атрибуты полей и индексы.
В следующем примере из таблицы «Абитуриент» будет удален аби-
туриент Авдеев Н.В.:
DELETE
FROM Абитуриент
54
WHERE ФИО_Абитуриента = 'Авдеев Н.В.'
Запрос на удаление удаляет записи целиком, а не только содержимое
указанных полей. Нельзя восстановить записи, удаленные с помощью за-
проса на удаление. Чтобы узнать, какие записи будут удалены, необходимо
посмотреть результаты запроса на выборку, использующего те же самые ус-
ловие отбора в предложении Where, а затем выполнить запрос на удаление.
Порядок выполнения лабораторной работы № 2
В ходе выполнения лабораторной работы необходимо создать с по-
мощью построителя запросов:
1. Запрос на выборку.
2. Запрос на выборку с параметрами.
3. Запрос на обновление данных.
4. Запрос на удаление записей.
Следующие запросы должны быть реализованы на языке SQL без
помощи построителя запросов:
5. Используя инструкцию CREATE TABLE, создайте запрос на соз-
дание новой таблицы для выбранной ранее предметной области, содержа-
щей пять полей, различных типов данных, определив в запросе первичный
ключ и проиндексировав соответствующие поля, используя предложение
CONSTRAINT.
Для запуска запроса нажмите кнопку Запуск
на панели инстру-
ментов. После чего создайте запрос на создание еще одной таблицы, со-
держащей внешний ключ по отношению к первичному ключу предыдущей
таблицы. Запустите запрос, после чего проверьте, отразились ли изменения
в схеме данных.
6. Используя команду CREATE INDEX, создайте запрос на создание
нового индекса, используя различные условия назначения индексов
(IGNORE NULL, DISALLOW NULL, PRIMARY), а также типы сортировки.
55
7. Используя команду INSERT INTO, создайте запросы на добавле-
ние группы записей (из дополнительной таблицы) и одной записи в суще-
ствующую таблицу.
8. Используя команду UPDATE, создайте запрос на обновление дан-
ных в созданных ранее таблицах.
9. Используя команду SELECT, создайте запрос на выборку записей
из двух (или более) таблиц, используя правила внешнего и внутреннего со-
единения, а также различные условия отбора и сортировки.
10. Используя команду TRANSFORM, создайте перекрестный запрос.
11. Используя команду DROP, создайте запросы на удаление табли-
цы и индекса, созданных ранее в БД.
Сохраните все созданные запросы в базе данных.