Em ciências da computação, álgebra relacional é uma derivação descendente da lógica de primeira ordem e da álgebra de conjuntos em relação das operações sobre a relação finítimo, que auxilia o trabalho ao identificar os componentes de uma tupla por nome (chamado o atributo) ao invés de uma coluna de chaves numéricas, o qual é chamado a relação na terminologia de banco de dados.

A principal aplicação da álgebra relacional é sustentar a fundamentação teórica de banco de dados relacional, particularmente linguagem de consulta para tais bancos de dados, entre os maiores o SQL.

Introdução A álgebra relacional recebia pouca atenção fora do campo da matemática pura até à publicação em 1970 do modelo relacional de dados de E.F. Codd. Codd propôs tal álgebra como a base das linguagens de consulta de banco de dados. (Ver secção Implementações.)

Na álgebra relacional, são admitidas ambas perspectivas de dar um nome ou não, dependendo se as tuplas são dotadas de nome de componente ou não. Na perspectiva sem nome, a tupla é simplesmente um membro de um produto cartesiano. Na perspectiva da tupla ter um nome de componente, tuplas são funções do conjunto finito de atributos U (da relação) a um dominío de valores (assumidos distintos dos de U).Serge Abiteboul, Richard Hull, Victor Vianu, Foundations of databases, Addison-Wesley, 1995, ISBN 0-201-53771-0, p. 29–33 As álgebras relacionais obtidas das duas perspectivas são equivalentes.Serge Abiteboul, Richard Hull, Victor Vianu, Foundations of databases, Addison-Wesley, 1995, ISBN 0-201-53771-0, p. 59–63 e p. 71 Um livro típico de graduação apresenta só a perspectiva de nomear e este artigo segue isso.

A álgebra relacional é equivalente em poder expressivo a cálculo relacional (e por conseguinte lógica de predicado ou primeira ordem); esse resultado é conhecido como o teorema de Codd. Na prática, deve ser prestada atenção em desambiguar as duas linguagens porque a negação quando aplicada a uma fórmula em cálculo, faz a construção da fórmula que pode ser verdadeira ou um conjunto infinito de tuplas, enquanto o operador diferença na álgebra relacional devolve sempre um resultado finito. Para ultrapassar estas dificuldades, Codd restringiu os operandos da álgebra relacional somente para relação finita e propôs suporte restrito para a negação (NOT) e a disjunção (OR). Restrições análogas são encontradas em muitas outras linguagens de programação lógicas. Codd definiu o termo completeza relacional para se referir a uma linguagem que está completa em respeito a cálculo de lógica da primeira ordem à parte com as restrições que ele propunha. Na prática as restrições têm um efeito adverso na aplicabilidade da sua álgebra relacional para usos de banco de dados.

Definimos assim a álgebra relacional como uma linguagem de consulta formal i.e. uma coleção de operações de alto nível sobre relações ou conjuntos. As operações em questão são: restrição (seleção), projeção, produto, união, interseção, diferença, junção e divisão. O leitor deve entender que as oito operações não são um conjunto mínimo. De facto, dos oito, só 5 são primitivos, nomeadamente restrição, projeção, produto, união, e diferença. Os outros três podem ser definidos destes cinco. Todas essas operações produzem uma nova relação como seu resultado.

Operadores primitivos Como em qualquer álgebra, alguns operadores são primitivos e os outros são derivados em termos dos primitivos. É útil que a escolha dos operadores primitivos se compare a casos comuns onde se faça uso dos operadores lógicos primitivos.

