select train_number, train_name
from trains
where exists
(select * from coaches
where id_train = trains.id_train
and coach_type = ‘СВ’)
Этот запрос является коррелированным. Выполняя его, СУБД перебирает все строки таблицы trains, но в результирующий набор попадают только те, с которыми связана хотя бы одна строка таблицы coaches с полем coach_type = ‘СВ’.
С квантором существования может быть использовано отрицание not. Если применить это отрицание в предыдущем примере, СУБД будет искать все поезда, в которых нет вагонов СВ:
select train_number, train_name
from trains
where not exists
(select * from coaches
where id_train = trains.id_train
and coach_type = ‘СВ’)
2.5. Представления как хранимые на сервере запросы
Представление, с точки зрения разработчика, является именованным select-запросом, SQL-код которого постоянно хранится в БД вместе с таблицами и всегда доступен для запуска на выполнение. С точки зрения пользователя БД, представление – это своего рода виртуальная таблица, содержимое которой генерируется автоматически на основе результата выполнения запроса. Работа с представлением для обычного пользователя БД практически не отличается от работы с таблицей. Имя представления может использоваться в select-запросах наравне с именем таблицы, в некоторых случаях разрешается даже добавление и модификация данных в представлениях. Однако существуют и внешние различия между представлениями и таблицами. Они будут вкратце рассмотрены позже.
2.5.1. Создание представления
Для создания представлений служит команда createview, имеющая следующий упрощенный синтаксис:
createview [имя_БД.][имя_схемы.]имя_представления
[(столбец [,…n])]
as запрос
Имена БД и схемы могут быть опущены. В этом случае по умолчанию принимаются имя текущей БД и схема текущего пользователя.
Имя представления должно быть уникальным в пределах БД.
С помощью параметра (столбец [, …n]) столбцам представления присваиваются новые имена. Количество элементов этого списка должно соответствовать количеству столбцов, возвращаемых запросом. По умолчанию принимаются имена столбцов, указанных в запросе после ключевого слова select. Поэтому задавать новые имена для столбцов представления требуется только в особых случаях:
· когда столбцы получены на основе результатов вычислений;
· когда представление формируется на базе запроса к нескольким исходным таблицам, и в результирующем наборе данных получается два и более одноименных столбцов.
Проиллюстрируем оба случая соответствующими примерами.
Предположим, требуется создать представление на основе следующего запроса:
select coach_type, avg(price)
from coaches, seats, passengers_seats
where passengers_seats.id_seat = seats.id_seat
and seats.id_coach = coaches.id_coach
groupby coach_type
Результирующий набор данных, выдаваемых по этому запросу, имеет два столбца, причем второй – безымянный. При создании представления необходимо задать имя для столбца, хранящего среднюю цену на билеты. Сделать это можно двумя способами. Первый способ – указать перечень столбцов в операторе create view:
create view coach_types_prices (coach_type, average_price)
as
select coach_type, avg(price)
from coaches, seats, passengers_seats
where passengers_seats.id_seat = seats.id_seat
and seats.id_coach = coaches.id_coach
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.