Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД.docx
Скачиваний:
61
Добавлен:
26.03.2016
Размер:
5.1 Mб
Скачать

2 Вопрос.

Реализация запросов со сложными условиями в табличных языках запросов.

Предложение WHERE. В нем задается условие отбора записей.

Предикат может включать одно выражение или несколько. Части сложного

условия соединяются логическими операторами AND (И) или

OR (ИЛИ).

В выражениях могут использоваться следующие операторы сравнения:

= (равно), о (не равно), < (меньше), <= (меньше или равно), >

(больше), >= (больше или равно), которые могут предваряться оператором

NOT.

Предикат может принимать одно из трех значений: TRUE, FALSE,

UNKNOWN. В результатную таблицу переносятся те строки, для которых

значение предиката равно TRUE.

Кроме стандартных операторов сравнения в SQL можно использовать

специальные операторы предикатов:

• <интервальный предикат >;

• <предикат IN>;

• < предикат проверки на неопределенное значение >;

• <предикат подобия>.

При использовании интервального предиката диапазон значений

можно задавать в виде

WHERE [NОТ]<выражение> BETWEEN <нижнее выражение>

AND < верхнее выражением

391

3 9 2

Например, если требуется выдать сведения о поставке продукции

за последнюю декаду ноября 2002 г., то запрос можно задать следующим

образом:

Это же условие отбора можно задать и без использования интервального

предиката:

При использовании предиката IN предложение WHERE будет

иметь следующий вид:

В приведенном ниже примере требуется вывести данные о поставках

поставщиков P1, Р2, РЗ.

Без использования IN запрос имел бы следующий вид:

Пример с использованием подзапроса будет рассмотрен позже,

при демонстрации возможностей обработки нескольких таблиц.

Предикат подобия применяется для поиска подстроки в указанной

строке. Предложение WHERE при использовании предиката этого

типа будет иметь следующий вид:

В качестве <выражения_для_вычисления_значения_строки_1>

обычно используется <имя колонки>.

<Выражение_для_вычисления_значения_строки_2> называется

образцом. В образце разрешается применять заполнители (трафаретные

символы):

• символ подчеркивания (_) - используется вместо любого единичного

символа в проверяемом значении;

• символ процента (%) - заменяет набор любых символов в проверяемом

значении.

Предположим, что коды металлов начинаются с буквы «м». Тогда

запрос, позволяющий вывести сведения о поставке металлов, будет

иметь вид

Предикат проверки на неопределенное значение имеет вид

Например, если в таблице «Сотрудник» (sotr) есть поле «Ученая_сте-

пень» (ych_st), то запрос, выводящий список сотрудников, не имеющих

ученых степеней, будет выглядеть следующим образом:

При использовании подзапросов в условии WHERE может быть

использован квантор существования EXISTS. Формат условия

WHERE в этом случае имеет вид

EXISTS проверяет, вернул ли подзапрос какие-либо ряды. Фактически

любой подзапрос, который может быть выражен с использованием

IN, может альтернативным образом быть сформулирован также

с использованием EXISTS. Обратное утверждение несправедливо.

Пример запроса с использованием EXISTS:

Задача.

Выдать справку о нагрузке по кафедрам за 2009/2010 учебный год с детализацией по видам нагрузке, содержащую поля NAIMKAF, VIDNAGR и суммарный объем нагрузки (SQL).

select Table3.NaimKaf, Table3.VidNagr, SUM(Chas)as AllNAgr from  (select Kaf.NaimKaf, Table2.VidNagr, Table2.Chas from Kaf inner join  (select Table1.* from  (select Nagr.*, Prep.KodKaf from Nagr inner join Prep on Nagr.KodPrep=Prep.KodPrep) as Table1 where ((CONVERT(int, YEAR(Table1.Data))>=2009) AND (CONVERT(int, YEAR(Table1.Data))<=2010)) as Table2  on Table2.KodKaf=Kaf.KodKaf) as Table3 group by NaimKaf, VidNagr

Билет №12

  1. Табличные языки запросов. Общая характеристика.

В современных СУБД широко используются табличные языки запросов. Наиболее распространенным среди них является язык QBE (Query-By-Example - запрос по примеру). Язык QBE предназначен для работы в интерактивном режиме и ориентирован на конечного пользователя. Язык QBE реализован во многих современных СУБД, например в dBase IV и более старших версиях этой системы, Paradox, Access и др. Конкретные реализации этого языка несколько отличаются друг от друга, но все они построены по единому принципу.

Суть подхода, воплощенного в языке QBE, заключается в следующем. В окне формирования запроса выделяются две зоны. В первой из них высвечивается «скелет» (образ, форма, структура) одной или нескольких таблиц, данные из которых будут участвовать в запросе. В качестве исходных для запроса могут указываться не только базовые таблицы, но и другие запросы.

Во второй зоне («скелете» запроса табличной формы) пользователь задает условия запроса. В этой зоне пользователь определяет, какие поля участвуют в формировании запроса, а также условия отбора и некоторые другие характеристики запроса. Например, если пользователю необходимо получить все записи с заданным значением конкретного атрибута, то в соответствующем столбце «скелета» указывается это значение.

На рис. 6.1 представлен запрос к таблице, содержащей сведения о сотрудниках (Kadr) и включающей следующие атрибуты:

·        FAM - фамилия;

·        IMIA - имя;

·        TABN - табельный номер;

·        VOZR - возраст;

·        POL - пол;

·        ADR - адрес.

Требуется выдать информацию обо всех сотрудниках в возрасте 40 лет. В соответствующем столбце таблицы (VOZR) указывается цифра 40. В столбце можно записывать не только значение атрибута, но и знак операции сравнения; по умолчанию принимается знак равенства («=»).

2) Нормальная форма — свойство отношения в реляционной модели данных, характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение.