Os cinco operadores primitivos de Codd na álgebra são o de seleção, a projeção, produto cartesiano (também chamado de produto cruz ou junção cruz), a união, e a diferença . Outro operador, renomear não foi aponte por Codd, (Na verdade, Codd omite o renomear, para proceder) mas a sua necessidade foi mostrada pelos inventores da ISBL. Estes seis operadores são fundamentais no sentido de que nenhum deles pode ser omitido sem perder poder expressivo. Muitos outros operadores foram definidos em termos destes seis. Entre os mais importantes são interseção, divisão e a junção natural. Na verdade a ISBL fez a substituição do produto cartesiano pela junção natural, dado que o produto cartesiano é um caso degenerado. Embora seja sabido que na lógica do E, OU e NÃO a escolha é um pouco arbitrária, Codd usou de escolha semelhantes para a sua álgebra.

Ao todo, os operadores da álgebra relacional têm poder expressivo idêntico ao do calculo de domínio relacional ou calculo de tuplas relacionais. No entanto, pelas razões apontadas na introdução acima, a álgebra relacional é estritamente menos expressiva do que a lógica de primeira ordem sem símbolos de função. Álgebra relacional efectivamente corresponde a um subconjunto da lógica de primeira ordem que é a cláusula de Horn sem recursividade e negação.

Operações de conjuntos A álgebra relacional usa conjunto união, conjunto complementar e o produto cartesiano da Teoria dos conjuntos, mas adiciona restrições adicionais a esses operadores.

Para união de conjunto e conjunto complementar, as duas relações envolvidas devem ser compatíveis com união - isto é, as duas relações devem ter o mesmo conjunto de atributos. Porque a interseção de conjuntos pode definir-se em termos da diferença do conjunto, as duas relações envolvidas na diferença do conjunto devem ser compatíveis com união.

Para definir o produto Cartesiano, as duas relações envolvidas devem ter cabeçalhos disjuntivos - isto é, estes não podem partilhar um nome comum de atributo.

Em soma, o produto Cartesiano é definido de maneira diferente do produto em teoria do conjunto no sentido que tuplas são consideradas serem "baixinhas" para usos da operação. Isto é, o produto Cartesiano do conjunto de n-tuplas com um conjunto de m-tuplas resulta um conjunto (n + m)-tuplas "alisadas" (onde na teoria básica de conjuntos teríamos prescrito um conjunto de 2-tuplas, cada contendo uma n-tupla e outra m-tupla). Mais formalmente, R × S é definido como segue: R × S = {(r1, r2, ..., rn, s1, s2, ..., sm) | (r1, r2, ..., rn) ∈ R, (s1, s2, ..., sm) ∈ S} A cardinalidade do produto Cartesiano é o produto das cardinalidades dos seus fatores, i.e., |R × S| = |R| × |S|.

Projeção ()

A projeção é uma operação unária escrita como onde é um conjunto de nome de atributos. O resultado de tal projeção é definida como o conjunto que é obtido quando todas as tuplas em R são restritas ao conjunto .

Isto especifica o subconjunto de colunas (atributos de cada tupla) a ser seleccionado. Para obter os nomes e número de telefones da lista de endereços, a projeção poderia ser escrita . O resultado de tal projeção seria uma relação com apenas os Nomecontacto e Ntelefonecontacto para cada entrada única no livroendereços.

Seleção (σ)

Uma seleção generalizada é uma operação unária escrita como onde é uma fórmula proposicional que consiste de átomos como é permitido na seleção normal e operadores os lógicos (and), (or) e (negação). Esta seleção seleciona todas as tuplas em R para cada valor de .

Para obter uma listagem de todos os amigos ou associados no livro de endereços, a selecão podia ser escrita como . O resultado seria uma relação que tinha todos atributos de todos os registo únicos onde eamigo é verdadeiro ou onde econtactocomercial é verdadeiro.

No paper académico de Codd de 1970, a seleção é chamada de restrição.

Renomear ()

Renomear é uma operação unária escrita como onde o resultado é idêntico ao R excepto que o campo b em todas as tuplas é renomeado para um atributo a. Isto é simplesmente usado para mudar o nome do atributo de uma relação ou a relação em si.

Para renomear o atributo 'eamigo' para 'econtactocomercial' na relação, pode ser utilizado.

