КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
DDL. Представления
Представления – это объекты базы данных, которые можно рассматривать как виртуальные таблицы. На самом деле хранится только формулировка команды SELECT, с помощью которой производится выборка данных из реальных таблиц. Необходимость в использовании представлений возникает, например, в том случае, когда нужно запретить доступ пользователя к отдельным столбцам или строкам таблицы – тогда можно просто написать представление, в котором эти столбцы или строки не будут присутствовать, и предоставить доступ пользователю именно к этому представлению, а не к реальной таблице. Другой полезной возможностью является вычисление значений, которые не хранятся непосредственно в таблице, но всегда могут быть рассчитаны. Представления могут быть обновляемыми (т.е., представлять возможность не только чтения, но и изменения данных в исходных таблицах) и необновляемыми. Представление будет обновляемым только в том случае, если его структура такова, что SQL server может точно определить, в какие строки каких таблиц нужно поместить измененные данные. Необновляемыми будут, например, представления, содержащие итоговые данные и группировки. Для создания представлений используется команда CREATE VIEW. Краткий формат этой команды: CREATE VIEW имя_представления AS Команда_SELECT
Команду создания представления нужно либо выполнять отдельно от других команд, либо сразу после нее поставить команду GO, как в следующем примере. Например, создадим представление, содержащее список договоров и их кураторов для отдела с номером 1. Будет ли это представление обновляемым? CREATE VIEW k_contract1 AS SELECT k_contract.contract_num, k_contract.contract_date, k_contract.contract_type, k_contract.firm_num, k_staff.staff_name FROM k_contract INNER JOIN k_staff ON k_contract.staff_num = k_staff.staff_num WHERE dept_num = 1
GO
Для просмотра представления следует выполнить команду SELECT * FROM k_contract1
Результат выполнения команды:
contract_num contract_date contract_type firm_num staff_name ----------------------------------------------------------- 1 2006-03-03 16:42:55.170 A 1 Иванов 3 2006-03-03 16:42:55.190 C 1 Иванов 6 2006-03-03 16:42:55.190 C 3 Иванов 7 2006-03-03 16:42:55.190 A 4 Иванов
(4 row(s) affected) Создадим вспомогательное представление для запросов о полностью оплаченных и частично оплаченных счетах (см. предыдущее занятие). Это представление для каждого счета содержит его номер и сумму оплаты. CREATE VIEW k_pay_sum AS SELECT bill_num, SUM(payment_sum) AS pay_sum FROM k_payment GROUP BY bill_num
GO
Для просмотра представления следует выполнить команду SELECT * FROM k_pay_sum. Это представление не будет обновляемым.
Результат выполнения команды: bill_num pay_sum -------- -------------- 1 1000.00 2 1000.00 3 2000.00 4 1000.00 7 1500.00 8 1000.00
(6 row(s) affected)
Теперь с помощью данного представления можно переформулировать сам запрос, он станет проще: Полностью оплаченные счета SELECT b.bill_num AS "Номер счета", b.bill_date AS "Дата счета", b.bill_sum AS "Сумма счета", p.pay_sum AS "Сумма оплаты" FROM k_bill b, k_pay_sum p WHERE b.bill_num=p.bill_num AND b.bill_sum<=p.pay_sum
Задание для индивидуальной работы 7 Создайте несколько (не менее 3) представлений для вашей базы данных. Будут ли они обновляемыми или нет? Проверьте.
Дата добавления: 2015-05-09; Просмотров: 591; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |