С.Д. Кузнецов - Основы баз данных (1121716), страница 67
Текст из файла (страница 67)
Пример 14.27. БКЬЕСТ ЕМР ИО, ОЕРТ НО РВОМ ЕМР ХНЕЕЕ (РКРТ БО, ЕМР ВОАТЕ) МАТСН РЛ Ь (БЕЬЕСТ ЕМР1.РКРТ ИО, ЕМР1.ЕМР ВОАТЕ РВОМ ЕМР ЕМР1 ХНЕНЕ ЕМР1.ЕМР ЫО <> ЕМР.ЕМР ИО)) Этот запрос вернет данные о служащих, о которых: ° либо неизвестны номер отдела и дата рождения; ° либо в отделе данного служащего работает по крайней мере еще один человек с той же датой рождения. Если использовать предикат НАТСН ОМ1апе Р~л.ь, то мы получим данные о служащих, о которых: ° либо неизвестны номер отдела и дата рождения; ° либо в отделе данного служащего работает еще один человек с той же датой рождения. Предикет 41аеапсс Предикат позволяет проверить, являются ли две строки дубликатами. Условие определяется следующим синтаксическим правилом: д1ас1псс ргес)1сасе::= гон ча1це сопзкгцског 1Е Р1ЕТ1ИСТ РВОМ гон ча1ие сопасгцссог Строки-операнды должны быть одинаковой степени.
Типы данных соответствующих значений строк-операндов должны быль совместимы. Напомним, что две строки з1 с именами столбцов с1, с2, ..., сп и з2 с именами столбцов сП, с)2, ..., сп считаются строками-дубликатами, если для каждого 1 ( 1 = 1, 2, ..., п ) либо с1 и с1 не содержатпплл,, и (с1 = И) = Ггие, либо и с1, и с)1 содержат НОВЬ. Значением условия а1 1В О1ет1нст Рном а2 является птте в том и только в том случае, когда строки з1 и а2 не являются дубликатами. В противном случае значением условия является7а)зе. Заметим, что отрицательная форма условия — 1е ХОТ О1еттист РВОМ вЂ” в стаидартс 3( )т.
не поддерживается. Вместо этого можно воспользоваться выражениемнот а1 1е Отеттнст гном з2. 315 Основы баз данных КУРС Примеры запросов с исполъзоввнием предиквтв Н1аездсе Пример 14.28. Найти номера и имена служаших отдела 65, которых можно отличить по данным об имени и дате рол(дения от руководителя отдела 65. ЯЕЬЕСТ ЕМР НО, ЕМР МАМЕ РВОМ ЕМР ННННГ РЕРТ НО = 65 АНР (ЕМР МАМЕ, ЕМР ВРАТЕ) 1Я Р1ЯТ1ИСТ ГНОМ (ЯЕЬЕСТ ЕМР1.ЕМР МАМЕ, ЕМР1.ЕМР ВРАТЕ ГНОМ ЕМР ЕМР1, ОЕРТ ННЕНЕ ЕМР1.ОЕРТ НО = ЕМР.РЕРТ НО АНО РЕРТ.БЕРТ МНО = ЕМР1.ЕМР ИО); Пример 14.29. Найти все пары номеров таких служащих отдела 65, которых нельзя различить по данным об имени и дате рождения. ЯЕ1 ЕСТ ЕМ1'1.ЕМР НО, ЕМР2.ЕМР НО ГРОМ ЕМР ЕМР1, ЕМР ЕМР2 ИНЕЕЕ ЕМР1.ЕМР ИО <> ЕМР2.ЕМР ИО АНО НОТ ((ЕМР1.ЕМР МАМЕ, ЕМР1.ЕМР ВОАТЕ) 1Я 01ЯТ1ИСТ ГНОМ (ЕМР2.ЕМР МАМЕ, ЕМР2.ЕМР ВРАТЕ))," Заключение В этой лекции мы обсудили наиболее важные возможности языка ЯН., связанные с выборкой данных.
Даже простые примеры, приводившиеся в лекции, показывают исключительную избыточность языка 8 Н . Еше в то время, когда действующим стандартом языка был Б( Н./92, была опубликована любопытная статья, в которой приводилось 25 формулировок одного и того же несложного запроса. При использовании всех возможностей Б( )Е:1999 этих формулировок было бы гораздо больше. Можно спорить, хорошо или плохо иметь возможность формулировать один и тот же запрос десятками разных способов. На мой взгляд, это не очень хорошо, поскольку увеличивает вероятность появления ошибок в запросах (особенно в сломсных запросах).
С другой стороны, таково объективное состояние дел, и мы стремились обеспечить в этой лекции материал, достаточный для того, чтобы прочувствовать различные возможности формулировки запросов. Как показывают следующие две лекции, возможности, предоставляемые оператором ЯЕЬЕСТ, в действительности гораздо шире. 316 Лекция 15 Группировка и условия раздела НЯИМО, порождаемые и соединенные таблицы Лекция 15. Язык баз данных ЗО(.: группировка и условия раздела яркую)б0, порождаемые и соединенные таблицы В втой лекции мы завершаем обсуждение основных (традиционных) конструкций оператора йцьцст языка ВО( . В разделе «Агрегатные функции, группировка и условия раздела нктгтма» обсуждаются разделы пнопг вх и нкчтип.
Основной акцент делается на способах конструирования условий раздела идгп~а. На примерах демонстрируется, что разделы скоцг вх и нкчхио действительно полезны, а иногда и необходимы при формулировке запросов с вызовами агрегатных функций. В разделах «Ссылки на порождаемые таблицы в разделе гном» и «Более сложные конструкции оператора выборки» мы возвращаемся к разновидностям ссылок на таблицу в разделе гном и последовательно обсуждаем порождаемые таблицьд соединенные таблицы и порождаемые таблицы с горизонтальной связью. Ключевые слова: агрегатные функции, семантика агрегатных функций, типы значений агрегатных функций, использование агрегатных функций в разделах НАЧТГЯО и ЯЕЬЕОТ оператора выборки, логические выражения раздела нлчтгяа, предикаты сравнения, предикат ьесыееп, предикат пы11, прсдикат 1п, прсдикат 1(йе, предикат ех1вс в, предикат цп(с)це, пРедикаты сравнения с квантоРом, пРедикат Ж ас1псг, ссылки на порождаемые таблицы в разделе гном, соединенная таблица, соответствующие столбцы соединения, список выборки соответствующих столбцов соединения, прямое соединение (сеОЯЯ,тОЩ, внугрсннсе соединение по условию (Тннеп,тотгя ...
Огя), внутреннее соединение по совпадению значений указанных одноименных столбцов (1ннее Оопп ... Оятгяо), естественное внутреннее соединение (гядтоель тгляеп,тотгя), левое внешнее соединение по условию (ьегт оотее,тотгя ... Он), правое внешнее соединение по условию (етснт оцтее,тотгя ... Огя), полное внешнее соединение по условию (гоьь ООТЕЕ ООТГя ...
Огя),симметричносвнешнеесосдинение,левоевнешнее соединение по совпадению значений указанных одноименных столбцов(ьегт Оотее Я01гя ... ОЯ1гяо), правое внешнессоединение по совпадению значений указанных одноименных столбцов (етонт оитеп,тОТГя ... ОЯПяа), полное внешнее соединение по совпадениЮ значений указанных одноименных столбцов (ГОЬЬ ОитЕе,тОТГя Оятно), естественное левое внешнее соединение (гядтояль ьегт ООТЕЯ,701Н), естественное правое внешнее соединение (гядтцель етонт оцтее,тотгя), естественное полное внешнее соединение (гядтоель гоьь оцтеп,топя), соединение объединением Згт Основы баз данных (глчтон готы), порождаемые таблицы с горизонтальной связью (1авега1 с(ег1»ес( ваЬ1е).
Введение В предыдущих двух лекциях мы обсудили допускаемые в стандарте БОБ виды ссылок на таблицы в разделе увом оператора Нкькет и подробно, с многочисленными примерами, рассмотрели возможные способы построения условных выражений раздела ИНННК. Данную лекцию мы начинаем с анализа возможностей и целесообразности использования в запросах разделов ОНО()Р ВУ и НАЧ1Ж. Соответствующий раздел «Агрегатные функции, группировка и условия раздела имли» формально похож на раздел «Логические выражения раздела инннн» лекции 14: обсуждаются виды предикатов, которые можно использовать в условных выражениях раздела нлчтнс, и приводятся иллюстрирующие примеры. Но в действительности мы преследуем большую цель: показать, что во многих случаях разделы аноцр ву и НЛУ1на являются избыточными; запрос можно сформулировать более понятным образом без их использования.
Применение разделов Сноцр ву и НЛЧ1НС оказывается действительно полезным, а иногда и необходимым, в тех случаях, когда в запросе присутствует несколько вызовов агрегатных функций на группах строк. После обсуждения разделов йноцг ву и нлу1НС можно будет считать, что мы полностью рассмотрели базовые конструкции оператора выборки (раздел онпкн ну не заслуживает дополнительного обсуждения).
поэтому в разделах «Ссылки на порождаемые таблицы в разделе гном» и «Более сложные конструкции оператора выборки» мы возвращаемся к отложенным в лекции 13 темам порождаемых таблиц, соединенных таблиц и порождаемых таблиц с горизонтальной связью. В обычных порождаемых таблицах БОБ нет ничего особенного. По всей видимости, возможность указывать в Разделе гном выражения запРосов, а не только ссылки на базовые или представляемые таблицы, была введена в 5(;Н. на основе следующих естественных соображений. Результатом вычисления выражения запросов в ЯЯ.
является таблица. Следовательно, в любой конструкции языка, где может присутствовать ссылка на таблицу Я.Н., следует допустить присутствие выражения запросов. Одновременное наличие возможностей определения представляемых таблиц, указания именованного выражения запросов в разделе игтн и указания выражения запросов поролщаемой таблицы непосредственно в списке раздела гном, очевидно, является избыточным.
Соединенные таблицы появились еще в стандарте БЯ) /92, и внедрение в стандарт ЯО1. этой возможности было действительно обоснованным. В соответствии с традиционной обшей семантикой оператора 318 Лекция 15 Группировка н условия раздела НАИМ0, порождаемые н соединенные таблицы Беьест в нем вообще не предусматривали явные средства для выражения потребности в соединении двух или более таблиц.