Автор: Пользователь скрыл имя, 18 Ноября 2012 в 14:40, лекция
Лекции с глоссарием по базам данным
Как коррелированные, так и некоррелированные запросы бывают трех типов, в зависимости от элементов в предложении WHERE внешнего запроса.
Подзапросы, которые не возвращают ни одного или возвращают несколько элементов (начинаются с IN или с оператора сравнения, содержат ключевые слова ANY или ALL).
Подзапросы, которые возвращают единственное значение (начинаются с простого оператора сравнения).
Подзапросы, которые представляют собой тест на осуществление (начинаются с EXISTS).
Пример. Найти всех сотрудников, у которых должность как у Реброва, а именно заведующий (некоррелированный подзапрос):
SELECT Фамилия, Должность
FROM Сотрудники
WHERE Должность IN (
SELECT Должность
FROM Сотрудники
WHERE Фамилия = ‘Ребров’)
Подзапрос может не возвращать значения или возвращать несколько значений. Эта группа включает подзапросы, начинающиеся с IN, NOT IN или оператора сравнения с ключевыми словами ANY или ALL.
Подзапросы, начинающиеся с ключевого слова IN, имеют следующую общую форму:
Начало операторов SELECT, INSERT, UPDATE, DELETE или подзапроса:
WHERE выражение [NOT] IN (подзапрос)
[Конец операторов SELECT, INSERT, UPDATE или подзапроса]
Результатом внутреннего подзапроса является список, включающий от нуля до нескольких значений.
Когда тот или иной подзапрос начинается с ключевого слова EXISTS, этот подзапрос функционирует как “тест на существование”. Ключевое слово EXISTS в предложении WHERE выполняет проверку на существование (или несуществование) данных, которые удовлетворяют критериям соответствующего подзапроса, т.е. EXISTS выполняет проверку на наличие или отсутствие “пустого набора” строк. Если подзапрос возвращает хотя бы одну строку, этот результат оценивается как “истина”. Если подзапрос возвращает пустой набор, этот результат оценивается как “ложь”.
Подзапросы, начинающиеся с ключевого слова EXISTS, имеют следующую общую форму:
Начало операторов SELECT, INSERT, UPDATE, DELETE или подзапроса
WHERE выражение [NOT] EXISTS (подзапрос)
[Конец операторов SELECT, INSERT, UPDATE или подзапроса]
В другом виде подзапросов, которые не возвращают или возвращают несколько строк, используют оператор сравнения, модифицированный ключевыми словами ANY или ALL. Подзапросы, начинающиеся с модифицированного оператора сравнения, имеют общую форму следующего вида:
Начало операторов SELECT, INSERT, UPDATE, DELETE или подзапроса
WHERE выражение оператор_сравнения [ANY | ALL] (подзапрос)
[Конец операторов SELECT, INSERT, UPDATE или подзапроса]
Что такое ANY и ALL. Если в качестве примера воспользоваться операторами сравнения “ > “, то “ > ALL” означает “больше, чем каждое значение” (другими словами, “больше, чем наибольшее значение”). Таким образом, “ > ALL (1,2,3) ” означает “больше, чем 3 ”. “ > ANY ” означает “больше, чем, по крайней мере, одно значение» (другими словами, “больше, чем наименьшее значение”). Таким образом, “ > ANY (1,2,3) ” означает “больше, чем 1”.
Таблица 10.2 иллюстрирует различие между ключевыми словами ANY и ALL.
Таблица 10.2 Различие между ключевыми словами ANY и ALL | |||
ALL |
Результат |
ANY |
Результат |
> ALL (1,2,3) |
>3 |
> ANY (1,2,3) |
>1 |
< ALL (1,2,3) |
<1 |
< ANY (1,2,3) |
<3 |
= ALL (1,2,3) |
=1 или =2 или =3 |
= ANY (1,2,3) |
=1 или =2 или =3 |
Пример. Найти сведения о сотрудниках организации, зарабатывающих больше, чем любой сотрудник отдела № 30:
SELECT DISTINCT Оклад, Фамилия, Должность, Отдел
FROM Сотрудники
WHERE Оклад > ANY ( SELECT Оклад FROM Сотрудники WHERE Отдел = 30)
Пример. Необходимо узнать фамилии сотрудников, должность и оклад которых совпадают с данными сотрудника Данина:
SELECT DISTINCT Оклад, Должность, Фамилия
FROM Сотрудники
WHERE (Должность, Оклад) = (SELECT Должность, Оклад
FROM Сотрудники WHERE Фамилия = ‘Данин’)
Пример. Составить список сотрудников, должность которых совпадает с должностью сотрудника Реброва или получающих столько же или более чем сотрудник Данин:
SELECT Оклад, Должность, Фамилия
FROM Сотрудники
WHERE Должность = ANY(SELECT Должность
FROM Сотрудники WHERE Фамилия = ‘Ребров’
OR Оклад >= ALL (SELECT Должность
FROM Сотрудники WHERE Фамилия = ‘Данин’)
ORDER BY Должность, Оклад
Пример. Найти фамилию и занимаемую должность всех сотрудников отдела 10, должность которых совпадает с должностью какого-либо сотрудника отдела торговли:
SELECT Должность, Фамилия
FROM Сотрудники
WHERE Должность IN (SELECT Должность
FROM Отелы, Сотрудники
WHERE Назв_отдела = ‘Торговля’ and
Сотрудники.Отдел = Отделы.Отдел)
Предположим, нужно найти номер отдела, фамилию и оклад сотрудников, зарабатывающих больше среднего оклада в своем отделе.
Select Отдел, Фамилия, Оклад
From Сотрудники S
Where Оклад > (Select AVG (оклад)
From Сотрудники
Where отдел = S.отдел)
В данном случае, для каждой строки первый запрос будет вложенным.
Такой механизм называется синхронизацией повторяющегося подзапроса. Псевдоним таблицы, определенный в основном запросе и встречающийся во вложенном подзапросе, сообщает СУБД о необходимости синхронизации подзапроса с основным запросом.
Последовательность действий СУБД при обработке вложенного подзапроса с синхронизацией:
В основном запросе извлекается очередная строка.
Номер отдела из этой строки передается
во вложенный подзапрос и использу
Выполняется вложенный подзапрос,
который вычисляет среднюю
Средний оклад передается в основной запрос и используется в предложении Where.
Пример использования
Найти данные о сотрудниках, работающих в Твери, должность которых такая же, как у Евдокимова:
Select Фамилия, Оклад, Должность, Город
From Сотрудники, Отделы
Where Город = “Тверь” AND
Сотрудники.отдел = Отделы.отдел AND
Должность = ANY (Select Должность
From Сотрудники
Where Фамилия = “Евдокимов”)
ORDER BY Фамилия
Запросы и подзапросы могут комбинироваться из нескольких команд Select с помощью операторов:
Пример. Выдать сотрудников с фамилией Иванов и получающих больше, чем 100 рублей:
Select Фамилия, Оклад
From Сотрудники
Where Фамилия = ‘Иванов’
UNION
Select Фамилия, Оклад
From Сотрудники
Where Оклад > 100
Замечание:
Результирующие таблицы объединяемых запросов должны быть совместимы, т.е. иметь одинаковое количество столбцов и одинаковые типы столбцов в порядке их перечисления. Не требуется, чтобы объединяемые таблицы имели одинаковые имена колонок. Наименования колонок в результирующем запросе будут автоматически взяты из результатов первого запроса.
Служат для повышения скорости обработки таблиц. Для создания индексов существует команда CREATE INDEX:
CREATE INDEX имя ON имя таблицы (столбец1{, столбец2, …})
Достоинства: ускоряется поиск; недостатки: требуется дополнительное дисковое пространство.
Пример. Создать индекс по столбцу
Фамилия для таблицы
CREATE INDEX Сотр_фам ON Сотрудники (Фам):
Если таблица имеет индекс по некоторому столбцу, то этот индекс будет использоваться при поиске информации в таблице, если условие поиска содержит данные из этого столбца.
Найдем данные о сотруднике Егорове:
Select *From Сотрудники
Where Фамилия = ‘Егоров’
Индекс используется только в том случае, если проиндексированный столбец не указан в качестве аргументов функции.
Глоссарий представляет собой перечень понятий, используемых в курсе лекций. Отдельные термины, отсутствующие в тексте настоящего пособия, приведены здесь в целях обеспечения полноты и ясности представления.
А |
Агрегат данных – есть совокупность элементов или других агрегатов. При описании БД каждому агрегату приписывается уникальное имя, по которому к агрегату можно обратиться, как к единому целому при обработке данных
Активная база данных – эта та база данных в которой СУБД выполняет не только те действия, которые явно указывает пользователь, но и дополнительные действия в соответствии с правилами, заложенными в саму БД.
Атрибут (Attribute) - качество вещи; материальный объект, выступающий неотъемлемой частью личности или учреждения; качественная характеристика, а также атрибут это - любое свойство, позволяющее квалифицировать, идентифицировать, измерять сущность или выражать ее состояние либо любое описание объекта или явления. Атрибут также является свойством сущности. Например атрибутами сущности преподавателя могут быть: номер преподавателя, фамилия, телефон и т.п.
атрибут Простой - это тот атрибут, чье значение атомарно, т.е. неделимо (пример простых атрибутов: табельный номер сотрудника, фамилия сотрудника, оклад).
атрибут Сложный - это тот атрибут, чье значение представляет собой объединение значений различных атрибутов.
Б |
База данных (Database) - произвольное собрание таблиц и файлов, контролируемое СУБД.
База знаний (Knowledge Based Systems – система базирующаяся на знаниях). База знаний – эта база данных позволяющая использовать представленные знания с помощью вычислительной машины. Базы знаний отличаются мощной интенциональной частью, которая содержит правила вывода новых знаний и т.д.
Г |
Групповое отношение – это иерархическое (подчиненное) отношение между записями двух типов. Где записи первого типа будут владельцами отношения, а записи второго типа будут членами отношения или подчиненными записями.
Д |
Дедуктивная база данных – эта та база данных чьи правила интенциональной части и запросы пользователей могут содержать рекурсию. В общем случае реляционная база данных является вырожденным частным случаем дедуктивной.
Декартовым произведением множеств называется множество упорядоченных кортежей вида
Декомпозиция (Decomposition) - это получение двух отношений из одного. Отношение декомпозируется (разбивается) на отношения следующего уровня детализации.
Декомпозиция без потерь – это правильно выполненная декомпозиция. Декомпозиция выполнена правильно, если любой один и тот же запрос, примененный к исходному отношению и к полученным в результате декомпозиции отношениям, дает один и тот же результат. То есть соединение R1 и R2 дает в точности исходное соотношение R.
Декомпозиция с потерями. Если естественное соединение R1 и R2 в итоге дает больше кортежей, чем в R.
Детерминант отношения - это подмножество стоящее слево в функциональной зависимости (см. Полная функциональная зависимость).
Диаграмма Бахмана – это графическое изображение структуры БД, где групповые отношения изображается дугами ориентированного графа, а типы записи вершинами.
Домен (Domain) - набор правил ввода значений, форматных ограничений и других свойств, характеризующих группу атрибутов. Другими словами домен - это подмножество значений некоторого типа данных имеющих определенный смысл. Например: список значений и диапазон.
Ж |
Жесткий сбой системы (аварийный отказ аппаратуры). Жесткий сбой характеризуется повреждением внешних носителей памяти. Жесткий сбой может произойти, например, в результате поломки головок дисковых накопителей.
Журнал транзакций- это особая часть БД, недоступная пользователям СУБД и поддерживаемая с особой тщательностью (иногда поддерживаются две копии журнала, располагаемые на разных физических дисках). Журнал транзакций содержит детали всех операций модификации данных в базе данных, в частности, старое и новое значение модифицированного объекта, системный номер транзакции, модифицировавшей объект и т.д.
Журнализация –ведение в базе данных журнала транзакций. См. журнал транзакций.
З |
Запись (Record) – это агрегат, не входящий ни в какой другой агрегат. Это основная единица обработки БД. В СУБД реляционного типа под записью понимается строка. В СУБД, отличной от реляционной, запись это - точка входа в файл, состоящая из индивидуальных элементов данных, которые в совокупности характеризуют один из аспектов информации, циркулирующей в системе. Индивидуальные элементы хранятся в полях записи.
И |
Избыточная зависимость – это та зависимость, которая содержит в себе ту информацию, которая может быть получена из других зависимостей.