ПРЕДСТАВЛЕНИЯ И ОБЬЕДИНЕНИЯ

Представления не требуют чтобы их вывод осуществлялся из одной базовой таблицы. Так как почти любой допустимый запрос 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';
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 - это первичный ключ таблицы Продавцов, и следовательно должен по определению быть уникальным.
onum amt snum sname cname
3001 18.69 1007 Rifkin Cisneros
3006 1098.16 1007 Rifkin Cisneros

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