Процесс преобразования отношений базы данных (БД) к виду, отвечающему нормальным формам, называется нормализацией. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность, и не имеет целью уменьшение или увеличение производительности работы или же уменьшение или увеличение физического объёма базы данных.[1] Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в базе данных информации. Как отмечает К. Дейт,[2] общее назначение процесса нормализации заключается в следующем:

  • исключение некоторых типов избыточности;

  • устранение некоторых аномалий обновления;

  • разработка проекта базы данных, который является достаточно «качественным» представлением реального мира, интуитивно понятен и может служить хорошей основой для последующего расширения;

  • упрощение процедуры применения необходимых ограничений целостности.

Устранение избыточности производится, как правило, за счёт декомпозиции отношений таким образом, чтобы в каждом отношении хранились только первичные факты (то есть факты, не выводимые из других хранимых фактов).

Первая нормальная форма (1NF)[править | править исходный текст]

Основная статья: Первая нормальная форма

Переменная отношения находится в первой нормальной форме (1НФ) тогда и только тогда, когда в любом допустимом значении отношения каждый его кортежсодержит только одно значение для каждого из атрибутов.

В реляционной модели отношение всегда находится в первой нормальной форме по определению понятия отношение. Что же касается различных таблиц, то они могут не быть правильными представлениями отношений и, соответственно, могут не находиться в 1НФ.

Вторая нормальная форма (2NF)[править | править исходный текст]

Основная статья: Вторая нормальная форма

Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме, и каждый неключевой атрибут неприводимо (функционально полно) зависит от ее потенциального ключа.

Третья нормальная форма (3NF)[править | править исходный текст]

Основная статья: Третья нормальная форма

Переменная отношения находится в третьей нормальной форме тогда и только тогда, когда она находится во второй нормальной форме, и отсутствуют транзитивные функциональные зависимости неключевых атрибутов от ключевых.

Нормальная форма Бойса — Кодда (BCNF)[править | править исходный текст]

Основная статья: Нормальная форма Бойса — Кодда

Переменная отношения находится в нормальной форме Бойса — Кодда (иначе — в усиленной третьей нормальной форме) тогда и только тогда, когда каждая ее нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ.

  1. Задача. Построить структуру реляционной базы данных

Билет №13

  1. Реляционная алгебра

Реляционная алгебра — замкнутая система операций над отношениями в реляционной модели данных. Операции реляционной алгебры также называют реляционными операциями.

Реляционная алгебра — формальная система манипулирования отношениями в реляционной модели данных.

Реляционная алгебра представляет собой набор таких операций над отношениями, что результат каждой из операций также является отношением. Это свойство алгебры называется замкнутостью.

Операции над одним отношением называются унарными, над двумя отношениями — бинарными, над тремя — тернарными (таковые практически неизвестны).

Выборка

Операция выборки — унарный оператор, записываемый как σaθb(R) или σaθv(R), где:

  • a, b — имена атрибутов

  • θ — оператор сравнения из множества {<; ≤; =; ≥; >}

  • v — константа

  • R — отношение (в оригинале — relation, однако как видно из примера, подразумевается не столько взаимосвязь таблиц, сколько взаимосвязь/соотношение различных фактов в рядах этих таблиц).

Выборка σaθb(R) (или σaθv(R)) выбирает все наборы значений R, для которых функция a θ b (или a θ v) будет истинна.

Пример

Пусть даны следующие соотношения:

Персоны

Имя

Возраст

Вес

Harry

34

80

Sally

28

64

George

29

70

Helena

54

54

Peter

34

80

Тогда результаты выборок будут следующими:

σВозраст ≥ 34(Персоны)

Имя

Возраст

Вес

Harry

34

80

Helena

54

54

Peter

34

80

Эквивалентный SQL-запрос:

SELECT * FROM Персоны WHERE Возраст >= 34

σВозраст = Вес(Персоны)

Имя

Возраст

Вес

Helena

54

54

Эквивалентный SQL-запрос:

SELECT * FROM Персоны WHERE Возраст = Вес

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]