Сотрудник | Должность | Зарплата | Наличие компьютера |
Гришин | Кладовщик | Нет | |
Васильев | Программист | Есть | |
Иванов | Кладовщик | Нет |
Зарплату сотруднику каждый начальник устанавливает сам (хотя её границы зависят от должности). Наличие же компьютера у сотрудника зависит только от должности, то есть зависимость от первичного ключа неполная.
В результате приведения к 2NF получаются два отношения:
Сотрудник | Должность | Зарплата |
Гришин | Кладовщик | |
Васильев | Программист | |
Иванов | Кладовщик |
Должность | Наличие компьютера |
Кладовщик | Нет |
Программист | Есть |
12. Дайте определение 3НФ, приведите пример нормализации.
Переменная отношения находится в третьей нормальной форме тогда и только тогда, когда она находится во второй нормальной форме и отсутствуют транзитивные функциональные зависимости неключевых атрибутов от ключевых.
Рассмотрим в качестве примера отношение, которое находится во 2NF, но не соответствует 3NF:
R1 | ||
Сотрудник | Отдел | Телефон |
Гришин | Бухгалтерия | 11-22-33 |
Васильев | Бухгалтерия | 11-22-33 |
Петров | Снабжение | 44-55-66 |
В отношении атрибут «Сотрудник» является первичным ключом. Личных телефонов у сотрудников нет, и телефон сотрудника зависит исключительно от отдела.
Таким образом, в отношении существуют следующие функциональные зависимости: Сотрудник → Отдел, Отдел → Телефон, Сотрудник → Телефон.
Зависимость Сотрудник → Телефон является транзитивной, следовательно, отношение не находится в 3NF.
R3 | |
Сотрудник | Отдел |
Гришин | Бухгалтерия |
Васильев | Бухгалтерия |
Петров | Снабжение |
В результате декомпозиции отношения R1 получаются два отношения, находящиеся в 3NF:
|
R2 | |
Отдел | Телефон |
Бухгалтерия | 11-22-33 |
Снабжение | 44-55-66 |
13. Дайте определение НФ Бойса-Кодда, приведите пример нормализации.
Переменная отношения находится в нормальной форме Бойса — Кодда (иначе — в усиленной третьей нормальной форме) тогда и только тогда, когда каждая ее нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ.
Предположим, создаётся таблица бронирования для теннисных кортов на день: {Номер корта, Время начала, Время окончания, Тариф, Член клуба}. Тариф зависит от выбранного корта и членства в клубе, для каждого из кортов имеется тариф для членов теннисного клуба и для сторонних клиентов. Тарифы для кортов не повторяются.
Таким образом, возможны следующие составные первичные ключи: {Номер корта, Время начала}, {Номер корта, Время окончания}, {Тариф, Время начала}, {Тариф, Время окончания}.
Таблица соответствует второй и третьей нормальной форме. Требования второй нормальной формы (2NF) выполняются, так как все атрибуты входят в какой-то из потенциальных ключей, а неключевых атрибутов в отношении нет. Также нет и транзитивных зависимостей, что соответствует требованиям третьей нормальной формы. (3NF).
Тем не менее, существует функциональная зависимость тарифа от номера корта. То есть, по ошибке можно нарушить логическую целостность и, например, приписать тариф Premium для первого корта, хотя тариф Premium может относиться только ко второму корту.
Можно улучшить структуру, разбив таблицу на две: {Номер корта, Время начала, Время окончания, Член клуба} и {Тариф, Номер корта, Член клуба}. Данное отношение будет соответствовать BCNF.
|
14. Дайте определение 4НФ, приведите пример нормализации.
Переменная отношения находится в четвёртой нормальной форме, если она находится в нормальной форме Бойса — Кодда и не содержит нетривиальных многозначных зависимостей.
Предположим, что рестораны производят разные виды пиццы, а службы доставки ресторанов работают только в определенных районах города. Составной первичный ключ соответствущей переменной отношения включает три атрибута: {Ресторан, Вид пиццы, Район доставки}.
Такая переменная отношения не соответствует 4НФ, так как существует следующая многозначная зависимость:
{Ресторан} >{Вид пиццы}
{Ресторан} >{Район доставки}
То есть, например, при добавлении нового вида пиццы придется внести по одному новому кортежу для каждого района доставки. Возможна логическая аномалия, при которой определенному виду пиццы будут соответствовать лишь некоторые районы доставки из обслуживаемых рестораном районов.
Для предотвращения аномалии нужно декомпозировать отношение, разместив независимые факты в разных отношениях. В данном примере следует выполнить декомпозицию на {Ресторан, Вид пиццы} и {Ресторан, Район доставки}.
Однако если к исходной переменной отношения добавить атрибут, функционально зависящий от потенциального ключа, например цену с учётом стоимости доставки ({Ресторан, Вид пиццы, Район доставки} → Цена), то полученное отношение будет находиться в 4НФ и его уже нельзя подвергнуть декомпозиции без потерь.[источник не указан 80 дней] Указанные выше многозначные зависимости в данном случае называются внедрёнными зависимостями.
|
15. Дайте определение 5НФ.
Для определения пятой нормальной формы следует предварительно ввести понятие зависимости соединения, которое, в свою очередь основано на понятии декомпозиции без потерь.
Отношение находится в пятой нормальной форме (иначе — в проекционно-соединительной нормальной форме) тогда и только тогда, когда каждая нетривиальная зависимость соединения в нём определяется потенциальным ключом (ключами) этого отношения[2].
Зависимость соединения *{A, B,..., Z} определяется потенциальным ключом (ключами) тогда и только тогда, когда каждое из подмножеств A, B,..., Z множества атрибутов является суперключом отношения[2].
Условие «каждое из подмножеств A, B,..., Z множества атрибутов является суперключом отношения» можно эквивалентно сформулировать так: «каждое из подмножеств A, B,..., Z множества атрибутов включает некоторый потенциальный ключ отношения».
Декомпозиция без потерь
Декомпозицией[1] отношения R называется замена R на совокупность отношений { R 1, R 2,..., Rn } такую, что каждое из них естьпроекция R, и каждый атрибут R входит хотя бы в одну из проекций декомпозиции.
Например, для отношения R с атрибутами {a, b, c} существуют следующие основные варианты декомпозиции:
· {a}, {b}, {c}
· {a}, {b, c}
· {a, b}, {c}
· {b}, {a, c}
· {a, b}, {b, c}
· {a, b}, {a, c}
· {b, c}, {a, c}
· {a, b}, {b, c}, {a, c}
Рассмотрим теперь отношение R', которое получается в результате операции естественного соединения (NATURAL JOIN), применённой к отношениям, полученным в результате декомпозиции R.
Декомпозиция называется декомпозицией без потерь, если R' в точности совпадает с R.
Неформально говоря, при декомпозиции без потерь отношение «разделяется» на отношения-проекции таким образом, что из полученных проекций возможна «сборка» исходного отношения с помощью операции естественного соединения.
Далеко не всякая декомпозиция является декомпозицией без потерь. Проиллюстрируем это на примере отношения R с атрибутами {a, b, c}, приведённом выше. Пусть отношение R имеет вид:
R | ||
a | b | c |
Москва | Россия | столица |
Томск | Россия | не столица |
Берлин | Германия | столица |
Декомпозиция {a}, {b, c} имеет вид:
R1 |
a |
Москва |
Томск |
Берлин |
R2 | |
b | c |
Россия | столица |
Россия | не столица |
Германия | столица |
Результат операции соединения этих отношений:
R' = R1 NATURAL JOIN R2 | ||
a | b | c |
Москва | Россия | столица |
Москва | Россия | не столица |
Москва | Германия | столица |
Томск | Россия | столица |
Томск | Россия | не столица |
Томск | Германия | столица |
Берлин | Россия | столица |
Берлин | Россия | не столица |
Берлин | Германия | столица |
Очевидно, что R' не совпадает с R, а значит такая декомпозиция не является декомпозицией без потерь. Рассмотрим теперь декомпозицию {a, b}, {a, c}:
R1 | |
a | b |
Москва | Россия |
Томск | Россия |
Берлин | Германия |
R2 | |
a | c |
Москва | столица |
Томск | не столица |
Берлин | столица |
Такая декомпозицией является декомпозицией без потерь, в чём читатель может убедиться самостоятельно.
В некоторых случаях отношение вовсе невозможно декомпозировать без потерь. Существуют также примеры отношений, для которых нельзя выполнить декомпозицию без потерь на две проекции, но которые можно подвергнуть декомпозиции без потерь на три или большее количество проекций[2].
Зависимость соединения
Пусть R — переменная отношения, а A, B,..., Z — некоторые подмножества множества ее атрибутов.
Если декомпозиция любого допустимого значения R на отношения, состоящие из множеств атрибутов A, B,..., Z, является декомпозицией без потерь, говорят, что переменная отношения R удовлетворяет зависимости соединения *{А, В,..., Z} [3].
Иными словами, переменная отношения R удовлетворяет зависимости соединения *{А, В,..., Z} тогда и только тогда, когда любое допустимое значение переменной отношения R эквивалентно соединению ее проекций по подмножествам A, B,..., Z множества атрибутов.
Подобно тому, как функциональная зависимость есть частный случай многозначной зависимости, многозначная зависимость является частным случаем зависимости соединения. Зависимость соединения является предельным обобщением понятий многозначной и функциональной зависимости, то есть это наиболее общая форма зависимости между атрибутами отношения.
Важно понимать, что зависимость соединения определяется не для конкретного значения переменной отношения в тот или иной момент времени, а по всем возможным значениям. Поэтому понятие зависимости соединения определено не для отношения (конкретного значения), а для переменной отношения. Зависимость соединения определяется не механически по текущим значениям, а следует из внешнего знания о природе и закономерностях данных, которые могут находиться в переменной отношения. То же самое относится к многозначной и функциональной зависимостям.
Зависимость соединения *{A, B,..., Z} является тривиальной тогда и только тогда, когда по крайнем мере одно из подмножеств A, B,..., Z является множеством всех атрибутов отношения (включает все атрибуты). В противном случае зависимость соединения является нетривиальной.
16. Чтотакоемодель ER (Entity-Relation Model)?
Модель сущность-связь (ER-модель) — модель данных, позволяющая описывать концептуальные схемы предметной области.
ER-модель используется при высокоуровневом (концептуальном) проектировании баз данных. С её помощью можно выделить ключевые сущности и обозначить связи, которые могут устанавливаться между этими сущностями.
Во время проектирования баз данных происходит преобразование ER-модели в конкретную схему базы данных на основе выбранной модели данных (реляционной, объектной, сетевой или др.).
ER-модель представляет собой формальную конструкцию, которая сама по себе не предписывает никаких графических средств её визуализации. В качестве стандартной графической нотации, с помощью которой можно визуализировать ER-модель, была предложена диаграмма сущность-связь (ER-диаграмма).
17. Опишите способы преобразования ER-модели в реляционные структуры.
Правила преобразования ER-модели в реляционную:
• 1. Каждой сущности ставится в соответствие отношение реляционной модели данных.
• 2. Каждый атрибут сущности становится атрибутом соответствующего отношения.
• 3. Первичный ключ сущности становится PRIMARY KEY соответствующего отношения. Атрибуты, входящие в первичный ключ отношения, автоматически получают свойство обязательности (NOT NULL).
• 4. В каждое отношение, соответствующее подчиненной сущности, добавляется набор атрибутов основной сущности, являющейся первичным ключом основной сущности. В отношении, соответствующем подчиненной сущности, этот набор атрибутов становится внешним ключом (FOREING KEY).
• 5. Для моделирования необязательного типа связи на физическом уровне у атрибутов, соответствующих внешнему ключу, устанавливается свойство допустимости неопределенных значений (признак NULL). При обязательном типе связи атрибуты получают свойство отсутствия неопределенных значений (признак NOT NULL).
18. Опишите методику преобразования концептуальных структур данных в реляционные структуры для бинарных связей типа 1:1 при различных классах принадлежности сущностей.
Преподаватель |
Дисциплина |
Ведет |
рис. 8.2 Диаграмма ER-типа.
Связи типа 1:1 и необязательный класс принадлежности
В приведенной на рис. 8.2 диаграмме степень связи между сущностями 1:1, а класс принадлежности обеих сущностей необязательный. Действительно, из рисунка видно следующее:
1. каждый преподаватель ведет не более одной дисциплины, а каждая дисциплина ведется не более чем одним преподавателем (степень связи 1:1);
2. некоторые преподаватели не ведут ни одной дисциплины и имеются дисциплины, которые не ведет ни один из преподавателей (класс принадлежности обеих сущностей необязательный).
Связи типа 1:1 и обязательный класс принадлежности
На рисунке приведены диаграммы, у которых степень связи между сущностями 1:1, а класс принадлежности обеих сущностей обязательный.
Преподаватель |
Дисциплина |
Ведет |
В этом случае каждый преподаватель ведет одну дисциплину и каждая дисциплина ведется одним преподавателем.
19. Опишите методику преобразования концептуальных структур данных в реляционные структуры для бинарных связей типа 1:N при различных классах принадлежности сущностей.
Связи типа 1:М вариант Н-О
Каждый преподаватель может вести несколько дисциплин ИЛИ ни одной, но каждая дисциплина ведется одним преподавателем (рис. 8.6).
Преподаватель |
Дисциплина |
Ведет |
М |
рис. 8.6. Диаграмма ER-типа для связи типа 1:М варианта Н-О
По аналогии легко составить диаграммы и для остальных вариантов.
20. Оператор SELECT - предложения, порядок выполнения.
SELECT (англ., означает «выбрать») — оператор DML языка SQL, возвращающий набор данных (выборку) из базы данных, удовлетворяющих заданному условию.
При формировании запроса SELECT пользователь описывает ожидаемый набор данных: его вид (набор столбцов) и его содержимое (критерий попадания записи в набор, группировка значений, порядок вывода записей и т. п.).
Оператор SELECT имеет следующий формат:
SELECT [ALL | DISTINCT ] {*|[имя_столбца
[AS новое_имя]]} [,...n]
FROM имя_таблицы [[AS] псевдоним] [,...n]
[WHERE <условие_поиска>]
[GROUP BY имя_столбца [,...n]]
[HAVING <критерии выбора групп>]
[ORDER BY имя_столбца [,...n]]
Основные ключевые слова, относящиеся к запросу SELECT:
WHERE — используется для определения, какие строки должны быть выбраны или включены в GROUP BY.
GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк.
HAVING — используется для определения, какие строки после GROUP BY должны быть выбраны.
ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.
21. Виды предикатов (условий) - синтаксис, примеры применения.
-Предикат сравнения представляет собой два выражения, соединяемых оператором сравнения. Имеется шесть традиционных операторов сравнения: =, >, <, >=, <=, <>.
-Предикат BETWEEN проверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом AND.
Синтаксис BETWEEN::=
<Проверяемое выражение> [NOT] BETWEEN
<Начальное выражение> AND <Конечное выражение>
-Предикат IN определяет, будет ли значение проверяемого выражения обнаружено в наборе значений, который либо явно определен, либо получен с помощью табличного подзапроса. Табличный подзапрос это обычный оператор SELECT, который создает одну или несколько строк для одного столбца, совместимого по типу данных со значением проверяемого выражения. Если целевой объект эквивалентен хотя бы одному из указанных в предложении IN значений, истинностное значение предиката IN будет равно TRUE. Если для каждого значения Х в предложении IN целевой объект<>X, истинностное значение будет равно FALSE. Если подзапрос выполняется, и результат не содержит ни одной строки (пустая таблица), предикат принимает значение FALSE. Когда не соблюдается ни одно из упомянутых выше условий, значение предиката равно UNKNOWN.
Синтаксис IN::=
<Проверяемое выражение> [NOT] IN (<подзапрос>)
| (<выражение для вычисления значения>,...)
-Предикат LIKE сравнивает строку, указанную в первом выражении для вычисления значения строки, называемого проверяемым значением, с шаблоном, который определен во втором выражении для вычисления значения строки. В образце разрешается использовать два трафаретных символа:
--Символ подчеркивания (_), который можно использовать вместо любого единичного символа в проверяемом значении.
--Символ процента (%), который заменяет набор любых символов (число символов в наборе может быть от 0 и более) в проверяемом значении.
Если проверяемое значение соответствует образцу с учетом трафаретных символов, то значение предиката равно TRUE.
Синтаксис LIKE::=
<Выражение для вычисления значения строки>
[NOT] LIKE
<Выражение для вычисления значения строки>
[ESCAPE <символ>]
-Предикат IS [NOT] NULL позволяет проверить отсутствие (наличие) значения в полях таблицы. Использование в этих случаях обычных предикатов сравнения может привести к неверным результатам, т.к. сравнение со значением NULL дает результат UNKNOWN (неизвестно).
Синтаксис:
SELECT *
FROM Pc
WHERE price IS NULL;
22. Составные предикаты (операторы AND, OR и NOT). Трёхзначная логика.
Оператор AND объединяет два логических выражения и возвращает значение TRUE, если оба выражения имеют значение TRUE. При использовании в одной инструкции нескольких логических операторов операторы AND имеют преимущество. Порядок вычисления можно изменить при помощи круглых скобок.
Оператор OR - объединение двух условий. При использовании в одной инструкции нескольких логических операторов операторы OR применяются после операторов AND. Порядок вычисления можно изменить с помощью круглых скобок.
Оператор NOT - отрицание логического ввода.
Определение истинности логических выражений базируется на трехзначной логике (three-valuedlogic, 3VL), в которой кроме значений T - ИСТИНА и F - ЛОЖЬ, введено значение U - НЕИЗВЕСТНО.
23. Сортировка результатов запроса (предложение ORDER BY). Ограничение количества результатов запроса SELECT.
Предложение ORDER BY - указывает порядок сортировки для результирующего набора. Предложение ORDER BY недопустимо во вложенных запросах. Также можно выбрать только окно или страницу результатов из результирующего набора с помощью предложения OFFSET-FETCH.
Синтаксис:
[ORDER BY { order_by_expression [ ASC | DESC ] } [,...n][<offset_fetch>] ]
<offset_fetch>::= {OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS } [FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY ]}
Аргументы:
order_by_expression
Указывает столбец, который нужно отсортировать. Столбец для сортировки можно указать по имени или псевдониму, которые могут быть уточнены именем таблицы или выражением. Можно указать несколько столбцов для сортировки. Последовательность столбцов для сортировки в предложении ORDER BY определяет организацию результирующего набора.
Предложение ORDER BY может включать элементы, не видимые в списке выбора.
ASC
Указывает, что сортировку значений в выбранных столбцах следует выполнить в возрастающем порядке, от самого нижнего до самого верхнего.
DESC
Указывает, что значения в указанном столбце должны сортироваться по убыванию, от больших значений к меньшим. Значения NULL рассматриваются как минимально возможные значения.
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
Задает количество строк, которые нужно пропустить, прежде чем начать возвращать строки из выражения запроса. Аргументом предложения OFFSET может быть целое число или выражение, которое больше нуля или равно нулю. ROW и ROWS можно использовать попеременно.
FETCH {FIRST|NEXT} <выражение подсчета строк> {ROW|ROWS} ONLY
Задает количество строк, которые нужно вернуть, после обработки предложения OFFSET. Аргументом предложения FETCH может быть целое число или выражение, которое больше единицы или равно единице. ROW и ROWS можно использовать попеременно. Аналогично FIRST и NEXT можно использовать попеременно.
24. Запросы с группировкой (предложение GROUP BY).
Предложение GROUP BY - указывает группы (классы эквивалентов), в которые нужно поместить выходные строки. Если статистические функции включены в предложение SELECT <список выбора>, предложение GROUP BY выводит сводное значение для каждой группы.
Синтаксис:
[ GROUP BY group_by_expression [,...n ] ]Аргументы:
group_by_expression
Выражение, в котором выполняется группировка. Аргумент group_by_expression также называют столбцом группировки. Для получения дополнительных сведений см. раздел «Замечания».
25. Условия отбора групп (предложение HAVING).
Предложение HAVING ставит условия в предложении GROUP BY подобно тому, как WHERE взаимодействует с SELECT. Условие поиска WHERE применяется перед операцией группирования, а условие поиска HAVING — после него. Синтаксис предложения HAVING напоминает синтаксис WHERE, за исключением того, что в предложении HAVING не могут содержаться агрегатные функции. Предложения HAVING могут ссылаться на любые элементы, доступные в списке выбора.
Следующий пример группирует таблицу SalesOrderDetail по коду продукта и включает только те группы продуктов, заказы на которые в сумме превышают 1 000 000 долларов и среднее количество заказов на них меньше 3.
USE AdventureWorks2008R2;
GO
SELECT ProductID, AVG(OrderQty) AS AverageQuantity, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $1000000.00
AND AVG(OrderQty) < 3;
GO
26. Основные операции реляционной алгебры - реализация в SQL.
Объединение:
SELECT Имя, Возраст, Вес FROM ПерсоныUNIONSELECT Имя, Возраст, Вес FROM ПерсонажиРазность:
SELECT Имя, Возраст, Вес FROM ПерсоныEXCEPTSELECT Имя, Возраст, Вес FROM ПерсонажиПересечение:
SELECT Имя, Возраст, Вес FROM ПерсоныINTERSECTSELECT Имя, Возраст, Вес FROM ПерсонажиПроизведение:
SELECT * FROM Мультфильмы, Каналы
27. Подчиненные запросы в предложении WHERE. Предикаты EXISTS, IN, ALL, ANY.
EXISTS - указывает подчиненный запрос, который будет проверен на наличие строк.Возвращает результат TRUE, если в подчиненном запросе содержатся строки.
В следующем примере показано, как найти все заказы в таблице заказов (в качестве региона доставки выбран «Вашингтон») по всем сотрудникам, перечисленным в таблице сотрудников.
SELECT * FROM Orders WHERE [Ship Region] = 'WA' AND EXISTS (SELECT [Employee ID] FROM Employees AS Emp WHERE Emp.[Employee ID] = Orders.[Employee ID])
Оператор IN - определяет, совпадает ли данное значение с каким-либо значением в подчиненном запросе или списке.
Синтаксис:
test_expression[ NOT ] IN
(subquery
| expression [,...n ]
)
Аргументы:
test_expression
Любоедопустимоевыражениев Microsoft SQL Server Compact 3.5.
subquery
Подзапрос с результирующим набором из одного столбца. Тип данных в столбце должен совпадать с типом данных в test_expression.
expression [,... n ]
Список выражений для проверки на совпадение. Тип данных всех выражений должен совпадать с типом данных в test_expression.
Операторы сравнения с вложенными запросами могут быть уточнены с помощью ключевых слов ALL или ANY.
Вложенные запросы операторов сравнения с модификаторами возвращают список из нуля или более значений и могут включать предложения GROUP BY или HAVING. Эти вложенные запросы могут быть переформулированы с использованием ключевого слова EXISTS.
Рассмотрим, например оператор сравнения >: >ALL будет означать «больше любого значения». Другими словами, это сравнение с максимальным значением. Например, >ALL (1, 2, 3) означает «больше 3». >ANY означает «больше по крайней мере одного значения», т. е. «больше минимума». Поэтому >ANY (1, 2, 3) означает «больше 1».
Чтобы строка результата вложенного запроса с >ALL удовлетворяла условию, заданному внешним запросом, значение в столбце, для которого вводится вложенный запрос, должно быть больше каждого значения из списка, возвращаемого вложенным запросом.
Аналогичным образом, чтобы строка результата вложенного запроса с >ANY, удовлетворяла условию, заданному внешним запросом, значение в столбце, для которого вводится вложенный запрос, должно быть больше хотя бы одного значения из списка, возвращаемого вложенным запросом.
28. Подзапросы в других предложениях. Синтаксис и примеры применения.
Наряду с операторами сравнения такими, как =, <, >, >=, <= и др., Вы можете использовать подзапросы с перечисленными ниже конструкциями:
· SELECT INSERT UPDATEDELETE
Примеры подзапросов
1)Обычно, подзапрос возвращает только одну запись, но случается и так, что записей может быть много, тогда в условии WHERE используются такие операторы, как IN, NOT IN. Запросможетвыглядетьследующийобразом:
SELECT first_name, last_name, subjectFROM student_details
WHERE games NOT IN ('Cricket', 'Football');
Тогда результат будет примерно таким:
first_namelast_name games------------ ----------- ----------
ShekarGowda Badminton
Priya Chandra Chess
2)Давайте рассмотрим используемую ранее таблицу student_details. Если Вы знаете имена студентов, изучающих естествознание (science), то можете получить их id, используя приведенный ниже запрос
SELECT id, first_nameFROM student_details
WHERE first_name IN ('Rahul', 'Stephen');
но, если Вы не знаете их имен, то для получения id Вам необходимо написать запрос, описанным ниже способом:
SELECT id, first_nameFROM student_details
WHERE first_name IN (SELECT first_name
FROM student_details
WHERE subject= 'Science');
В описанном выше запросе, вначале выполняется внутренний запрос, затем внешний
3) Вы можете использовать подзапрос с оператором INSERT для добавления данных из одной таблицы в другую. Давайте попробуем сгруппировать всех студентов, которые изучают математику в таблицу math_group
INSERT INTO maths_group(id, name)SELECT id, first_name || ' ' || last_name
FROM student_details WHERE subject= 'Maths'
4) Подзапрос может использоваться с оператором SELECT, как описано ниже. Давайте используем таблицы product и order_items, объединив их между собой
selectp.product_name,p.supplier_name,
(select order_id from order_items where product_id = 101) as order_id
from product p
where p.product_id = 101product_namesupplier_nameorder_id
-------------- -------------- ----------
Television Onida 5103
29. Системный каталог - понятие, примеры применения.
Системным каталогом называется совокупность специальных таблиц базы данных. Их создает, сопровождает и владеет ими сама СУБД. Эти системные таблицы содержат информацию, которая описывает структуру базы данных. Таблицы системного каталога создаются автоматически при создании базы данных. Обычно они объединяются под специальным "системным идентификатором пользователя" с таким именем, как SYSTEM, SYSIBM, MASTER или DBA.
При обработке инструкций SQL СУБД постоянно обращается к данным системного каталога.
30. Оператор INSERT.
Оператор INSERT вставляет новые записи в таблицу. При этом значения столбцов могут представлять собой литеральные константы, либо являться результатом выполнения подзапроса. В первом случае для вставки каждой строки используется отдельный оператор INSERT; во втором случае будет вставлено столько строк, сколько возвращается подзапросом.
Синтаксис оператора следующий:
INSERT INTO <имя таблицы>[(<имя столбца>,...)]
{VALUES (<значение столбца>,…)}
| <выражение запроса>
| {DEFAULT VALUES}
31. Оператор DELETE.
Оператор DELETE удаляет строки из временных или постоянных базовых таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:
DELETE FROM <имя таблицы >
[WHERE <предикат>];
Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым).
32. Оператор UPDATE.
Оператор UPDATE изменяет имеющиеся данные в таблице. Команда имеет следующий синтаксис:
UPDATE <имя таблицы>
SET {<имя столбца> = {<выражение для вычисления значения столбца>
| NULL
| DEFAULT},...}
[ {WHERE <предикат>}]
С помощью одного оператора могут быть заданы значения для любого количества столбцов. Однако в одном и том же операторе UPDATE можно вносить изменения в каждый столбец указанной таблицы только один раз. При отсутствии предложения WHERE будут обновлены все строки таблицы.
Если столбец допускает NULL-значение, то его можно указать в явном виде. Кроме того, можно заменить имеющееся значение на значение по умолчанию (DEFAULT) для данного столбца.
Ссылка на «выражение для вычисления значения столбца» может относиться к текущим значениям в изменяемой таблице
33. Операторы DDL.
DDL - DataDefinitionLanguage. С помощью этого языка определяют данные указывая тип данных, структуры представления. Вообщем то это часть языка SQL. Но только одна. Это те операторы которые связанны с командами создания, например CREATE TABLE. Результатом выполнения этих операций заноситься в системный каталог, в котором хранятся сведения о таблицах.
· CREATE SCHEMA - создать схему базы данных
· DROP SHEMA - удалить схему базы данных
· CREATE TABLE - создать таблицу
· ALTER TABLE - изменить таблицу
· DROP TABLE - удалить таблицу
· CREATE DOMAIN - создать домен
· ALTER DOMAIN - изменить домен
· DROP DOMAIN - удалить домен
· CREATE COLLATION - создать последовательность
· DROP COLLATION - удалить последовательность
· CREATE VIEW - создать представление
· DROP VIEW - удалить представление
Примеры:
CREATETABLE Student (
Code INTEGERNOTNULL,
Name CHAR (30) NOTNULL,
Address CHAR (50),
Mark DECIMAL
);
CREATEVIEW London_view ASSELECT * FROM Salespeople WHERE city = ‘London’;
34. NULL
35. NULL
36. NULL
37. NULL
38. NULL
39. NULL
40. NULL
41. NULL
42. NULL
43. NULL
44. NULL
45. NULL
46. Кластеризованные и некластеризованные индексы. В-деревья.
Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путем последовательного просмотра таблицы строка за строкой может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска. Ускорение работы с использованием индексов достигается в первую очередь за счёт того, что индекс имеет структуру, оптимизированную под поиск — например, сбалансированного дерева.
Существует два типа индексов: кластерные и некластерные. При наличии кластерного индекса строки таблицы упорядочены по значению ключа этого индекса. Если в таблице нет кластерного индекса, таблица называется кучей. Некластерный индекс, созданный для такой таблицы, содержит только указатели на записи таблицы. Кластерный индекс может быть только одним для каждой таблицы, но каждая таблица может иметь несколько различных некластерных индексов, каждый из которых определяет свой собственный порядок следования записей.
Индексы могут быть реализованы различными структурами. Наиболее частоупотребимы B*-деревья, B+-деревья, B-деревья и хеши.
B-дерево (по-русски произносится как Б-дерево) — структура данных, дерево поиска. С точки зрения внешнего логического представления, сбалансированное, сильно ветвистое дерево во внешней памяти.
Сбалансированность означает, что длина любых двух путей от корня до листов различается не более, чем на единицу.
Ветвистость дерева — это свойство каждого узла дерева ссылаться на большое число узлов-потомков.
С точки зрения физической организации B-дерево представляется как мультисписочная структура страниц внешней памяти, то есть каждому узлу дерева соответствует блок внешней памяти (страница). Внутренние и листовые страницы обычно имеют разную структуру.
47. Поиск по дереву.
Механизм классических B-деревьев был предложен в 1970 г. Бэйером и Маккрейтом. B-дерево порядка n представляет собой совокупность иерархически связанных страниц внешней памяти (каждая вершина дерева - страница), обладающая следующими свойствами:
- Каждая страница содержит не более 2*n элементов (записей с ключом).
- Каждая страница, кроме корневой, содержит не менее n элементов.
- Если внутренняя (не листовая) вершина B-дерева содержит m ключей, то у нее имеется m+1 страниц-потомков.
- Все листовые страницы находятся на одном уровне.
Пример B-дерева степени 2 глубины 3 приведен на рисунке 5.1.
Рис. 5.1. Классическое B-дерево порядка 2
Поиск в B-дереве производится очевидным образом. Предположим, что происходит поиск ключа K. В основную память считывается корневая страница B-дерева. Предположим, что она содержит ключи k1, k2,..., km и ссылки на страницы p0, p1,..., pm. В ней последовательно (или с помощью какого-либо другого метода поиска в основной памяти) ищется ключ K. Если он обнаруживается, поиск завершен. Иначе возможны три ситуации:
- Если в считанной странице обнаруживается пара ключей ki и k(i+1) такая, что ki< K < k(i+1), то поиск продолжается на странице pi.
- Если обнаруживается, что K >km, то поиск продолжается на странице pm.
- Если обнаруживается, что K < k1, то поиск продолжается на странице p0.
Для внутренних страниц поиск продолжается аналогичным образом, пока либо не будет найден ключ K, либо мы не дойдем до листовой страницы. Если ключ не находится и в листовой странице, значит ключ K в B-дереве отсутствует.
48. Уровни защиты данных MSSQLServer.