Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML. Токмаков Г.П. - 24 стр.

UptoLike

Составители: 

24
Возможна и другая формулировка того же запроса (
запрос2):
SELECTОТД_РАЗМЕР
FROMОТДЕЛЫ
WHEREОТД_НОМЕР=
(SELECTСЛЖ_ОТД_НОМЕР
FROMСЛУЖАЩИЕ
WHEREСЛЖ_ИМЯ='ПЕТРИВАНОВИЧФЕДОРОВ');
Это пример запроса на языке SQL с вложенным подзапросом. Во вложенном
подзапросе выбирается значение поля
СЛЖ_ОТД_НОМЕР из записи файла СЛУЖАЩИЕ,
в которой значение поля
СЛЖ_ИМЯ равняется строковой константе 'ПЕТР ИВАНОВИЧ
ФЕДОРОВ'. Если такая запись существует, то она единственная, поскольку поле
СЛЖ_ИМЯ является уникальным ключом файла СЛУЖАЩИЕ. Тогда результатом вы-
полнения подзапроса будет единственное значениеномер отдела, в котором
работает
Петр Иванович Федоров. Во внешнем запросе это значение будет клю-
чом доступа к файлу
ОТДЕЛЫ, и снова будет выбрана только одна запись, по-
скольку поле
ОТД_НОМЕР является уникальным ключом файла ОТДЕЛЫ. Если же на
данном предприятии
Петр Иванович Федоров не работает, то подзапрос выдаст
пустой результат, и внешний запрос тоже выдаст пустой результат.
Приведенные примеры показывают, что при формулировке запроса с ис-
пользованием
SQL можно не задумываться о том, как будет выполняться этот
запрос. Среди метаданных базы данных будет содержаться информация о том,
что поле
СЛЖ_ИМЯ является ключевым для файла СЛУЖАЩИЕ (т. е. по заданному
значению имени служащего можно быстро найти соответствующую запись или
убедиться в том, что запись с таким значением поля
СЛЖ_ИМЯ в файле отсутству-
ет), а поле
ОТД_НОМЕРключевое для файла ОТДЕЛЫ (и более того, оба ключа в
соответствующих файлах являются уникальными), и система сама воспользует-
ся этим.
Наиболее вероятным способом выполнения запроса в обеих формулиров-
ках будет выборка записи из файла
СЛУЖАЩИЕ со значением поля СЛЖ_ИМЯ, рав-
ным строке
'ПЕТР ИВАНОВИЧ ФЕДОРОВ', взятие из этой записи значения поля СЛЖ_
ОТД_НОМЕР и выборка из таблицы ОТДЕЛЫ записи с таким же значением поля
ОТД_НОМ.
Если же, например, возникнет потребность в получении списка служащих,
должность которых еще не определена, то достаточно обратиться к системе с
запросом (
запрос3):
SELECTСЛЖ_ИМЯ,СЛЖ_НОМЕР
FROMСЛУЖАЩИЕ
WHEREСЛЖ_СТАТ="НЕТ";
и система сама выполнит необходимый полный просмотр файла СЛУЖАЩИЕ, по-
скольку поле
СЛЖ_СТАТ не является ключевым, и другого способа выполнения не
существует.
Это говорит о том, что мощность языка
SQL такова, что позволяет сформу-
лировать любой запрос для получения необходимой информации, в то время
как в навигационных СУБД для этого пришлось бы писать программный код.