- •Работа транзакций в смеси
- •Проблема параллельной работы транзакций
- •Блокировки
- •Разрешение тупиковых ситуаций.
- •Предикатные блокировки
- •Метод временных меток
- •Механизм выделения версий данных
- •Теория Есварана
- •Протокол двухфазной блокировки
- •Реализация изолированности транзакций средствами языка SQL
- •Транзакции и восстановление данных
- •Виды восстановления данных
- •Индивидуальный откат транзакций
- •Восстановление после мягкого сбоя
- •Восстановление после жесткого сбоя
- •Представление знаний в интеллектуальных системах.
- •Данные и знания. Основные определения
- •Модели представления знаний
- •Способы описания.
- •Стратегии решения организации поиска
- •Логический подход. Представление простых фактов в логических системах
- •Типовая организация СУБД. Внутренняя организация реляционной СУБД
- •Внутренняя организация реляционной СУБД.
- •Хэширование
- •Журнальная информация
- •Служебная информация
- •Язык SQL. Функции и основные возможности
- •Определение ограничения целостности и тригеров
- •Представление БД
- •Определение управляющих структур
- •Авторизация доступа к отношениям и их полям
- •Точки сохранения и отката транзакций. Встроенный SQL
- •Динамический SQL
- •Определение представлений.
- •Определение привилегий.
- •Средства манипулирования данными.
- •Табличные выражения.
- •Использование SQL при прикладном программировании.
- •Встроенный SQL
- •Одиночные операторы манипулирования данных.
- •Некоторые черты SQL’92 и SQL–3 (SQL’99)
30
2.выражение запросов – выражения, строящиеся на спецификации курсора.
UNION – обязательное условие наличия данного слова
Объединение таблиц должно содержать одинаковое количество столбцов и должно иметь одинаковые типы.
ORDER BY – позволяет устанавливать порядок просмотра результатов выполнения запроса.
<order by clause>::= ORDER BY <sort specification> <sort specification> ::= ASC | OECS
Определение выборки – позволяет получить результат выполнения запроса без привлечения курсора.
SELECT * INFO temp
Табличные выражения.
Табличные выражения – это совокупность последовательности выполнения разделов FROM, WHERE, GROPE BY
<from clause>::= FROM <table reference > [{,<table reference>}…]
<table reference>::=<table name> [<correlation name>]
Раздел WHERE записывается следующим образом: <where clause>::=WHERE <search condition>
<search condition>::=<boolean term >(< search condition > OR <boolean term>)
<boolean term>::=<boolean factor >(<boolean term> AND <boolean factor>)
<boolean factor>::=[NOT] <boolean primary>
<boolean primary>::=< predicate> | (<search condition>)
Пусть R- есть некоторый результат, полученный из раздела FROM, тогда вычислением раздела WHERE будет
Если условие выборки содержит подзапросы, то каждый подзапрос вычисляется для каждого картежа таблицы R.
3VL – трехзначная логика (3 value logic).
3VL – исключительно экстраперабельна (переносима).
31
T AND U = U |
(U - unknown) |
U AND U = U |
(T - true) |
T OR U = T |
|
U OR U = U |
|
NOT U = U |
|
Среди предикатов условия поиска предусматривают:
1)предикат сравнения;
2)предикат between;
3)предикат in;
4)предикат like;
5)предикат null;
6)предикат с квантором;
7)предикат exists.
Все предикаты влияют на эффективность запроса. По возможности использовать простые предикаты.
Предикат сравнения.
<comparison predicate>::=<value expression><comp op>
{< value expression >|<subquery>} <comp op>::==|<>|<|>|<=|>=
(Операнды) таблицы, строим из From и др. Операнды должны быть сравнимы по типу.
Если правый операнд является подзапросом, то мощность результирующего выражения должно быть не больше 1.
Если операнды имеют значения U и результат подзапроса U, то результат
– U.
В стандарте SQL’89 неопределённые значения используется как отдельный тип данных или ссылки в разделах DISTINCT, GROUP BY и ORDER BY.
Предикат between.
<between predicate>::=<value expression>::=
[NOT] Between <value expression> AND <value expression>
Предикат in.
<in predicate>::=<value expression> [NOT] in
{<subquery>|(<in value list>)} <in value list>::==<value specification>{,<value specification>}
32
Типы операндов слева и справа должны быть сравнимы. Значение предиката есть True, если значение слева совпадает хотя бы с одним значением, содержащимся в правой части.
Предикат like.
<like predicate>::=<column specification> [NOT] LIKE <pattern> [ESCAPE <escape character>]
<pattern>::=<value specification>
<escape character>::=<value specification>
Операнды слева и справа должны быть типа символьной строки. Значение предиката есть true, если шаблон есть вхождение, подстрока заданного подстолбца. Если раздел Escape отсутствует, то есть специальная интерпретация двух символов в шаблоне:
1)“_” – как любой одиночный символ;
2)“%” – последовательность произвольных символов произвольной длинны.
Если Escape присутствует, например Х, то “х_”, “х%”.
Предикат null.
<null predicate>::=<column specification> is [NOT] NULL
Значение предиката принимает либо True, либо Null. X IS NULL, X = UNKNOWN.
True в том случае, если значение операнда слева неопределённо.
Предикат с квантором.
<quantified predicate>::=<value expression>
<comp op><quantifier><subquery> <quantifier>::=<all>|<some>
<all>::=ALL
<some>::=SOME|ALL
Пусть через Х обозначим результат арифметического выражения в левой части.
S – результат выполнения подзапроса.
Тогда результат Х <comp op> ALL S=T, если S – пустое или Х
<comp op> S=true, для всех s € S.
Х<comp op> ALL S=F хотя бы для одного s Х <comp op> S = false, иначе значение = U.
Х<comp op> SOME S=F, если S – пустое или Х
<comp op> S=false, для всех s € S.
33
Х<comp op> SOME S=T, если Х <comp op> S=true хотя бы для одного s
Х<comp op> S = false, иначе значение = U.
Предикат exists.
<exists predicate>::=EXISTS <subquery>
Значение предиката истина, когда результат выполнения не пуст.
GROUP BY.
<group by clause>::= GROUP BY <column specification> [{,<column specification >}…]
Если представить в качестве R результат выполнения предыдущих разделов, то результатом GROUP BY является разделение R на множество групп строк, состоящего из минимально числа таких групп, что для каждого столбца из списка GROUP BYво всех строках каждой группы значения равны.
Раздел Having.
<having clause>::=HAVING <search condition>
Раздел having осмысленно появляется при наличии раздела group by. Задаётся для поиска строк внутри групп сгруппированной таблицы.
Условие поиска по те же правилам, что и в разделе Where. Но одно отличие, что условие задаётся на группу строк, а не на одну строку.
Результат поиска для каждой таблицы которая даёт True.
Агрегатные функции. (результата запроса)
<set function specification>::= COUNT (*) |<distinct set function> |<all set function>
<distinct set function>::={AVG|MAX|MIN|SUM|COUNT} (DISTINCT<column specification>)
<all set function>::={AVG|MAX|MIN|SUM}([ALL]<value expression>)
Семантика агрегатных функций.
Если T – есть тип значений, то результат функции COUNT совпадает с типом T в соответствии с точностью в конкретной реализации.
Для всех агрегатных функций кроме COUNT порядок вычисления следующий:
1) на основании параметров функции из заданного множества строк формируется список значений
