Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по выполнению лабораторных работ по SQL.doc
Скачиваний:
167
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Вопросы для самоконтроля к лабораторной работе № 5

  1. Что такое подзапрос?

  2. В каких командах SQL могут быть использованы подзапросы?

  3. Какой порядок выполнения подзапроса?

  4. Когда невозможно использовать подзапрос?

  5. Какой порядок выполнения коррелированных подзапросов?

  6. В каких случаях подзапросы могут передать несколько строк в главное предложение?

  7. Сколько раз выполняется основной запрос при реализации коррелированного подзапроса?

  8. Где расположен подзапрос в логическом выражении предложения основного запроса: до оператора сравнения, после оператора сравнения?

  9. Какие предложения допустимые для основного запроса не могут использовать в подзапросе?

  10. Какие существуют типы подзапросов?

  11. В каких командах SQL могут быть использованы подзапросы?

  12. В каких предложениях SELECT могут быть использованы подзапросы?

  13. Какие предложения SELECT нельзя использовать в подзапросах?

  14. Где должен находиться подзапрос?

  15. Какие операторы сравнения работают с несколькими строками?

  16. Какие операторы сравнения работают только с одной строкой?

  17. В каких подзапросах вложенная команда SELECT выполняется первой?

  18. Какие подзапросы называются однострочными?

  19. Какой принцип работы коррелированного подзапроса?

  20. Какие требования предъявляются к таблицам, над которыми выполняются операторы union?

Лабораторная работа №6

Цель занятия:Знакомство с объектами СХЕМЫ БАЗЫ ДАННЫХ. Создание и использование представлений.

Представления

Представление – это шаблон, через который можно просматривать базу данных. Его можно также назвать виртуальным отношением, которое не существует на самом деле, но которое динамически воспроизводится на основании запроса к одной или нескольким таблиц или к другим (или другому) представлениям. Представления не хранят каких-либо данных. В словаре данных хранится только предложение SELECT того или иного представления.

Синтаксис команды:

CREATE VIEW <имя представления>

[(<имя столбца> [,…n ])

[WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA}]

AS

< команда SELECT>

[WITH CHECK OPTION];

WITH CHECK OPTION – ограничивает действие команд INSERT и UPDATE. При задании этого предложения они разрешены только в том случае, если они создают строки, которые потом видны в представлении.

Представления бывают простыми и сложными. Простыми называются представления, созданные на основании одной таблицы и не содержащие функций или условий группировки.

При создании представления SQL не осуществляет контроль за типом переменных, то есть представление будет создано без генерации сообщения об ошибке, но при попытке осуществить запрос будет сгенерировано сообщение об ошибке.

Ранее отмечалось, что опция WITH CHECK OPTION может ограничить действие команд INSERT и UPDATE, однако существуют и другие ограничения на использовании команд DML.

Команда DELETE запрещена, если представление содержит:

  • условие соединения

  • групповые функции или предложение GROUP BY

  • предложение DISTINCT

  • столбец со свойством IDENT I TY

Команда UPDATE запрещена всегда, когда запрещена команда DELETE, а также в случае, когда столбцы содержат выражения.

Команда INSERT запрещена всегда, когда запрещена команда UPDATE, а также тогда, когда какой-либо столбец таблицы NOT NULL не содержится в представлении.

После успешного завершения команды CREATE VIEW выдается сообщение

View created (Представление создано).

Представления используются для:

  • ограничения доступа к базе данных;

  • упрощения запросов;

  • сокрытия схемы базы данных.

В первом случае можно не только ограничить просмотр тех или иных данных, но и составив ограничение тем или иным способом, сделать невозможным выполнение той или иной комбинации операций над базами данных (удаление, добавление, редактирование).

Пример 79

Задача.

Создать представление, предотвращающее ввод информации в таблицу Student.

Решение.

Как уже отмечалось выше, для реализации подобного требования достаточно исключить из представления хотя бы один атрибут с признаком NOTNULL, напримерIDGroup.

CREATE VIEW VStudentNOINSERT

AS

SELECT

NRecordBook ,

INN ,

StName ,

SPasport ,

NPasport ,

DataPasport ,

NameDeptPasport

FROM Student

Попытка ввести данные через созданное представление

INSERT INTO VStudentNOINSERT

VALUES('050008','1111111117','Ипатов В.И.','8701','192304','01.06.2002', 'УВД г.Ухты');

спровоцирует сообщение об ошибке (если при создании Вы запретили неопределённые значения в столбце IDGroup):

Server: Msg 515

Cannot insert the value NULL into column 'IDGroup', table 'Student.dbo.Student'; column does not allow nulls. INSERT fails.

The statement has been terminated.

Пример 80

Задача.

Создать представление, разрешающее просмотр, ввод и редактирование только данных о студентах группы ИСТ-03 (IDGroup=1) в таблицеStudent.

Решение.

Создадим представление VStudentNOINSERTIST03, используя опцию WITH CHECK OPTION

CREATE VIEW VStudentNOINSERTIST03

AS

SELECT

NRecordBook ,

INN ,

StName ,

IDGroup,

SPasport ,

NPasport ,

DataPasport ,

NameDeptPasport

FROM Student

