Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Реляционные операторы: объединение, пересечение.

Поиск

Пересечение:На входе операции два отношения, определенные по одной схеме. На выходе - отношение, содержащие кортежи, которые присутствуют в обоих исходных отношениях.

Синтаксис операции пересечения:


Объединением двух совместимых по типу отношений и называется отношение с тем же заголовком, что и у отношений и , и телом, состоящим из кортежей, принадлежащих или , или , или обоим отношениям.

Синтаксис операции объединения:

Объединение, как и любое отношение, не может содержать одинаковых кортежей. Поэтому, если некоторый кортеж входит и в отношение , и отношение , то в объединение он входит один раз.

 


 

 

Реляционные операторы: вычитание, декартово произведение множеств.

 

РАЗНОСТЬ.
Операция во многом похожая на ПЕРЕСЕЧЕНИЕ, за исключением того, что в результирующем отношении содержатся кортежи, присутствующие в первом и отсутствующие во втором исходных отношениях.

 
 

Синтаксис: A MINUS B

 

 

Декартовым произведением двух отношений и называется отношение, заголовок которого является сцеплением заголовков отношений и :

,

а тело состоит из кортежей, являющихся сцеплением кортежей отношений и :

,

таких, что , .

Синтаксис операции декартового произведения:

Пусть даны два отношения и с информацией о поставщиках и деталях:

Номер поставщика Наименование поставщика
1 Иванов
2 Петров
3 Сидоров

 

Номер детали Наименование детали
1 Болт
2 Гайка
3 Винт
 
Номер поставщика Наименование поставщика Номер детали Наименование детали
  Иванов   Болт
  Иванов   Гайка
  Иванов   Винт
  Петров   Болт
  Петров   Гайка
  Петров   Винт
  Сидоров   Болт
  Сидоров   Гайка
  Сидоров   Винт
           

 

 

Концептуальная схема выполнения оператора SELECT.

 

 

(5) SELECT – что берётся из таблиц
(1) FROM – откуда берутся данные

(2) WHERE – условие отбора строк

(3) GROUPBY – условие по которому группируются строки

(4) HAVING – условие отбора групп

(6) ORDERBY – условие по которому производится группировка

 

Шаг 1 (FROM). Вычисляется прямое декартовое произведение всех таблиц, указанных в обязательном разделе FROM. В результате шага 1 получаем таблицу A.
Шаг 2 (WHERE). Если в операторе SELECT присутствует раздел WHERE, то сканируется таблица A, полученная при выполнении шага 1. При этом для каждой строки из таблицы A вычисляется условное выражение, приведенное в разделе WHERE. Только те строки, для которых условное выражение возвращает значение TRUE, включаются в результат. Если раздел WHERE опущен, то сразу переходим к шагу 3. Если в условном выражении участвуют вложенные подзапросы, то они вычисляются в соответствии с данной концептуальной схемой. В результате шага 2 получаем таблицу B.
Шаг 3 (GROUP BY). Если в операторе SELECT присутствует раздел GROUP BY, то строки таблицы B, полученной на втором шаге, группируются в соответствии со списком группировки, приведенным в разделе GROUP BY. Если раздел GROUP BY опущен, то сразу переходим к шагу 4. В результате шага 3 получаем таблицу С.
Шаг 4 (HAVING). Если в операторе SELECT присутствует раздел HAVING, то группы, не удовлетворяющие условному выражению, приведенному в разделе HAVING, исключаются. Если раздел HAVING опущен, то сразу переходим к шагу 5. В результате шага 4 получаем таблицу D.
Шаг 5 (SELECT). Каждая группа, полученная на шаге 4, генерирует одну строку результата следующим образом. Вычисляются все скалярные выражения, указанные в разделе SELECT. По правилам использования раздела GROUP BY, такие скалярные выражения должны быть одинаковыми для всех строк внутри каждой группы. Для каждой группы вычисляются значения агрегатных функций, приведенных в разделе SELECT. Если раздел GROUP BY отсутствовал, но в разделе SELECT есть агрегатные функции, то считается, что имеется всего одна группа. Если нет ни раздела GROUP BY, ни агрегатных функций, то считается, что имеется столько групп, сколько строк отобрано к данному моменту. В результате шага 5 получаем таблицу E, содержащую столько колонок, сколько элементов приведено в разделе SELECT и столько строк, сколько отобрано групп.

 

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


Выборка

SELECT *
FROM A
WHERE c;

Проекция

SELECT DISTINCT X, Y, …, Z
FROM A;


Соединение

SELECT *
FROM A
UNION
SELECT *
FROM B;

Деление

SELECT DISTINCT A.X
FROM A
WHERE NOT EXIST
(SELECT *
FROM B
WHERE NOT EXIST
(SELECT *
FROM A A1
WHERE
A1.X = A.X AND
A1.Y = B.Y));


Оператор выборки::=

Табличное выражение

[ORDER BY

{{Имя столбца-результата [ASC | DESC]} | {Положительное целое [ASC | DESC]}}.,..];

Табличное выражение::=

Select-выражение

[

{UNION | INTERSECT | EXCEPT} [ALL]

{Select-выражение | TABLE Имя таблицы | Конструктор значений таблицы}

]

Select-выражение::=

SELECT [ALL | DISTINCT]

{{{Скалярное выражение | Функция агрегирования | Select-выражение} [AS Имя столбца]}.,..}

| {{Имя таблицы|Имя корреляции}.*}

| *

FROM {

{Имя таблицы [AS] [Имя корреляции] [(Имя столбца.,..)]}

| {Select-выражение [AS] Имя корреляции [(Имя столбца.,..)]}

| Соединенная таблица }.,..

[WHERE Условное выражение]

[GROUP BY {[{Имя таблицы|Имя корреляции}.]Имя столбца}.,..]

[HAVING Условное выражение]

 



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 553; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.47.130 (0.005 с.)