SQLсервер в Linux -самостоятельное освоение пакета


Листинг 7 13 Выборка с наследованием



Листинг 7.13. Выборка с наследованием

booktown=# SELECT * FROM distinguished_authors

booktown-# WHERE lastjiame - 'Simon';

id | last_name firstjname award

25043 | Simon | Neil | Pulitzer Prize

(1 row)

booktown=# SELECT * FROM authors WHERE last_name - 'Simon';

Id last_name first_name

25043 | Simon | Neil (1 row)

booktown=# SELECT * FROM ONLY authors WHERE

lastjname = 'Sinon': id i last_name | first_name

(0 rows)

Все три запроса в листинге 7.13 производят выборку записей, у которых поле 1 astjname совпадает со строковой константой Simon. Первый запрос извлекает данные из таблицы distinguished_authors, в которую они были первоначально занесены (см. листинг 7.12).

Второй запрос в листинге 7.13 производит выборку из таблицы authors, базовой по отношению к distinguished_authors. В этом случае запись также возвращается, но в нее включаются только поля, унаследованные таблицей di st i ngui shed_authors.

Следует хорошо понимать, что данные в действительности не заносятся в базовую таблицу, а лишь становятся видимыми в ней благодаря отношению наследования. Это доказывает третий и последний запрос в листинге 7.13, в котором перед именем таблицы authors находится ключевое слово ONLY. Оно означает, что выборка производится только из базовой таблицы, а производные таблицы игнорируются; в результате запрос не возвращает ни одной записи.

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









Начало  Назад  Вперед



Книжный магазин