Теория и практика построения баз данных (1088289), страница 66
Текст из файла (страница 66)
Язык 80С ЗапРос одиночной таблицы 307 Проектирование в 801. Личный Номер Специальность Курс Личный ~смир Имя Специальность Порядковый Номер Название Предмета Номер Студента Название Предмета Время АудитоРия Мы будем пользоваться теми же самыми шестью отношениями, на примере которых мы иллюстрировали реляционную алгебру в главе 8. Структура этих отношений изображена на рис. 9.1, а данные для примера приведены на рис.
9.2. в рис. 9.2. Данные для примеров применения ЗОЫ в — отношение СТУДЕНТ; о — отношение ЗАПИСЬ; в — отношение ЗАНЯТИЯ Н тобы выполнить проектирование с помощью 51,т1., мы указываем имя отношения, проекция которого берется, и перечисляем требуемые столбцы. При исполь- зовании стандартного синтаксиса БЯ) проекция СТУДЕНТ ЕЛичныйномер, Имя, Спе- циальность| выглядит следукпцим образом: 5ЕЕЕСТ ЛичнийНоиер, Иия.
Специальность ГРОМ СТУДЕНТ Операторы 5ЕСЕСТ и ГкОМ являются обязательными; столбцы, которые нужно получить, перечисляются после оператора 5ЕЕЕСТ, а имя таблицы, проекция которой берется, указывается после оператора ГКОИ, Результат проектирования для данных из рис. 9.2 выглядит следующим образом: Пе путайте оператор 5ЕСЕСТ с оператором выборки (зе!ест1оп) в реляционной алгебре.
С помощью оператора 5ЕЕЕСТ можно выполнять определенные в реляционнои алгебре операции проектирования и выборки, а также некоторые другие леиствия. Выборка же — это операция реляционной алгебры, заключающаяся и получении некоторого подмножества строк из таблицы. Рассмотрим другой пример: 5ЕЕЕСТ Специальность ГНОМ СТУДЕНТ Результатом будет таблица, показанная на следующей странице. Как можно видеть, данная таблица содержит одинаковые строки, и, следовательно, в строгом смысле она не является отношением. На самом деле, 5(~1 не удаляет повторяющиеся строки автоматически, поскольку для этого может потребоваться много времени, а во многих случаях это нежелательно или ненужно. Запрос одиночной таблицы 309 308 Глава 9. Язык 801 5ЕЕЕСТ Иия, Курс ГРОМ СТУДЕНТ ННЕРЕ Специальность - 'МАТЕМАТИКА' Результатом будет: БЕЙКЕР АС РАССЕЛ СЗ 5ЕЕЕСТ О!5Т!НСТ Специальность ГРОМ СТУДЕНТ приведет к следующей таблице: БЕЙКЕР АС Выборка в ЗО~ Если дублируюгциеся строки должны быть удалены, нужно указать ключевое слово О15Т1МСТ, как показано ниже: Результатом этой операции явится отношение: Операция выборки реляционной алгебры также выполняется с помощью коман- ды 5ЕЕЕСТ.
Примером может служить следующее: 5ЕЕЕСТ ЛичныйНриер, Иия, Специальность, Курс ГРОМ СТУДЕНТ ИНЕРЕ Специальность = 'МАТЕМАТИКА' В выражении 5ЕСЕСТ указаны имена всех столбцов таблицы. ГРОМ определяет таблицу, из которой производится выборка, а новая фраза УУНЕРЕ задает условия для выборки. Формат 5ЕЕЕСТ...ГРОМ...УУНЕРŠ— это фундаментальная структура операторов 501.. Следующая запись является эквивалентной формой предыдущего запроса; 5ЕЕЕСТ* ГРОМ СТУДЕНТ ННЕРЕ Специальность = 'МАТЕМАТИКА' Звездочка (*) означает, что предстоит получить все столбцы таблицы.
Результатом обоих этих запросов будет таблица: Выборку и проектирование можно объединить: В предложении УУНЕРЕ можно указать несколько условий. Например, выражение 5ЕЕЕСТ Иия, Курс ГРОМ СТУДЕНТ ИНЕРЕ Специальность = 'МАТЕМАТИКА' АМО Курс = 'АС' Условия в предложении УУНЕРЕ могут относиться к множеству значений. Для этого можно использовать операторы 1М и НОТ 1М. Рассмотрим выражение 5ЕЕЕСТ Иия ГРОМ СТУДЕНТ ИНЕРЕ Специальность 1М [' МАТЕМАТИКА'. 'БУХГАЛТЕРСКИЙ УЧЕТ' ) Обратите внимание, что в скобках можно указывать несколько значений. Это выражение означает следующее: «Отобразить имена студентов, специализирующихся на математике или бухгалтерском учете».
Результатом будет таблица: Выражение 5ЕЕЕСТ Иия ГРОМ СТУДЕНТ инеРе специальность мОт 1м ['НАтемАтикА', 'БУхГАлтеРский Унет') Запрос одиночной таблицы 311 310 Глава 9. Язык 80С ЛЕЕЕСТ Иня 1 ЛОМ СТУДЕНТ ННЕЯЕ Иня С1КЕ 'ЖС' Результатом будет: 5ЕЕЕСТ Иня, Сгецнальнасть ГНОМ СТУДЕНТ ННЕЯЕ ЛнчныйНонер ВЕТНЕЕН 200 ЯНО 300 даст следующий результат: Это выражение эквивалентно записи: чЕЕЕСТ Иня 1ЯОМ СТУДЕНТ ННЕЯЕ Курс 15 НОЫ.
Сортировка 5ЕЕЕСТ Иня, Курс ГЙОМ СТУДЕНТ ННЕЯЕ Курс Е1КЕ 'С ' 5ЕЕЕСТ Иня, Специальность, Курс ГЯОМ СТУДЕНТ представляет имена студентов, которые специализируются в любых областях, кроме математики и бухгалтерского учета. Результатом будет таблица: Выражение Специальность 1Н означает, что столбец Специализация может содержать любые из перечисленных значений. Это эквивалентно логическому оператору ИЛИ. Выражение Специальность НОТ 1Н означает, что значение в соответствующем столбце не должно равняться ни одному из перечисленных значений. В предложениях ИтНЕЯЕ можно также указывать диапазоны н шаблоны. Диапазоны задаются с помощью оператора ВЕТФЕЕН. Например, оператор 5ЕЕЕСТ Иня, Сгецнальность ГРОМ СТУДЕНТ ННЕЯЕ ЛнчныйНонер >- 200 ЯНО ЛнчныйНонер <= 300 Таким образом, при использовании оператора ВЕТИ1ЕЕН граничные значения (здесь это 200 и 300) включаются в выбранный диапазон.
Оператор Е1КЕ используется в ВОТ.-выражениях для выборки по тпаблону. Символ ' ' (подчеркивание) представляет произвольный одиночный символ. Символ '%' (процент) представляет последовательность из одного или более произвольных символов.
Так, результатом выражения является отношение, имеющее два столбца — Имя и Курс, где Курс состоит из двух символов, первым из которых является 'С': Следующее выражение позволяет найти студентов, чьи имена оканчивак1тся на 'С'. (В М1сгозой Ассеяя используется иной набор джокеров, чем в стандарте А1 151, 11место символа подчеркивания используется символ '?', а вместо символа пропп ~та — символ '*'.) Наконец, оператор 15 НОСЕ предназначен для поиска пустых (или отсутствуюитих) значений.
Выражение ласт имена студентов, у которых отсутствует значение в столбце Курс. Из данных, приведенных на рис. 9.2, можно видеть, что запись о курсе имеется у всех студен- п1в, поэтому результатом данного выражения будет отношение, не содержащее пи одной строки. Строки результирующего отношения могут быть отсортированы по значениям одного или нескольких столбцов с помощью оператора ОЯОЕЯ ВУ. Рассмотрим сле- дующий пример: 312 Глава 9. Язык 80С Запрос одиночной таблицы, 313 5ЕСЕСТ СООИТ(*) ГКОН СТУДЕНТ Рассмотрим выражения 5Е[ЕСТ СООИТ (Специальность) ГК[ХЯ СТУДЕНТ БЕ[ЕСТ СООИТ (015Т!ИСТ Специальность) ГКОН СТУДЕНТ Результатом будет таблица: [ з ) БЕ[ЕСТ Иия, СООИТ !*) ННЕКЕ Специальность = 'БУХГАЛТЕРСКИЙ УЧЕТ' ОКОЕК ВУ Иия Этот запрос перечислит в алфавитном порядке студентов, специализирующихся на бухгалтерском учете. Результат имеет следующий вид: Для сортировки можно выбрать более одного столбца.
В этом случае первый из указанных столбцов будет главным полем, по которому будет производиться сортировка, следующий столбец будет следующим по старшинству полем, и т. д. Можно объявить сортировку столбцов как по возрастанию (ключевое слово А5С), так и по убыванию (ключевое слово ОЕ5С). В качестве примера рассмотрим следующий оператор: БЕ[ЕСТ Иия, Специальность, Курс ГКОН СТУДЕНТ ННЕКЕ Курс 1И ['С1', 'С2'. 'С4'1 ОКОЕК Ву Имя АБС, Курс ОЕ5С Ключевые слова ОРОЕ К Ву могут комбинироваться с любыми операторами 5ЕЕЕСТ. Встроенные функции ЗСН В 5Я1 предусмотрено пять встроенных функций (Ьц!1Г-!и [цпсТ!опя): СООИТ, 50М, АЧС, МАХ и М1Н'. Функции СООИТ и 50М различны, хотя обе они выполняют подсчет.
Функция СООИТ вычисляет количество строк в таблице, а 50М подсчитывает ! иногда встроенные функции называют также игрегироеанными функциями (ахкгеяасе уинсг)оих), чтобы огличать их от встроенных фуикций языков програымироааиия, таких как ВОВВТК!НО. количество числовых столбцов. Функции АЧБ, МАХ и М1И также работают с числовыми столбцами: АЧБ вычисляет среднее значение, а МАХ и М1И находят соответстиенно максимальное и минимальное значение столбца в таблице. Выражение подсчитывает количество строк в таблице СТУДЕНТ и отображает его в таблице, имеющей одну строку и один столбец: Первое выражение подсчитывает общее количество специальностей в таблице, лключая повторения, а второе — количество различных специальностей.
Результаты имеют следующий вид: За исключением операторов с ключевым словом БКООР ВУ, которое рассмотре!ю ниже, встроенные функции в операторе 5ЕЕЕСТ не могут перемежаться с именами столбцов. Таким образом, запись вида недопустима. Встроенные функции можно использовать для запроса результата, как в приведенных выше примерах. В большинстве реализаций 5Щ и в стандарте АК31 501 встроенные функции не могут фигурировать в предложении И)НЕВЕ. Встроенные функции и группировка Для большей практичности встроенные функции можно применять к группам строк внутри таблицы. Такие группы формируются путем сбора (в логическом, Запрос нескольких таблиц 315 314 Глава 9.
Язык 80С 5ЕСЕСТ Специальность. НАХ (ПнчныйНсиер) ГРОМ СТУДЕНТ ИНЕРЕ Курс - 'С4' 6РООР ВУ Специальность НАУ1М6 СООИТ (*) > 1 5ЕСЕСТ Иня, СОЛТ(*) ГРОМ СТУДЕНТ 6РООР ВУ Специальность Результатом будет отношение: 5ЕЕЕСТ Специальность. СООИТ (*) ГРОМ СТУДЕНТ 6РООР ВУ Специальность НАУ)М6 СООМТ (*) > 2 Вложенные запросы 5ЕСЕСТ Иня ГРОМ СТУДЕНТ ИНЕРЕ ЛнчныйНонер 1М 1100.
200) 5ЕСЕСТ НснерСтудента а не в физическом смысле) строк, имеющих одинаковое значение заданного столбца. Например, студентов можно группировать по специальностям — то есть для каждого значения атрибута Специальность будет сформирована своя группа. На рис. 9.2 можно выделить три группы студентов: одна специализируется на истории, другая — на бухгалтерском учете, а третья — на математике.
Ключевое слово 6КООР ВУ инструктирует СУБД группировать те строки, которые имеют одинаковое значение заданного столбца. Рассмотрим выражение Строки таблицы СТУДЕНТ логически сгруппированы по значению атрибута Специальность, а функция СООМТ суммирует количество строк в каждой группе. Результат представляет собой таблицу из двух столбцов: названия специальности и количества студентов с этой специальностью. Для подгрупп в операторе 5ЕСЕСТ могут быть указаны как столбцы, так и встроенные функции.
В некоторых случаях возникает потребность рассматривать не все группы. Например, мы сформировали группы студентов, имеющих одинаковую специальность, и теперь хотим рассматривать только те из них, количество студентов в которых больше двух. Чтобы указать нужное нам подмножество групп, мы можем воспользоваться 5О1:предложением НАУ1М6. Следующие операторы ВО) выдают перечень предметов, на которых специализируется более двух студентов, а также количество студентов, занимающихся по каждой из этих специализаций: Здесь составляются группы из студентов, имеющих одинаковую специальность, затем выбираются те из них, в составе которых имеется более двух студентов (прочие группы игнорируются.) На выходе выдаются название специальности и число студентов в каждой из выбранных групп. Результат имеет следуютций вид: Для еще большей общности могут быть также добавлены предложения УХНЕКЕ.