Операция проекции на языке структурированных
запросов реализуется даже проще, чем операция выборки. Напомним, что при
применении операции проекции выбираются не строки (как при применении
операции выборки), а столбцы. Поэтому достаточно перечислить заголовки
нужных столбцов (т. е. имена атрибутов), без указания каких-либо
посторонних условий. Итого, получаем оператор следующего вида:
Select список имен атрибутов
From имя отношения;
После применения этого оператора машина
выдаст те столбцы таблицы-отношения, имена которых были указаны в первой
строчке этого оператора Select.
Как мы уже упоминали ранее, повторяющиеся строки и
столбцы исключать из результирующего отношения не обязательно. Но если в
заказе или в задании требуется обязательно элиминировать дубликаты,
следует использовать специальную опцию языка структурированных запросов –
distinct. Эта опция задает автоматическое исключение дубликатов
кортежей из отношения. С применением этой опции оператор Select будет
выглядеть следующим образом:
Select distinct список имен атрибутов
From имя отношения;
В языке SQL существует специальное
обозначение для необязательных элементов выражений – квадратные скобки
[…]. Поэтому в самом общем виде операция проекции будет выглядеть
следующим образом:
Select [distinct] список имен атрибутов
From имя отношения;
Однако если результат применения операции гарантированно не содержит дубликатов или же дубликаты все-таки допустимы, то опцию distinct лучше не указывать, чтобы не загромождать запись, т. е. из соображений производительности работы оператора.
Рассмотрим пример, иллюстрирующий возможность
стопроцентной уверенности в отсутствии дубликатов. Пусть дана уже
известная нам схема отношений:
Успеваемость (№ зачетной книжки, Семестр, Код предмета, Оценка, Дата).
Пусть дан следующий оператор Select:
Select № зачетной книжки, Семестр, Код предмета
From Успеваемость;
Здесь, как легко видеть, три возвращающихся оператором атрибута образуют ключ отношения. Именно поэтому опция distinct
становится излишней, ведь дубликатов гарантированно не будет. Это
следует из требования, накладываемого на ключи, называемого ограничением
уникальности. Подробнее это свойство мы рассмотрим дальше, но если
атрибут ключевой, то дубликатов в нем нет.
|