Главная страница

Ане. МЕТОДИЧКА Full. Методические указания по выполнению лабораторных работ по дисциплине Базы и банки данных


Скачать 1.71 Mb.
НазваниеМетодические указания по выполнению лабораторных работ по дисциплине Базы и банки данных
Дата15.03.2023
Размер1.71 Mb.
Формат файлаdoc
Имя файлаМЕТОДИЧКА Full.doc
ТипМетодические указания
#993025
страница9 из 11
1   2   3   4   5   6   7   8   9   10   11

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

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



Цель: изучить представления и научиться самостоятельно создавать их.
Представление (View) для конечных пользователей выглядит как таблица, но при этом само не содержит данных, а лишь представляет данные, расположенные в таблице. Физически представление реализовано в виде SQL-запроса, на основе которого производится выборка данных из одной или нескольких таблиц или представлений.

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

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

Создание представлений с использованием Transact-SQL

CREATE VIEW view_name [(column [,...n])]

[WITH ENCRYPTION]

AS

select_statement

[WITH CHECK OPTION]

view_name — имя представления. При указании имени необходимо придерживаться тех же правил и ограничений, что и при создании таблицы.

column — имя колонки, которое будет использоваться в представлении. Максимальная длина имени составляет 128 символов. По умолчанию имена колонок в представлении соответствуют именам колонок в исходных таблицах. Явное указание имени колонки требуется при использовании вычисляемых колонок или при объединении нескольких таблиц, имеющих колонки с одинаковыми именами. Имена колонок перечисляются через запятую в соответствии с их порядком в представлении. Имена колонок можно указывать в команде SELECT, определяющей представление.

WITH ENCRYPTION - использование этого параметра предписывает серверу шифровать код SQL-запроса. Это гарантирует, что пользователи не смогут просмотреть код запроса и использовать его. Если при определении представления необходимо скрыть имена исходных таблиц и колонок, а также алгоритм объединения данных, то необходимо использовать эту опцию.

select_statement — код запроса SELECT, выполняющий выборку, объединение и фильтрацию строк из исходных таблиц и представлений. Можно использовать команду SELECT любой сложности со следующими ограничениями:

1) Нельзя создавать новую таблицу на основе результатов, полученных в ходе выполнения запроса, то есть запрещается использование параметра INTO.2) Нельзя проводить выборку данных из временных таблиц, то есть нельзя использовать имена таблиц, начинающихся на # или ##.

В запрос нельзя включать операции вычисления и группировки, то есть запрещается указание параметров ORDER BY, COMPUTE и COMPUTE BY.

Для удаления представления используется команда Transact SQL DROP VIEW{view […n]}. За один раз можно удалить несколько представлений.

Примеры

1.Вывод ограниченной информации о студентах с фамилией, оканчивающейся на «ов».

CREATE VIEW infoStudent /*Указываем имя представления*/

AS

SELECT /*Указываем, какие поля будут выведены*/

Студенты.Имя, Студенты.Фамилия, Студенты.факультет, Студенты.специальность

FROM Студенты /*Из какой таблицы*/

WHERE Студенты.Фамилия LIKE ‘[]ов’
2. Информация о замене экземпляров по программированию на С++.

CREATE VIEW infoZamena

AS

SELECT /*Указываем, какие поля, из каких таблиц будут выведены*/

Книга.Автор, Книга.Название, Экземпляр.Шифр, Замена_экземпляров.Номер_акта_замены

FROM /*Указываем таблицу, и связанные с ней при помощи оператора INNERJOIN таблицы, из которых выбираются связанные данные. После операнда ON указываем, по каким полям связаны две таблицы*/

(Книга INNER JOIN Экземпляр ON Книга.ISBN =Экземпляр.ISBN)

INNER JOIN Замена_экземпляров ON Экземпляр.Шифр = Замена_экземпляров.Шифр

WHERE Книга.Название LIKE '%C++' /*Выбираются только те книги, в названии которых присутствует “C++” */
3. Информация о списанных экземплярах по программированию на Delphi.

CREATE VIEW infoCpicanie

AS

SELECT /*Указываем, какие поля, из каких таблиц будут выведены*/

Книга.Автор, Книга.Название, Экземпляр.Шифр, Списанные_книги.причина_списания, Списанные_книги.номер_протокола_списания, Списанные_книги.Табельный_номер_списавшего

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Книга INNER JOIN (Экземпляр INNER JOIN Списанные_книги ON Экземпляр.Шифр = Списанные_книги.Шифр) ON Книга.ISBN = Экземпляр.ISBN

WHERE Книга.Название LIKE '%Delphi' /*Выбираются только те книги, в названии которых присутствует “ Delphi */

4. Информация о преподавателях и их заказах на литературу, количество книг должно быть от 10 до 20 или от 25 до 30.

CREATE VIEW infoZakazi /*Объявляем имя представления*/

AS

SELECT /*Указываем, какие поля таблиц будут выведены*/

Преподаватели.Фамилия,Преподаватели.Имя, Преподаватели.Отчество, Книга.Автор, Книга.Название,Заказы.Количество

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Книга INNER JOIN (Преподаватели INNER JOIN Заказы ON Преподаватели.Читательский_номер = Заказы.Читательский_номер)

ON Книга.ISBN = Заказы.ISBN

