Ане. МЕТОДИЧКА Full. Методические указания по выполнению лабораторных работ по дисциплине Базы и банки данных
Скачать 1.71 Mb.
|
Лабораторная работа №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() /*Если книгу сдали,т.е. она в наличии в библиотеке, то дата приема будет между датой выдачи и текущей датой*/ Вопросы: Что такое представление? С помощью какой команды можно создать представление? С помощью какой команды можно изменить представление? Опишите структуру представления. Для чего используется оператор INNER JOIN? Можно ли использовать вычисляемые поля в представлениях? Как просмотреть представление? Какие функции могут быть использованы в представлении? Какие ограничения существуют для команды SELECT? Что означает параметр WITH ENCRYPTION? |