Представления позволяют сохранить код выборки в базе данных. После этого имя представления используется в других выборках также как и имя обычной таблицы. Таким образом, упрощается написание новых запросов. Для конкретности примера, пусть существуют следующие таблицы с данными.
-- создаем первую таблицуcreate table dicevents(id integer,s varchar(45), constraint pk_dicevents primary key(id)); -- вставка данныхinsert into dicevents values(1,'пожар');insert into dicevents values(2,'авария');insert into dicevents values(3,'взрыв газа'); -- создаем вторую таблицуcreate table evt(id integer,d date,summ double precision,evtname integer, constraint pk_evt primary key(id),constraint fk_evt foreign key(evtname) references dicevents(id)); -- вставка данныхinsert into evt values(1,date '2008-01-02',102000,1);insert into evt values(2,date '2007-12-31',67000,3);insert into evt values(3,date '2008-01-05',32020.3,2);insert into evt values(4,date '2008-01-06',99000,null);
Для создания представлений используется команда CREATE VIEW. По желанию в команду можно включить OR REPLACE. В этом случае новое представление заменит старое, если оно существует. Ниже приведены примеры создания представления на соединение наших таблиц.
CREATE OR REPLACE VIEW evtlstAS -- далее следует запросselect t.d as "дата", dt.s as "событие", t.summ as "ущерб"from evt t left join dicevents dt on (t.evtname=dt.id)order by t.d; -- названия столбцов можно задать после-- имени представления-- в MySQL двойные кавычки возможны-- только в режиме ANSI SQLCREATE OR REPLACE VIEW evtlst("дата","событие","ущерб")asselect t.d, dt.s, t.summfrom evt t left join dicevents dt on (t.evtname=dt.id)order by t.d;
Выборка из представления не отличается от выборки из обычной таблицы.
-- выборка из представленияselect * from evtlist;
Для уничтожения представления используется команда DROP VIEW. Некоторые СУБД поддерживают расширенный синтаксис с IF EXISTS, позволяющий избежать ошибки, если уничтожаемого представления не существует.
-- уничтожение представленияDROP VIEW eventlist; -- уничтожение представления, если оно-- существуетDROP VIEW IF EXISTS eventlist;