Operadores de junção e de operações similares

Junção natural () A junção natural é uma operação binária que é escrita como (R S) onde R e S são relações.Em Unicode, o símbolo gravata borboleta é (U+22C8). O resultado da junção natural é uma tabela com todas as combinações das tuplas em R e S que seu atributos em comum são iguais. Por exemplo, considerando as tabelas Empregado e Departamento e sua junção natural: + Empregado Nome IdEmp DeptNome Harry 3415 Finanças Sally 2241 Vendas George 3401 Finanças Harriet 2202 Vendas + Departamento DeptNome Gerente Finanças George Vendas Harriet Produção Charles + Empregado  Departamento Nome IdEmp DeptNome Gerente Harry 3415 Finanças George Sally 2241 Vendas Harriet George 3401 Finanças George Harriet 2202 Vendas Harriet

Isso também pode ser usado para definir as composição das relações. Na teoria das categorias, a junção é, precisamente, o produto fibrado.

A junção natural é, indiscutivelmente, uma das mais importante operações visto que ela é a contraparte relacional do AND (E) lógico. Observe com atenção que se as mesmas variáveis forem mostradas nos dois predicados que são conectados pelo AND, então essa variável representa a mesma coisa e ambas as aparências sempre devem ser substituídas pelo mesmo valor. Particularmente, a junção natural permite a combinação de relações que são associados por uma chave estrangeira. No exemplo que procedeu, provavelmente existe uma chave estrangeira em Empregado.DeptNome para Departamento.DeptNome e então a junção natural de Empregado e Departamento combina todos os empregados com seus departamentos. Nota que isso funciona porque a chave estrangeira detém os atributos entre os de mesmo nome. Se esse não for o caso, como em uma chave estrangeira de Departamento.Gerente para Empregado.número-emp, deve-se, então, renomear essas colunas antes de fazer a junção natural. Essa é, às vezes, uma equijunção (veja θ-junção).

Mais formalmente, a semântica da junção natural é definida como segue:

onde Fun é um predicado que é verdadeiro para uma relação binária r se e somente se é uma relação funcional binária. Normalmente, é necessário que R e S tenham, pelo menos, um atributo em comum, mas se essa restrição é omitida, então a junção natural torna-se, exatamente, o produto cartesiano.

A junção natural pode ser simulada com primitivos de Codd, como segue. Supõem-se que b1,…,bm são nomes de atributos comuns em R, S, a1,…,an são os atributos de nome único de R e c1,…,ck são os atributos de nome único de S. Além disso, assume-se que os nomes dos atributos d1,…,dm não são nem de R ou de S. Primeiramente, nós podemos mudar, agora, o nome do atributo em comum em S:

Então toma-se o produto cartesiano e faz-se a seleção as tuplas que devem ser ligadas:

Finalmente, pegue a projeção para se livrar dos atributos renomeados:

θ-junção e equijunção Equacionaríamos como tabelas Carro e Barco os quais listam modelos de carros e barcos e seus respectivos preços. Por exemplo, suponha que um cliente quer comprar um carro e um barco, mas não quer gastar mais dinheiro para o barco do que para o carro. A θ-junção (θ) na relação PreçoCarro ≥ PreçoBarco produz uma tabela com todas as opções possíveis. Ao utilizar uma condição em que os atributos são iguais, por exemplo, preço, então a condição pode ser especificada como Preço=Preço ou alternativamente (preço) sozinho.

+ Carro CarroModelo PreçoCarro CarroA 20,000 CarroB 30,000 CarroC 50,000 + Barco BarcoModelo PreçoBarco Barco1 10,000 Barco2 40,000 Barco3 60,000 + CarroModelo PreçoCarro BarcoModelo PreçoBarco CarroA 20,000 Barco1 10,000 CarroB 30,000 Barco1 10,000 CarroC 50,000 Barco1 10,000 CarroC 50,000 Barco2 40,000