Поиск…


обзор

Реляционная алгебра не является полномасштабным языком SQL , а скорее способ получить теоретическое понимание реляционной обработки. Поэтому он не должен ссылаться на физические объекты, такие как таблицы, записи и поля; он должен ссылаться на абстрактные конструкции, такие как отношения, кортежи и атрибуты. Говоря это, я не буду использовать академические термины в этом документе и буду придерживаться более широко известных терминов непрофессионала - таблиц, записей и полей.

Пара правил реляционной алгебры, прежде чем мы начнем:

  • Операторы, используемые в реляционной алгебре, работают на целых таблицах, а не на отдельных записях.
  • Результатом реляционного выражения всегда будет таблица (это называется свойством закрытия )

Во всем этом документе я буду ссылаться на следующие две таблицы:

Примеры таблиц

ВЫБРАТЬ

Оператор select возвращает подмножество основной таблицы.
выберите <table>, где <условие>

Например, рассмотрите выражение:

выберите Люди, где DepartmentID = 2

Это можно записать так:
введите описание изображения здесь

Это приведет к тому, что таблица, записи которой состоят из всех записей в таблице People, где значение DepartmentID равно 2:
введите описание изображения здесь

Условия также могут быть объединены для дальнейшего ограничения выражения:

выберите « Люди, где StartYear> 2005 и DepartmentID = 2

приведет к следующей таблице:
введите описание изображения здесь

ПРОЕКТ

Оператор проекта возвращает значения поля из таблицы.
project <table> over <список полей>

Например, рассмотрите следующее выражение:
проект Люди старше StartYear

Это можно записать так:
введите описание изображения здесь

Это приведет к таблице, состоящей из отдельных значений, хранящихся в поле StartYear таблицы People .
введите описание изображения здесь

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

Если список полей содержит более одного поля, тогда результирующая таблица является отдельной версией этих полей.
проект People over StartYear, DepartmentID вернется:
введите описание изображения здесь
Одна запись удаляется из-за дублирования 2006 StartYear и 1 DepartmentID .

ПРЕДОСТАВЛЕНИЕ

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

<выражение реляционной алгебры>, дающее <имя псевдонима>

Например, рассмотрим следующие выражения:
выберите People where DepartmentID = 2, дающий A
проект A над PersonName, дающий B

Это приведет к таблице B ниже, а таблица A будет результатом первого выражения.
введите описание изображения здесь

Первое выражение оценивается, и результирующей таблице присваивается псевдоним A. Эта таблица затем используется во втором выражении, чтобы дать финальной таблице псевдоним B.

Другим способом написания этого выражения является замена имени псевдонима таблицы во втором выражении на весь текст первого выражения, заключенного в скобки:
проекта ( выберите « Люди, где DepartmentID = 2»), с именем PersonName, которое дает B

Это называется вложенным выражением .

ПРИРОДНОЕ СОЕДИНЕНИЕ

Естественное объединение объединяет две таблицы, используя общее поле, разделяемое между таблицами.

join <table 1> и <table 2>, где <field 1> = <field 2>
предполагая, что <поле 1> находится в <table 1>, а <field 2> находится в <table 2>.

Например, следующее выражение объединения присоединяется к людям и отделам на основе столбцов DepartmentID и ID в соответствующих таблицах:
присоединиться к людям и департаментам, где DepartmentID = ID

введите описание изображения здесь

Обратите внимание, что отображается только идентификатор отдела из таблицы « Люди», а не идентификатор из таблицы « Департамент» . Должно быть показано только одно из сравниваемых полей, которое обычно является именем поля из первой таблицы в операции объединения.

Хотя это не показано в этом примере, возможно, что объединение таблиц может привести к тому, что два поля будут иметь один заголовок. Например, если я использовал заголовок Name для идентификации полей PersonName и Dept (т.е. для идентификации имени лица и имени отдела). Когда возникает такая ситуация, мы используем имя таблицы для определения имен полей с использованием точечной нотации: People.Name и Departments.Name

объединение в сочетании с select и проектом может использоваться вместе для получения информации:

присоединиться к людям и отделам, где DepartmentID = ID, дающий A
выберите A, где StartYear = 2005 и Dept = 'Production', давая B
проект B через PersonName, дающий C

или как комбинированное выражение:

проект ( выберите ( присоединитесь к людям и отделениям, где DepartmentID = ID), где StartYear = 2005 и Dept = 'Production') над PersonName, дающим C

Это приведет к этой таблице:
введите описание изображения здесь

ALIAS

ДЕЛИТЬ

UNION

INTERSECTION

РАЗНИЦА

UPDATE (: =)

TIMES



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow