Представления и объединения

Представления не требуют, чтобы их вывод осуществлялся из одной базовой таблицы. Так как почти любой допустимый запрос SQL может быть использован в представлении, он может выводить информацию из любого числа базовых таблиц, или из других представлений. Мы можем, например, создать представление, которое показывало бы, порядки продавца и заказчика по имени:
CREATE VIEW Nameorders AS SELECT onum, amt, a.snum, sname, cname FROM Orders a, Customers b, Salespeople c WHERE a.cnum = b.cnum AND a.snum = c.snum;

Теперь вы можете выбрать (SELECT) все порядки заказчика или продавца ( * ), или можете увидеть эту информацию для любого порядка. Например, чтобы увидеть все порядки продавца Rifkin, вы должны ввести следующий запрос ( вывод показан в 20.3 Рисунке ):
SELECT * FROM Nameorders WHERE sname = ‘Rifkin’;

SQL Execution Log

SELECT *
FROM Nameorders
WHERE sname = ‘Rifkin’;

onum
amt
snum
sname
cname

3001
18.69
1007
Rifkin
Cisneros

3006
1098.16
1007
Rifkin
Cisneros

Рисунок 20.3: Порядки Rifkin, показанные в Nameorders Вы можете также объединять представления с другими таблицами, или базовыми таблицами или представлениями, поэтому вы можете увидеть все порядки Axelrodа и значения его комиссионных в каждом порядке:
SELECT a.sname, cname, amt comm FROM Nameorders a, Salespeople b WHERE a.sname = ‘Axelrod’ AND b.snum = a.snum;

Вывод для этого запроса показывается в Рисунке 20.4.
В предикате, мы могли бы написать — " WHERE a.sname = ‘Axelrod’ AND b.sname = ‘Axelrod’ " , но предикат который мы использовали здесь более общеупотребительный. Кроме того поле snum — это первичный ключ таблицы Продавцов, и следовательно должен по определению быть уникальным.

SQL Execution Log

SELECT a.sname, cname, amt * comm FROM Nameorders a, Salespeople b WHERE a.sname = ‘Axelrod’
AND b.snum = a.snum;

onum
amt
snum
sname
cname

3001
18.69
1007
Rifkin
Cisneros

3006
1098.16
1007
Rifkin
Cisneros

Рисунок 20. 4: Объединение основной таблицы с представлением
Если бы там например было два Axelrodf, вариант с именем, будет объединять вместе их данные. Более предпочтительный вариант — использовать поле snum, чтобы хранить его отдельно.
 
 
 

‹ Групповые представления
Вверх
Представления и подзапросы ›

Айтистанция
Добавить комментарий

Adblock
detector