WHERE IDGroup =1

WITH CHECK OPTION

Теперь попытка ввести через представление VStudentNOINSERTIST03 данных о студенте группы АИС-03 (IDGroup=2)

INSERT INTO VStudentNOINSERTIST03

VALUES('050007','1111111118','Васин В.И.', 2, '8701', '192314', '01.06.2002', 'УВД г.Ухты');

Приведет к появлению следующего сообщения об ошибке:

Server: Msg 550

The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint.

Во втором случае на представление «скидываются» наиболее часто повторяющиеся и трудоемкие операции. Например, чтобы вывести на экран «полноценную» ведомость по той или иной дисциплине необходимо выполнить соединение практически всех таблиц базы данных. Обычно эта операция возлагается на представление. После этого вывод на экран ведомости для той или иной группы или по тому или иному предмету обеспечивается с помощью элементарного запроса, но уже к представлению.

Пример 81

Задача.

Создать представление для вывода всей данных об успеваемости студентов.

Решение.

Приведенное ниже представление не только значительно уменьшит сложность реализуемых через него к базе данных запросов, но и позволит пользователю апеллировать привычными для него понятиями: Название дисциплины, Имя студента и т.п. Кроме того, оно полностью скрывает истинную структуру базы данных.

CREATE VIEW VPROGRESS

AS

SELECT

NameGroup [Группа],

S.NRecordBook [№ зачетки],

StName [Имя студента ],

NameSubject[Название дисциплины],

NameReport[Вид отчетности],

NTerm[№ семестра],

PIN [Персонифицированный номер преподавателя],

Mark[Оценка]

FROM Progress P INNER JOIN Student S

ON P.NRecordBook=S.NRecordBook

INNER JOIN SGroup SG

ON S.IDGroup=SG.IDGroup

INNER JOIN Subject SB

ON P.IDSubject=SB. IDSubject

INNER JOIN Report R

ON P.IDReport=R.IDReport

Реализация запроса

SELECT *

FROM VProgress;

к представлению VProgress позволит получить следующий результат:

Результат выполнения запроса.

Пример 82

Задача.

Вывести успеваемость студентов по дисциплине СУБД в шестом семестре.

Решение.

SELECT *

FROM VProgress

WHERE [Название дисциплины]='СУБД'

AND [№ семестра]=6

Нетрудно представить, как бы выглядел этот запрос, обращенный непосредственно к таблицам

SELECT

NameGroup [Группа],

S.NRecordBook [№ зачетки],

StName [Имя студента ],

NameSubject[Название предмета],

NameReport[Вид отчетности],

NTerm[№ семестра],

PIN [Персонифицированный номер преподавателя],

Mark[Оценка]

FROM Progress P INNER JOIN Student S

ON P.NRecordBook=S.NRecordBook

INNER JOIN SGroup SG

ON S.IDGroup=SG.IDGroup

INNER JOIN Subject SB

ON P.IDSubject=SB. IDSubject

INNER JOIN Report R

ON P.IDReport=R.IDReport

WHERE NameSubject='СУБД'

AND NTerm =6

Результат выполнения запроса.

Группа запросов, реализуемая через представление VProgress весьма обширна. Например, вывод агрегированных значений: средней оценки по каждой группе, дисциплине, студенту, семестру, количества видов отчетности по каждой дисциплине, да и просто вывод любых данных касающихся успеваемости в любом временном интервале с различной степенью детализации. Очевидно, что и задача вывода списка отличников, превращается в тривиальную задачу. Ниже рассмотрим реализацию некоторых из них.

Пример 83

Задача.

Вывести средний балл по каждой группе студентов в первом семестре.

Решение.

SELECT Группа, AVG(Оценка)

FROM VProgress

WHERE [№ семестра]=6

GROUP BY Группа

Результат выполнения запроса.

Представление может быть создано не только с использованием таблиц, но и самих представлений. Например, через представление VProgress нельзя увидеть имена преподавателей, ведущих, ту или иную дисциплину, а через созданное ниже представление VProgressTeacher это вполне реально. Однако не следует злоупотреблять многоуровневостью представлений, ибо это может привести к значительному снижению производительности.

Пример 84

Задача.

Создать представление для вывода всей данных об успеваемости студентов, включая имена преподавателей, ведущих те или иные дисциплины.

Решение.

CREATE VIEW VPROGRESSTEACHER

AS

SELECT Группа,

[№ зачетки],

[Имя студента],

[Название дисциплины],

[Вид отчетности],

[№ семестра],

[Персонифицированный номер преподавателя],

TeacherName [Имя преподавателя],

Оценка

FROM VProgress P INNER JOIN Teacher T

ON P.[Персонифицированный номер преподавателя]=T.PIN

Очевидно прежде, чем создать то или иное представление нужно выполнить анализ реализуемых к базе данных запросов, провести анализ задействованных при этом столбцов и атрибутов, частоту тех или иных запросов.

Задание 28

Создать представление для просмотра базы данных с целью определения успеваемости студентов группы АИС-03.

Задание 29

Создать представление для вывода ведомостей успеваемости студентов.

Задание 30

Создать представление для вывода информации о предметах, изучаемых в 3 семестре студентами специальности ИСТ.