Программирование >>  Руководство по sql 

1 ... 58 59 60 [ 61 ] 62 63 64 ... 105


SQL:

select titles.title id, au ord, au lname, au fname from authors, titles, titleauthors where authors,au id = titleauthors.au id and titles.title id = titleauthors.title id

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

SQL:

create view books as

select titles.title id, au ord, au lname, au fname from authors, titles, titleauthors where authors.au id = titleauthors.au id and titles. title id = titleauthors. title id

Теперь руководитель отдела рекламы может воспользоваться этим курсором для получения тех же результатов, не задумываясь об объединениях, списках выбора и условиях поиска:

SQL:

select * from books

Результат:

title id

au ord

au Iname

au fname

~ЪШТ2

.

Bennet

Abraham

PS7777

Locksley

Chastity

PC9999

Locksley

Chastity

MC2222

del Castillo

Innes

PS3333

White

Johnson

BU1032

Green

Marjorie

PC1035

Carson

Cheryl

BU2075

Green

Marjorie

PS2091

Ringer

Albert

PS2091

Ringer

Anne

PS2106

Ringer

Albert

MC3021

DeFrance

Michel

MC3021

Ringer

Anne

TC3218

Panteley

Sylvia

BU7832

Straight

Dick

PC8888

Dull

PC8888

Hunter

Sheryl

PS1372

Karsen

Livia

PS1372

MacFeather

Stearns

BUllll

MacFeather

Stearns



BUllll TC7777 TC7777

TC4203

ОLeary

Yokomoto

OLeary

Gringlesby

Blotchet-Halls

Michael Akiko Michael Burt

Reginald

Курсор можно использовать в операторе SELECT так, как если бы он был обычной таблицей. Например, руководителю отдела рекламы может понадобиться упорядочить результаты просмотра в алфавитном порядке (по фамилиям авторов). Например;

SQL:

select *

from books

order by au lname

Бухгалтеру может потребоваться другое представление. Его не интересует, кто из авторов является первым, а кто вторым. Допустим, что бухгалтера интересует только нижняя строка: на чье имя должны быть выписаны чеки и на какую сумму. Такой запрос связан с вычислением того, сколько книг было продано и по какой цене, а также какой процент от суммы полагается каждому автору;

SQL:

select au fname, au lname,

sum (price*ytd sales*royalty*royaltyshare) as Total Income from authors, titles, titleauthors, roysched where authors.au id = titleauthors.au id

and titles.title id = titleauthors.title id

and titles.title id = roysched.title id

and ytd sales between lorange and hirange group by au lname, au fname

Если бухгалтер воспользуется указанным ниже оператором SELECT для создания курсора под именем myaltychecks, то эквивалентный запрос будет иметь следующий вид:

SQL:

select *

from royaltychecks

Результаты (кто получает чек и на какую сумму) будут иметь следующий вид:

Результат: au lname

au fname

Total Income

Bennet

Abraham

4911.54

Yokomoto

Akiko

2455.36

Ringer

Albert

1421.27

Dull

4095.00

Ringer

Anne

4669.35

Gringlesby

Burt

1841.52

Locksley

Chastity

2665.46

Carson

Cheryl

32240.16

Straight

Dick

8185.91

del Castillo

Innes

4874.36

White

Johnson

8139.93

Karsen

Livia

607.22



Green

Marjorie

13350.54

OLeary

Michael

3694.25

DeFrance

Michel

9977.33

Blotchet-Halls

Reginald

25255.61

Hunter

Sheryl

4095.00

MacFeather

Stearns

2981.50

Panteley

Sylvia

785.63

Наконец, рассмотрим пример со служащим головной издательской компании, который хочет выяснить положение дел с различными категориями книг в каждом из филиалов. Для этого можно воспользоваться запросом следующего вида:

SQL:

select pub id, type, sum(price*ytd sales), avg(price), avg(ytd sales) from titles group by pub id, type

Однако служащему могут не нравиться все эти сложности. Что ж, можно воспользоваться куда более простым оператором:

SQL:

select *

from currentinfo Результат:

PUBt

TYPE

INCOME

AVG PRICE

AVG SALES

07зб

business

~ 55978~.78

2.990

0736

psychology

139319.92

13.504

1987.8

0877

NULL

NULL

NULL

NULL

0877

mod cook

107135.22

11.49

12139.0

0877

trad cook

249637.50

15.96

6522.0

1389

business

210036.30

17.31

4022.0

1389

popular comp

283401.00

21.475

6437.5

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

Почему же все-таки курсор?

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

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

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

Курсоры - превосходный способ настройки (или подгонки) общей базы данных к нуждам конкретного пользователя, каждый из которых может иметь свои собственные



1 ... 58 59 60 [ 61 ] 62 63 64 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика