Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Задание для индивидуальной работы 5




Напишите несколько (не менее 5) интересных запросов к вашей базе данных. Используйте вложенные подзапросы, группировки, итоговые значения, выборки из нескольких таблиц. Если ваш запрос требует ввода параметра, замените его пока на константу, запросы с параметрами можно будет в дальнейшем реализовать с помощью хранимых процедур.

 


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 2011-11-01 00:00:00.000 A 1 Иванов

3 2011-09-01 00:00:00.000 C 1 Иванов

6 2011-07-15 00:00:00.000 C 3 Иванов

7 2011-11-12 00:00:00.000 A 4 Иванов

 

Создадим вспомогательное представление для запросов о полностью оплаченных и частично оплаченных счетах (см. предыдущее занятие). Это представление для каждого счета содержит его номер и сумму оплаты.

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 1000.00

8 1000.00

 

Теперь с помощью данного представления можно переформулировать сам запрос, он станет проще:

Полностью оплаченные счета

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

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...