WHERE (Заказы.Количество BETWEEN 10 AND 20) OR (Заказы.Количество BETWEEN 25 AND 30) /* 10<количество заказов<20 или 25<количество заказов<30 */
5. Информация о книгах, которыми пользуется студент, и табельный номер сотрудника отдела обслуживания выдавшего книги. Номер отдела обслуживания 11.

CREATE VIEW infoOPolzovaniiStudentov

AS

SELECT /*Указываем, какие поля таблиц будут выведены*/

Студенты.Имя, Студенты.Фамилия, Книга.Автор, Книга.Название, Сотрудники_библиотеки.табельный_номер

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

(((Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN) INNER JOIN

Пользование_библиотекой2 ON Экземпляр.Шифр = Пользование_библиотекой2.Шифр) INNER JOIN

Студенты ON Пользование_библиотекой2.Читательский_номер = Студенты.Читательский_номер) INNER JOIN

Сотрудники_библиотеки ON Пользование_библиотекой2.Табельный_номер = Сотрудники_библиотеки.табельный_номер

WHERE Сотрудники_библиотеки.табельный_номер LIKE '10[]' /*Табельный номер сотрудников должен начинаться с «11»*/

6. Информация о книгах, которыми пользуется преподаватель и табельный номер сотрудника отдела обслуживания выдавшего книги. Номер отдела обслуживания 11.

CREATE VIEW infoOPolzovaniiPrepodovatelej

AS

SELECT /*Указываем, какие поля таблиц будут выведены*/

Преподаватели.Имя, Преподаватели.Фамилия, Книга.Автор, Книга.Название,Сотрудники_библиотеки.табельный_номер

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

(((Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN) INNER JOIN

Пользование_библиотекой3 ON Экземпляр.Шифр = Пользование_библиотекой3.Шифр) INNER JOIN

Преподаватели ON Пользование_библиотекой3.Читательский_номер = Преподаватели.Читательский_номер) INNER JOIN

Сотрудники_библиотеки ON Пользование_библиотекой3.Табельный_номер = Сотрудники_библиотеки.табельный_номер

WHERE Сотрудники_библиотеки.табельный_номер LIKE '10[]' /*Табельный номер сотрудников должен начинаться с «11»*/
7.Информация о отделах 11 и 12 и работающих в них сотрудниках.

CREATE VIEW Otdeli

AS

SELECT /*Указываем какие поля будут выбраны*/

Отделы.номер_отдела, Отделы.название_отдела, Сотрудники_библиотеки.фамилия,

Сотрудники_библиотеки.имя,Сотрудники_библиотеки.отчество

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Отделы INNER JOIN Сотрудники_библиотеки ON Отделы.Номер_отдела = Сотрудники_библиотеки.Номер_отдела

GROUP BY номер.отдела /*По какому полю будут сгруппированы поля*/

WHERE Отделы.номер_отдела BETWEEN 10 AND 13 /*Выбираются отделы, номер которых находится между 10 и 13*/
8.Информация о месте хранения периодических изданий название которых содержит в себе слово «вестник», но при этом д.б. исключены периодические издания, первое слово которых начинается на «Э», например «Экономический вестник».

CREATE VIEW INFOPeriodika

AS

SELECT /*Указываем какие поля будут выбраны*/

Периодические_издания.Название, Периодические_издания.Дата_издания, Отделы.Название_отдела, Отделы.Номер_отдела

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Отделы INNER JOIN Периодические_издания ON Отделы.Номер_отдела = Периодические_издания.Номер_отдела

WHERE Периодические_издания.Название LIKE '[^Э] %вестник%'

/*[^Э] запрещает начинаться первому слову на «Э», % вестник% – указывает на то, что оставшаяся часть названия должна содержать слово «вестник»*/
9. Полная информация об экземпляре, который был издан с 2000 до текущего года

CREATE VIEW FullInfoEkzemplar

AS

SELECT /*Указываем какие поля будут выбраны*/

Экземпляр.шифр,Книга.Автор,Книга.Название,Книга.Год_издания,Книга.Издательство,Экземпляр.Предметная_область, Экземпляр.Номер_отдела, Экземпляр.Отметка_о_списании, Экземпляр.Отметка_о_замене

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN

WHERE Книга.Год_издания BETWEEN 2000 AND YEAR (GETDATE())

/*GETDATE() возвращает текущую дату, YEAR (<дата>) – год <даты>*/
10. Информация о наличии книги в библиотеке

CREATE VIEW InfoAboutBook

AS

SELECT /*Указываем какие поля будут выбраны*/

Книга.ISBN, Экземпляр.Шифр, Экземпляр.Номер_отдела,

Пользование_библиотекой2.Дата_выдачи,Пользование_библиотекой2.Дата_приема

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

(Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN) INNER JOIN

Пользование_библиотекой2 ON Экземпляр.Шифр = Пользование_библиотекой2.Шифр

WHERE Пользование_библиотекой2.Дата_приема BETWEEN Пользование_библиотекой2.Дата_выдачи AND GETDATE() /*Если книгу сдали,т.е. она в наличии в библиотеке, то дата приема будет между датой выдачи и текущей датой*/
Вопросы:

  1. Что такое представление?

  2. С помощью какой команды можно создать представление?

  3. С помощью какой команды можно изменить представление?

  4. Опишите структуру представления.

  5. Для чего используется оператор INNER JOIN?

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

  7. Как просмотреть представление?

  8. Какие функции могут быть использованы в представлении?

  9. Какие ограничения существуют для команды SELECT?

  10. Что означает параметр WITH ENCRYPTION?
1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта