Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Реализация операций реляционной алгебры средствами языка SQL

РефератПомощь в написанииУзнать стоимостьмоей работы

А! об В A UNION В При использовании SQL объединить результаты двух запросов позволяет инструкция UNION. При этом требуется, чтобы запросы возвращали таблицы с одинаковыми заголовками, иначе произойдет ошибка. Таким образом, если у таблиц, А и В одинаковые заголовки, операция объединения может быть записана так: SELECT * FROM А, В Ниже приведена запись ?-выборки из отношения, А по условию «X… Читать ещё >

Реализация операций реляционной алгебры средствами языка SQL (реферат, курсовая, диплом, контрольная)

В данном параграфе будет рассмотрено, как операции реляционной алгебры могут быть записаны на языке SQL. Забегая несколько вперед, можно отметить, что возможность реализации всех операций реляционной алгебры средствами SQL доказывает реляционную полноту этого языка [17].

Объединение двух совместимых по типу реляционных отношений, А и В может быть записано одним из приведенных ниже способов (см. параграф 4.3):

А !об В A UNION В При использовании SQL объединить результаты двух запросов позволяет инструкция UNION. При этом требуется, чтобы запросы возвращали таблицы с одинаковыми заголовками, иначе произойдет ошибка. Таким образом, если у таблиц, А и В одинаковые заголовки, операция объединения может быть записана так:

SELECT * FROM, А UNION.

SELECT * FROM В Если в таблицах, А и В будут совпадающие строки, дубликаты в результат операции UNION не включаются.

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

А? В.

A INTERSECT В При написании запроса на SQL в аналогичной ситуации используется инструкция INTERSECT. Как и в предыдущем случае, требуется совпадение заголовков, формируемых выражениями SELECT:

SELECT * FROM, А INTERSECT SELECT * FROM В Если пересечение надо получить для подмножеств записей, выбираемых из одной таблицы с простым ключом, можно использовать условие IN. Пусть, например, в таблице, А определен ключ ID. Приведенный ниже фрагмент запроса позволяет получить множество строк, удовлетворяющих и условию подзапроса, и дополнительным условиям внешнего запроса (фактически — это пересечение):

SELECT * FROM А.

WHERE ID IN (SELECT ID FROM A as В WHERE …).

Вычитание в реляционной алгебре может быть записано как, А В.

A MINUS В Отношения, А и В должны быть совместимы по типу. В SQL аналогичную функцию выполняет инструкция EXCEPT, которая также требует совпадения заголовков таблиц-операндов:

SELECT * FROM А.

EXCEPT.

SELECT * FROM В В том случае, если надо получить разность между двумя подмножествами строк из одной таблицы с простым ключом, для записи вычитания может использоваться условие NOT IN в разделе WHERE. Например, в параграфе 4.3 рассматривалась задача получения из отношения Book списка авторов, чьи книги ни разу не издавались в издательстве «Азбука» :

R1 = (Book[Author]).

R2 = (Book[Publisher = «Азбука» ])[Author].

Res = R1 R2.

Аналогичное выражение на SQL:

SELECT DISTINCT Author.

FROM Book.

WHERE Author NOT IN.

(SELECT DISTINCT Author.

FROM Book as В.

WHERE Publisher='Азбука').

Декартово произведение уже обсуждалось в параграфе 7.6, но для полноты изложения кратко остановимся на нем еще раз. В реляционной алгебре эта операция записывается как, А? В.

A TIMES В В SQL аналогичный результат в синтаксисе ANSI SQL-92 будет выглядеть следующим образом:

SELECT * FROM A CROSS JOIN В Альтернативный вариант записи:

SELECT * FROM А, В Ниже приведена запись ?-выборки из отношения, А по условию «X? ?» в двух вариантах синтаксиса реляционной алгебры и на языке SQL. Необходимо отметить, что? обозначает здесь любой допустимый оператор сравнения. Условие выборки может быть и составным, включающим логические операторы NOT, AND, OR:

А[X? ?].

A WHERE X? ?

На языке SQL:

SELECT * FROM A WHERE X? Y.

Рассмотрим запись операции проекции. Проекция отношения, А по атрибутам V, W, Z в реляционной алгебре обозначается как, А [V, W, Z].

При записи аналогичного выражения на языке SQL необходимо учитывать, что результат запроса на SQL может содержать повторяющиеся строки. Для получения точного соответствия запроса и реляционной операции нужно использовать инструкцию DISTINCT:

SELECT DISTINCT V, W, Z FROM A.

Реляционная операция ?-соедипепие может записываться как, А [X? Y] В.

(A TIMES В) WHERE X? Y.

В записи на языке SQL можно воспользоваться последовательным применением операций декартова произведения и выборки:

SELECT * FROM А, В WHERE X? Y.

или.

SELECT * FROM A CROSS JOIN В WHERE X? ?

В большинстве случаев нужный результат даст и внутреннее соединение, например, если X — столбец таблицы A, Y — столбец таблицы В, а? — допустимая для них операция сравнения:

SELECT * FROM A INNER JOIN В ?? А. Х? ?.?

Пусть отношения, А и В имеют заголовки {?,?} и {?,?}: атрибут? присутствует как в первом, так и во втором отношении. Тогда естественное соединение этих отношений может быть записано как.

A JOIN В На языке SQL, если атрибут Y не является составным, запись будет следующая:

SELECT А. Х, A. Y, B.Z.

FROM A INNER JOIN В ON A. Y=B. ?

? может быть и составным атрибутом, это допускается реляционной алгеброй. Например, он представляет собой сочетание атрибутов ?1 и ?2, которые присутствуют как в A, так и в В. Код на языке SQL в этом случае будет следующим:

SELECT А. Х, A. Y1, A. Y2, В. Z.

FROM A INNER JOIN В ON (A.Y1=B.Y1 AND A. Y2=B.Y2).

Пусть отношения, А и В имеют заголовки {X, Y} и {Y} соответственно. Атрибуты X и Y могут быть составными, одинаково названные атрибуты двух отношений определены на одних и тех же доменах. Тогда для них определена реляционная операция деления, которая обозначается как, А / В.

A DIVIDEBY В На языке SQL деление записывается через два вложенных запроса с коррелированной обработкой:

SELECT DISTINCT А. Х FROM А.

WHERE NOT EXISTS.

  • (SELECT * FROM В WHERE NOT EXISTS
  • (SELECT * FROM A as A1

WHERE Al. X = A. X AND Al. Y = В. Y)).

Для лучшего понимания структуры запроса в [17] предлагается следующий пример. Пусть отношение, А содержит данные о поставках деталей, а отношение В — список всех деталей, которые могут поставляться. Атрибут X является номером поставщика, атрибут Y — номером детали. Разделить отношение, А на отношение В означает «отобрать номера поставщиков, которые поставляют все детали» .

Преобразуем текст выражения. «Отобрать номера поставщиков, которые поставляют все детали» эквивалентно «отобрать те номера поставщиков из таблицы А, для которых не существует непоставляемых деталей в таблице В». Это эквивалентно «отобрать те номера поставщиков из таблицы А, для которых не существует тех номеров деталей из таблицы В, которые не поставляются этим поставщиком». В свою очередь, это можно записать как «отобрать те номера поставщиков из таблицы А, для которых не существует тех номеров деталей из таблицы В, для которых не существует записей о поставках в таблице, А для этого поставщика и этой детали». Последнее выражение дословно переводится на язык SQL.

Показать весь текст
Заполнить форму текущей работой