
- •Работы практические по дисциплине базы данных
- •1 Практическая работа
- •1.1 Тема: Нормализация данных. Выстраивание взаимодействий в модели. Построение инфологической модели бд
- •2 Практическая работа
- •2.1 Тема: Изучение интерфейса и назначение пунктов главного меню программного средства разработки баз данных
- •3 Практическая работа
- •3.1 Тема: Управление объектами базы данных sql
- •4 Практическая работа
- •4.1 Тема: Создание таблиц. Ввод исходных данных
- •5 Практическая работа
- •5.1 Тема: Создание форм. Ввод исходных данных в формы. Редактирование данных
- •6 Практическая работа
- •6.1 Тема: Создание запросов
- •7 Практическая работа
- •7.1 Тема: Назначение взаимосвязей в таблицах
- •8 Практическая работа
- •8.1 Тема: Создание индекса. Сортировка данных в таблице
- •9 Практическая работа
- •9.1 Тема: Формирование отчетов. Вывод отчетов на печать
- •Список использованных источников
6 Практическая работа
6.1 Тема: Создание запросов
6.2 Цель: научиться создавать и выполнять запросы на языке SQL-запросы.
6.3 Оборудование, инструменты, расходные материалы:
Персональный компьютер
Программа SQL Server 2000 (утилита Query Analizer)
6.4 Теоретическая часть
Для выполнения запросов пользователей необходимо перевести запрос с естественного языка на декларативный язык SQL.
Синтаксис оператора SELECT:
SELECT statement ::= < query_expression > [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [ ,...n ] ] [ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ] [ BY expression [ ,...n ] ] ] [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } [ , XMLDATA ] [ , ELEMENTS ] [ , BINARY base64 ] } ] [ OPTION ( < query_hint > [ ,...n ]) ]
< query expression > ::= { < query specification > | ( < query expression > ) } [ UNION [ ALL ] < query specification | ( < query expression > ) [...n ] ]
< query specification > ::= SELECT [ ALL | DISTINCT ] [ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ] < select_list > [ INTO new_table ] [ FROM { < table_source > } [ ,...n ] ] [ WHERE < search_condition > ] [ GROUP BY [ ALL ] group_by_expression [ ,...n ] [ WITH { CUBE | ROLLUP } ] ] [ HAVING < search_condition > ]
6.5 Выполнение работы
1) Создайте 5 простых запросов на языке SQL с применением ключевых слов: DISTINCT, ORDER BY, GROUP BY, HAVING, BETWEEN, LIKE.
2) Создайте 5 сложных запросов на языке SQL с применением соединения таблиц.
3) Создайте 5 сложных запросов с подзапросами, использующими: агрегирующие функции, операторы сравнения во внешнем предложении WHERE. Не менее 1 запроса необходимо привести в коррелированной форме.
6.6 Пример выполнения работы
6.6.1 Простой запрос
Определить названия книг, у которых стоимость превышает 1000 руб.
Запрос на языке SQL:
select title
from book
where price > 1000;
6.6.2 Сложный запрос на соединение таблиц
Определить названия книг и их издательств, годовой объем продаж которых не менее 5 000 экземпляров.
select title, pub_name
from publisher p, book b
where (p.pub_id = b.pub_id) and (year_sale >= 5000);
6.6.3 Сложный запрос с подзапросом
Определить названия издательств, выпускающих книги по химии. Запрос представить в коррелированной форме.
select pub_name
from publisher p
where ‘химия’ in
( select book_vid
from book
where pub_id = p.pub_id
)
6.7 Вывод
7 Практическая работа
7.1 Тема: Назначение взаимосвязей в таблицах
7.2 Цель: научиться устанавливать взаимосвязи в таблицах.
7.3 Оборудование, инструменты, расходные материалы:
1) Персональный компьютер
2) Программа SQL Server 2000 (утилита Query Analizer) и Erwin 4.0
7.4 Теоретическая часть
Для установления взаимосвязей в таблицах необходимо использовать механизм жестких ограничений ссылочной целостности или механизм каскадных воздействий.
7.5 Выполнение работы
1) Установите механизмы ссылочной целостности с помощью программы Erwin 4.0.
2) Создайте триггеры в базе данных при помощи утилиты Query Analizer.
7.6 Пример выполнения работы
create trigger tD_Author on Author for DELETE as
/* ERwin Builtin Thu Dec 25 11:26:53 2008 */
/* DELETE trigger on Author */
begin
declare @errno int,
@errmsg varchar(255)
/* ERwin Builtin Thu Dec 25 11:26:53 2008 */
/* Author R/1 AuthorBook ON PARENT DELETE CASCADE */
/* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="Author"
CHILD_OWNER="", CHILD_TABLE="AuthorBook"
P2C_VERB_PHRASE="R/1", C2P_VERB_PHRASE="",
FK_CONSTRAINT="R_1", FK_COLUMNS="au_id" */
delete AuthorBook
from AuthorBook,deleted
where
/* %JoinFKPK(AuthorBook,deleted," = "," and") */
AuthorBook.au_id = deleted.au_id
/* ERwin Builtin Thu Dec 25 11:26:53 2008 */
return
error:
raiserror @errno @errmsg
rollback transaction
end
go
create trigger tU_Author on Author for UPDATE as
/* ERwin Builtin Thu Dec 25 11:26:53 2008 */
/* UPDATE trigger on Author */
begin
declare @numrows int,
@nullcnt int,
@validcnt int,
@insau_id int,
@errno int,
@errmsg varchar(255)
select @numrows = @@rowcount
/* ERwin Builtin Thu Dec 25 11:26:53 2008 */
/* Author R/1 AuthorBook ON PARENT UPDATE CASCADE */
/* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="Author"
CHILD_OWNER="", CHILD_TABLE="AuthorBook"
P2C_VERB_PHRASE="R/1", C2P_VERB_PHRASE="",
FK_CONSTRAINT="R_1", FK_COLUMNS="au_id" */
if
/* %ParentPK(" or",update) */
update(au_id)
begin
if @numrows = 1
begin
select @insau_id = inserted.au_id
from inserted
update AuthorBook
set
/* %JoinFKPK(AuthorBook,@ins," = ",",") */
AuthorBook.au_id = @insau_id
from AuthorBook,inserted,deleted
where
/* %JoinFKPK(AuthorBook,deleted," = "," and") */
AuthorBook.au_id = deleted.au_id
end
else
begin
select @errno = 30006,
@errmsg = 'Cannot cascade Author UPDATE because more than one row has been affected.'
goto error
end
end
/* ERwin Builtin Thu Dec 25 11:26:53 2008 */
return
error:
raiserror @errno @errmsg
rollback transaction
end
go
create trigger tI_AuthorBook on AuthorBook for INSERT as
/* ERwin Builtin Thu Dec 25 11:26:53 2008 */
/* INSERT trigger on AuthorBook */
begin
declare @numrows int,
@nullcnt int,
@validcnt int,
@errno int,
@errmsg varchar(255)
select @numrows = @@rowcount
/* ERwin Builtin Thu Dec 25 11:26:53 2008 */
/* fee R/8 AuthorBook ON CHILD INSERT SET NULL */
/* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="fee"
CHILD_OWNER="", CHILD_TABLE="AuthorBook"
P2C_VERB_PHRASE="R/8", C2P_VERB_PHRASE="",
FK_CONSTRAINT="R_8", FK_COLUMNS="pos" */
if
/* %ChildFK(" or",update) */
update(pos)
begin
update AuthorBook
set
/* %SetFK(AuthorBook,NULL) */
AuthorBook.pos = NULL
from AuthorBook,inserted
where
/* %JoinPKPK(AuthorBook,inserted," = "," and") */
AuthorBook.book_id = inserted.book_id and
AuthorBook.au_id = inserted.au_id
7.7 Вывод