Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы_1430_1432_33_34.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
4.2 Mб
Скачать

Связанные подзапросы.

При применении подзапросов, во внутреннем запросе (вложенном) можно ссылаться на таблицу, имя которой указано в предложении FROM внешнего запроса, тем самым формируя связанный подзапрос. В этом случае подзапрос выполняется повторно, по одному разу для каждой строки таблицы из основного запроса.

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

SELECT person_n, name

FROM Prodav main

WHERE 1 <

(SELECT COUNT(*)

FROM Pokypat

WHERE person_n=main.person_n);

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

Представления (view).

Представление (VIEW) – это объект, который не содержит собственных данных. Это своего рода таблица, содержимое которой берется из других таблиц (базовых) посредством выполнения запроса. Поскольку значения в таблицах меняются, это автоматически приводит к соответствующим изменениям в представлениях. Представления подобны окнам, через которые просматривается информация, реально хранимая в базовых таблицах. В действительности же это запросы, выполняемые всякий раз, когда представление является объектом команды. В этот момент выходные данные запроса и становятся содержимым представления.

Представление определяется с помощью команды CREATE VIEW, состоящей из ключевых слов CREATE VIEW (т.е. создать представление), имени создаваемого представления и ключевого слова AS, после которого следует запрос:

CREATE VIEW имя представления AS SELECT * FROM имя таблицы WHERE условие;

Например, чтобы сразу получить данные о тех, кто проживает в городе Москва, можно сначала создать представление, а потом вызывать его:

CREATE VIEW Moskovcity AS SELECT * FROM Prodav

WHERE city=’Москва’;

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

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

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

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

CREATE VIEW Dann

AS SELECT person_n, name, city

FROM Prodav;

Т.е. данное представление представляет собой ту же самую таблицу Prodav, но без столбца комиссионных.

При обновлении представление можно модифицировать с помощью команд обновления, но модификации воздействуют не на само представление, а только на лежащую в его основе таблицу. Т.е. если необходимо перезаписать место жительства продавца с номером 100 в представлении Dann, то обновление нужно произвести с таблицей Prodav:

UPDATE Prodav

SET city=’Анапа

WHERE person_n=100;

При создании представления в качестве имен его полей использовались имена полей базовой таблицы. Для простых действий с представлениями это допустимо, но иногда необходимо задать новые имена для столбцов. Это когда:

  • Некоторые столбцы являются выходными столбцами и, следовательно не поименованы;

  • Два и более столбцов в соединении имеют одинаковые имена в соответствующих таблицах.

Имена, которые станут именами полей, даются в круглых скобках после имени таблицы.