quarta-feira, 31 de outubro de 2012

Redes Neurais Artificiais

As redes neurais artificiais (RNA) são, como seu nome indica, redes computacionais que simulam, a grosso modo, a rede de células nervosas (neurônios) de um sistema nervoso central biológico, seja humano ou animal. Esta simulação é basicamente uma simulação célula por célula, isto é, neurônio por neurônio (GRAUPE, 2007).

O primeiro interesse em redes neurais emergiu após a introdução simplificada de neurônios por McCulloch e Pitts em 1943. Estes neurônios foram apresentados como modelos de neurônios biológicos e como componentes conceituais para circuitos que podiam realizar tarefas computacionais (KROSE & SMAGT, 1996).

As redes neurais artificiais (RNA) podem ser caracterizadas como um modelo computacional, com propriedades particulares incluindo a habilidade de se adaptar e aprender, organizar dados agrupando-os e operações baseadas em processamento paralelo (KROSE & SMAGT, 1996).


Fundamentos Matemáticos

Muitos esforços foram feitos no intuito de se modelar os neurônios biológicos, entretanto, o que se conseguiu até hoje foi uma aproximação elementar. A fórmula abaixo representa um neurônio artificial (ZURADA, 1992; VIEIRA & ROISENBERG, 2004):

neti = Σ uj wij

Neste modelo proposto, o neurônio artificial possui entradas uj que recebem as saídas de outros neurônios. Estas entradas são ponderadas pelos pesos wij, que são inspirados na força da conexão sináptica, da conexão sináptica do neurônio i para o neurônio j. Assim tem-se o chamado net do neurônio, que é o somatório de todas as entradas multiplicadas pelos seus respectivos pesos (VIEIRA & ROISENBERG, 2004).


Modelos de Aprendizagem

Uma rede neural artificial tem dois elementos básicos: a arquitetura e o algoritmo de aprendizagem. Esta divisão surge porque a rede necessita ser treinada. O conhecimento sobre o problema está armazenado dentro dos exemplos disponíveis na rede (RAUBER, 1997).

A composição da rede é feita pelos neurônios. O tipo de processamento de um único neurônio é a combinação linear das entradas com os pesos seguida pela passagem da combinação linear por uma função de ativação. A natureza do problema a ser resolvido define restrições em relação aos tipos de redes e algoritmos de aprendizagem possíveis (RAUBER, 1997).

Uma principal distinção em relação ao paradigma de aprendizagem são a aprendizagem supervisionada e aprendizagem não-supervisionada. Na aprendizagem supervisionada cada exemplo de treino está acompanhado por um valor que é o valor desejado. Quando não se sabe os atributos estatísticos relevantes das correlações entre os exemplos de treinos, sendo esta a tarefa de aprendizagem, temos a aprendizagem não-supervisionada (RAUBER, 1997).


Tipos de Redes Neurais Artificiais

Um sistema dinâmico complexo é uma rede de sistemas interconectados. Este sistema complexo pode ser representado por um grafo direcionado, ou dígrafo, onde os vértices representam os componentes, e seguem os conceitos da Teoria dos Grafos. Uma rede neural artificial (RNA) é um sistema dinâmico complexo representado por um grafo em que cada vértice é um neurônio artificial (BARRETO, 2002).

Os tipos de redes neurais artificiais são definidas através de escolhas dos conjuntos e funções envolvidas na definição de redes neurais como sistemas dinâmicos. Tendo assim uma rede neural contínua no tempo, discreta no tempo e invariante no tempo (BARRETO, 2002).

Uma rede neural contínua no tempo é uma rede neural definida em um subconjunto contínuo do eixo do tempo T = R. Uma rede neural discreta no tempo é uma rede neural definida em um subconjunto discreto do eixo do tempo T = Z. E uma rede neural invariante no tempo é uma rede neural em que a função de transição depende de um único elemento de T e a função de saída é independente de T (BARRETO, 2002).

Sobre a forma de como os neurônios se interligam, as redes neurais artificiais podem ser diretas ou recorrentes, onde a principal diferença é que nas redes diretas os neurônios não recebem retroalimentação em suas entradas, ou seja, o grafo não tem ciclos, e nas redes recorrentes existe pelo menos um ciclo de retroalimentação, onde algum neurônio fornece o seu sinal de saída para a entrada de outro neurônio (VIEIRA & ROISENBERG, 2004; ROJAS, 1996).


Redes Auto-organizáveis

A Teoria de Ressonância Adaptativa (ART) foi originada para o propósito de desenvolver redes neurais artificiais onde as maneiras de performance, especialidade de reconhecimento de padrão ou tarefas de classificação, fossem próximas de uma rede neural biológica. Desta forma, as redes ART não precisam de aprendizados mas de funções não-supervisionadas em redes auto-organizáveis (GRAUPE, 2007).

As redes ART consistem em duas camadas, sendo a camada de comparação e a camada de reconhecimento, as quais são interconectadas. A camada de reconhecimento serve como uma camada de classificação (GRAUPE, 2007).

As redes treinadas sem um aprendizado usualmente aprendem pela comparação de critérios explícitos. Estas redes podem produzir uma saída onde diz o quão familiar é com o padrão presente. Estes tipos de redes podem adaptar-se durante o processo denominado auto-organização (ZURADA, 1992).


Redes Construtivas

Uma rede construtiva é composta de métodos que começam com uma arquitetura mínima de rede e adicionam neurônios até que uma solução adequada seja encontrada. A determinação da arquitetura de rede inicial nestes métodos é imediata (CASTRO et al., 1999).

Os algoritmos construtivos resultam em um menor esforço computacional. Redes com dimensões reduzidas efetuam os passos forward e backward, necessários no processo de treinamento, com menor esforço computacional e podem ser descritas utilizando um conjunto menor de parâmetros. O papel de cada neurônio torna-se mais evidente (CASTRO et al., 1999).


Algoritmos de Redes Neurais

Um importante aspecto em redes neurais é a definição das conexões entre os elementos e a definição dos pesos associados a estas conexões. A informação armazenada e a computação realizada por uma determinada rede neural são definidas mais pela topologia de conexões e pelos pesos atribuídos que propriamente pelos elementos individualmente (HERNANDEZ, 2005).

Estas conexões entre os neurônios artificiais de uma rede são normalmente programáveis, onde existe algum mecanismo de aprendizado, através do qual a rede incorpora experiência a partir de exemplos que lhe são apresentados. Isto é interessante para a solução de problemas cuja especificação não é suficientemente estruturada, o que dificulta a sua representação em uma forma algorítmica (HERNANDEZ, 2005).

Diversos métodos de aprendizado foram desenvolvidos, sendo que os algoritmos de aprendizado supervisionado possuem o mais fácil entendimento. Neste tipo de aprendizado, as informações são apresentadas à rede sob a forma de padrões de entrada e dos resultados correspondentes desejados, conhecidos previamente. O algoritmo verifica as saídas geradas, para os padrões de entrada dos exemplos de treinamento, e as compara com as saídas desejadas, orientando assim o ajuste nas conexões sinápticas de forma a minimizar a diferença entre saída desejada e saída oferecida pela rede (HERNANDEZ, 2005).

O ajuste sináptico procura corrigir os pesos de modo que se produza a saída desejada diante da respectiva entrada, representando assim o aprendizado, em cada neurônio, do fato apresentado. Desta forma, pode-se dizer que ao final do processo de aprendizado, o conhecimento dos neurônios da rede neural reside nos pesos sinápticos (HERNANDEZ, 2005).


Aplicações de Redes Neurais

Atualmente as aplicações das redes neurais artificiais estão invadindo todos os domínios, desde as primeiras que realizavam reconhecimento de padrões até distribuição de energia elétrica, mercado de capitais, aplicações navais e sistemas especialistas (BARRETO, 2002).

O reconhecimento de padrões é uma das primeiras aplicações de redes neurais. O reconhecimento de padrões tenta imitar as capacidades cognitivas dos seres vivos, incluindo reconhecimento de rosto, cheiro, caligrafia, caracteres etc. Isto pode ser atribuído a um sistema bastante desenvolvido de reconhecimento de padrões (ZURADA, 1992; BARRETO, 2002).

Uma aplicação de redes neurais artificiais à séries temporais bastante útil é a previsão de mercado de capitais. Uma rede é treinada com valores de uma série temporal que ocorreram em um determinado intervalo de tempo e com saída como sendo um valor futuro da série (BARRETO, 2002).

As redes neurais podem ser aplicadas na solução de problemas de controle robótico, com funções especializadas em movimentos robóticos. Estes modelos de redes neurais são desenvolvidas para solucionar problemas da cinemática de robôs, na geometria dos movimentos dos manipuladores dos membros robóticos (ZURADA, 1992).

Na medicina, um sistema de redes neurais artificiais pode resolver o problema da ventilação mecanicamente assistida. A ventilação mecânica requer a avaliação da capacidade do paciente de continuar respirando sem auxílio. Retirar o auxílio prematuramente pode levar ao sofrimento do paciente, enquanto deixar tempo a mais representa gasto desnecessário do recurso. A observação por um médico pode ser menos confiável que um sistema de redes neurais (VIEIRA & ROISENBERG, 2004).


Solução de Problemas

A inteligência artificial serve para resolver problemas, imitando de uma certa forma a inteligência dos seres vivos. Um problema é o objeto matemático, consistindo de dois conjuntos não vazios, os dados e os resultados possíveis e de uma relação binária que caracteriza uma solução satisfatória (BARRETO, 2002).

Determinados problemas podem ter sua solução da forma de uma função, onde implementando esta função tem-se a solução do problema. Este fato leva à programação funcional e é a base da abordagem conexionista (BARRETO, 2002).

Um computador pode ser considerado como uma máquina de resolver problemas. Em um neurocomputador tem-se a rede de neurônios com entradas e saídas, um meio de fixar os pesos das conexões usando um algoritmo de aprendizagem e usar a rede já educada para resolver o problema com os dados a serem usados na entrada da rede (BARRETO, 2002). Um neurocomputador é um sistema computacional com uma arquitetura de hardware e software adequada para a execução de algoritmos presentes na base lógica das redes neurais (GALUSHKIN, 2007).


Pré-Processamento de Dados

Uma rede neural pode ser usada para mapear os dados crus de entrada diretamente para os valores finais requeridos, entretanto isto pode gerar resultados infelizes. Em muitas aplicações é necessário primeiro transformar os dados em algo novo antes de treinar a rede neural. Esta otimização dos dados é denominada pré-processamento e determina a performance do sistema final (BISHOP, 1995).

Pré-processamentos complexos podem envolver na redução da dimensão dos dados de entrada. Esta redução pode proporcionar uma melhoria na performance já que a informação tende a diminuir. É uma das mais importantes formas de pré-processamento (BISHOP, 1995).


Pós-Processamento de Dados

Similarmente, a saída da rede neural é frequentemente pós-processada para obtenção dos valores de saída requeridos. Da mesma forma, o pós-processamento consiste em transformações simples nos dados (BISHOP, 1995).

Em aplicações que envolvem aprendizado, cada novo dado necessita ser pré-processado antes de ser passado à rede neural. Se o pós-processamento está sendo utilizado, então os dados alvos precisam ser transformados usando o inverso do pós-processamento para gerar os valores de saída corretos. Quando os dados são processados por uma rede treinada, é necessário primeiro passá-los pelo estágio de pré-processamento, seguido pela rede e finalmente pela transformação pós-processada (BISHOP, 1995).


Conclusão

O campo de aplicação das RNAs é amplamente vasto e suas aplicações vem acontecendo há muito tempo. As redes neurais artificiais são um assunto bem antigo e, ao mesmo tempo, bastante novo. Há décadas elas são estudadas e até hoje elas são um desafio para a humanidade. Diversos profissionais estão sendo atraídos pelas aplicações das RNAs.

As redes neurais artificiais possuem uma grande vantagem como algoritmos de resolução de problemas pois possuem a capacidade de adaptar-se e aprender para buscar a melhor solução. Elas também podem imitar a capacidade cognitiva do ser humano, desempenhando um papel importante no reconhecimento de dados.

Pode-se concluir que um sistema de inteligência artificial deve incorporar uma rede neural artificial para que se aproxime do intelecto humano. A robótica faz e fará grande uso das RNAs. O futuro da tecnologia e da computação com certeza está relacionado ao sucesso das redes neurais artificiais.

REFERÊNCIAS

BARRETO, J.M. Introdução às Redes Neurais Artificiais, Laboratório de Conexionismo e Ciências Cognitivas, Universidade Federal de Santa Catarina, 2002.

BISHOP, C.M. Neural Networks for Pattern Recognition, Clarendon Press, Oxford, 1995.

CASTRO, L.N.; IYODA, E.M.; PINHEIRO, E.; ZUBEN, F.V. Redes Neurais Construtivas: Uma Abordagem Comparativa, IV Congresso Brasileiro de Redes Neurais, 1999.

GALUSHKIN, A.I Neural Networks Theory, Springer, 2007.

GRAUPE, D. Principles of Artificial Neural Networks, Advanced Series on Circuits and Systems – Vol. 6, World Scientific Publishing, 2nd Edition, 2007.

HERNANDEZ, E.D.M. Inteligência Computacional e Redes Neurais em Engenharia Elétrica, Departamento de Engenharia de Sistemas Eletrônicos, Universidade de São Paulo, 2005.

KROSE, B.; SMAGT, P. An introduction to Neural Networks, University of Amsterdam, 8th Edition, 1996.

RAUBER, T.W. Redes Neurais Artificiais, Encontro Regional de Informática, Sociedade Brasileira de Computação, 1997.

ROJAS, R. Neural Networks A Systematic Introduction, Springer, 1996.

VIEIRA, R.C.; ROISENBERG, M. Redes neurais artificiais: Um breve tutorial, Laboratório de Conexionismo e Ciências Cognitivas, Universidade Federal de Santa Catarina, 2004.

ZURADA, J.M. Introduction to Artificial Neural Systems, West Publishing Company, 1992.

terça-feira, 30 de outubro de 2012

Problema de Lógica: O Conselho de Sábios

Uma vez, em uma época, existiu um famoso sábio chamado Hasen Said. O povo o chamava de "o sábio dos sábios". Um dia, enquanto viajava pelo mundo, o sábio chegou à corte de um sultão, onde foi recebido com grande honra. O sultão o tratou com comida, apresentou-se e, em um dia, disse-lhe:

"Eu governo meu país com a ajuda do Conselho de Sábios, onde eu reúno os doze homens mais sábios do meu país. Contudo, poderia colocá-los em um teste, para que eles possam permanecer somente se forem dignos da honra que dou à eles?"

Hasen Said pensou um pouco e então disse:

"Tudo bem, reúna-os."

Quando todos os sábios estavam reunidos, Hasen disse-lhes:

"Oh, homens sábios, seu rei, o sultão, os reuniu para nos mostrar toda a sua sabedoria. Os servos colocaram uma caixa na frente de cada um de vocês. Todas estas caixas são idênticas. Aqui, na minha bolsa, eu tenho doze pedras preciosas. Algumas delas são esmeraldas, as outras são rubis. Eu convido cada um de vocês para saírem da sala, um por vez, enquanto eu coloco uma destas pedras na sua respectiva caixa, assim todos podem ver as pedras dos outros, mas não saberá qual a sua própria pedra."

E Hasen convidou o primeiro dos sábios para sair da sala. Ele colocou um rubi em sua caixa. Depois que o primeiro retornou, o segundo saiu e Hasen colocou uma esmeralda em sua caixa. Para o terceiro, ele colocou uma esmeralda. E assim por diante até o último. Quando o último sábio retornou, Hasen disse-lhes:

"Todos vocês viram as pedras dos outros, mas não sabem a sua própria pedra. Se você é sábio de fato e se você confia em sua mente e em seus olhos, nada o impede de você realizar o meu desejo. Todos que possuem esmeraldas, venham até aqui e coloquem a sua caixa aos pés do sultão."

Infelizmente, ninguém veio. O sultão ficou então furioso e ordenou que todos os seus sábios fossem banidos da corte, mas Hasen o deteve:

"Não aja precipitadamente, senhor. Eu também teria feito a mesma coisa."

Dez minutos depois, Hasen disse-lhes novamente:

"Todos que possuem esmeraldas, venham até aqui e coloquem a sua caixa aos pés do sultão!"

O mesmo silêncio, ninguém veio. Hasen repetiu o mesmo convite a cada dez minutos, e depois de uma hora, alguns dos sábios se levantaram e vieram para o sultão, que abriu suas caixas. Todas elas continham esmeraldas! Ele pediu para ver as caixas dos outros, onde todas tinham rubis. Temos que dizer que durante toda esta hora, os sábios não disseram nada, eles somente pensaram.

"Oh, senhor!", Hasen disse ao sultão, "Você pode se orgulhar do seu Conselho de Sábios. Eles são homens realmente sábios!" E dizendo-lhes adeus, deixou-os.

A história termina aqui, mas nós convidamos você a continuar, mostrando quantas esmeraldas Hasen havia colocado nas caixas dos sábios e como eles descobriram a pedra que possuíam...





RESPOSTA





A solução deste problema segue o conceito do conhecimento comum, que é a base da teoria dos jogos. Neste conceito, todos escolhem a melhor reação ao mesmo tempo, reproduzindo o equilíbrio de Nash.

São doze pedras, entre esmeraldas (e) e rubis (r), portanto e + r = 12. O convite foi repetido a cada dez minutos, durante uma hora, até que os que possuíam esmeraldas se dirigissem ao sultão. Desta forma, dentre os sessenta minutos o convite foi dito sete vezes, uma no início e seis após cada dez minutos.

Vamos avançar até o ponto de equilíbrio. Primeiramente vamos supor que exista somente uma esmeralda, sendo e = 1 e r = 11, mas eles não sabem disso. Neste caso, se houvesse apenas uma esmeralda, o sábio que estivesse com ela olharia para os outros e, vendo somente rubis, deduziria que a esmeralda estaria consigo. No primeiro convite ele já se levantaria para levar a caixa ao sultão.

Em um segundo raciocínio, vamos supor que existam duas esmeraldas e dez rubis, sendo e = 2 e r = 10, mas eles não sabem disso. Neste caso, cada um dos sábios com esmeraldas veria com os outros sábios a outra esmeralda e os dez rubis. No segundo convite, cada um dos dois sábios com esmeralda saberia que a esmeralda do outro não era a única e, vendo os demais com rubis, deduziria que a outra esmeralda estaria consigo. No segundo convite os dois se levantariam para levar a caixa ao sultão.

Este raciocínio é semelhante para e = 3 e r = 9, ocorrendo a dedução após o terceiro convite, para e = 4 e r = 8..., e = 5 e r = 7..., até e = 6 e r = 6, onde ocorre a dedução após o sexto convite. Percebe-se então a relação entre o número de convites e o número de esmeraldas.

Supondo que existam sete esmeraldas e cinco rubis, sendo e = 7 e r = 5, mas eles não sabem disso. Neste caso, cada um dos sábios com esmeraldas veria com os outros sábios outras seis esmeraldas e os cinco rubis. No sétimo convite, cada um dos sábios com esmeralda saberia que existem mais de seis esmeraldas e, vendo as seis esmeraldas e os cinco rubis, deduziria que a sétima esmeralda estaria consigo. No sétimo convite os sete sábios com esmeraldas se levantariam para levar a caixa ao sultão. E foi o que aconteceu.

A resposta do problema é que Hasen colocou sete esmeraldas e cinco rubis nas caixas.

Leia mais sobre conhecimento comum em http://dan-scientia.blogspot.com.br/2010/08/o-conhecimento-comum-e-o-equilibrio-de.html e um outro problema bastante interessante em http://dan-scientia.blogspot.com.br/2009/08/problema-de-logica-cor-dos-olhos.html

segunda-feira, 29 de outubro de 2012

Internacionalização e localização em softwares de computador

Em um mundo globalizado, é grande a possibilidade de um software, desenvolvido em um país, ser executado em diferentes partes do mundo. Com a Internet esta disseminação torna-se mais fácil. Contudo, cada povo de um país terá a sua língua, a sua cultura e interpretará as informações de forma diferente. Um software, para conseguir a aceitação global, deve permitir se adaptar às diferentes línguas e culturas das mais variadas regiões.

A necessidade desta adaptação, além do que é mais perceptível que é a tradução do idioma, está também em diversos aspectos que podem diferenciar um povo do outro. As diferenças podem estar em relação a direção da escrita, a ordenação alfabética, a representação dos números, o formato da moeda, dos números e das datas, a combinação das cores e formas gráficas, as unidades de medida e inclusive à legislação vigente no país.

Na computação existem dois processos, ou passos, de adaptação do software para as diferentes linguagens e diferenças regionais, são os processos de Internacionalização e Localização. Estes processos devem ser aplicados durante o desenvolvimento do software, deixando-o pronto para futuras adaptações que forem necessárias.

A Internacionalização, termo abreviado para i18n, é o primeiro passo na adaptação do software. Trata-se da preparação do software para que o mesmo esteja completamente neutro e possa adaptar-se às diferentes linguagens e regiões sem a necessidade de alterações em sua engenharia.

A Localização, termo abreviado para l10n, é o segundo passo na adaptação do software. Trata-se da preparação do software à uma linguagem e região específica, pela adição de componentes de localização, tornando-o adequado para onde for utilizado.

As abreviações dos termos internacionalização e localização são originadas dos respectivos termos na língua inglesa, as palavras internationalization e localization são abreviadas para apenas a primeira e a última letra, com o número das letras suprimidas ao meio da abreviatura.

A internacionalização é um procedimento com uma exigência maior do conhecimento de engenharia de software, em contrapartida, o processo de localização requer um maior conhecimento no aspecto social, cultural e linguístico da região onde será destinado o software. O processo de localização é geralmente desenvolvido por um profissional em tradução.

quarta-feira, 24 de outubro de 2012

Breadcrumb no auxílio à navegação web

O breadcrumb, termo em inglês para migalha de pão, é um recurso auxiliar que exibe o caminho percorrido pelo usuário, dentre as páginas visitadas do site, durante a navegação. É um recurso extra para auxiliar o menu principal, atuando de forma secundária, e assim melhorar a localização do usuário dentro do site. No breadcrumb cada termo é um link para a respectiva página da estrutura hierárquica do site.

O breadcrumb é melhor aplicado quando o site possui páginas organizadas hierarquicamente. Onde as páginas formam níveis ou categorias ou ramos na organização do conteúdo, em uma estrutura estática de árvore. Entretanto, é possível ser aplicado dinamicamente para montar todo o caminho percorrido pelo usuário, independentemente se as páginas pertencem a uma mesma hierarquia, mas esta forma exige muito cuidado.

A aparência mais comum de um breadcrumb é na forma textual, com os termos separados por símbolos que se assemelham à setas, por exemplo o símbolo », numa disposição horizontal. É muito semelhante a caminhos de diretórios em gerenciadores de arquivos.

Um exemplo de breadcrumb:

Início » Livros » Nacionais » Astronomia » Manual do Astrônomo Amador

Assim como qualquer interface humano-computador, o breadcrumb necessita de um estudo de usabilidade para melhor atender a navegação do site e principalmente não confundir e atrapalhar o usuário. Além do seu posicionamento na página, deve-se preocupar principalmente com a estrutura dos níveis. O breadcrumb é muito comum em sites de comércio eletrônico, onde os produtos são separados por categorias e subcategorias.

domingo, 14 de outubro de 2012

Teoria dos conjuntos em junções SQL

A SQL (Structured Query Language) é uma linguagem de programação especialmente designada para gerenciamento de dados em um sistema de banco de dados relacional. Surgida nos anos 70, a SQL foi originalmente baseada na álgebra relacional, uma forma de cálculo sobre conjuntos e relações. Na SQL, algumas das operações de junções entre tabelas podem ser facilmente demonstradas com a teoria dos conjuntos. Os diagramas de Venn simbolizam graficamente as propriedades relativas aos conjuntos e sua teoria.


INNER JOIN

A junção interna é a mais simples e mais comum. Esta consulta retorna somente o conjunto de registros que possuem coincidência entre as tabelas:

SELECT *
FROM TabelaA A
INNER JOIN TabelaB B
ON A.id = B.id




LEFT OUTER JOIN

Esta junção externa à esquerda inclui todos os registros da tabela da esquerda e inclui os registros da tabela da direita apenas quando registros coincidentes são encontrados:

SELECT *
FROM TabelaA A
LEFT OUTER JOIN TabelaB B
ON A.id = B.id




LEFT OUTER JOIN exclusiva

Esta consulta retorna todos os registros da tabela da esquerda que não possuem coincidentes na tabela da direita. É realizado o mesmo LEFT OUTER JOIN, excluindo os registros coincidentes na tabela da direita com a cláusula WHERE:

SELECT *
FROM TabelaA A
LEFT OUTER JOIN TabelaB B
ON A.id = B.id
WHERE B.id IS NULL




RIGHT OUTER JOIN

Esta junção externa à direita inclui todos os registros da tabela da direita e inclui os registros da tabela da esquerda apenas quando registros coincidentes são encontrados:

SELECT *
FROM TabelaA A
RIGHT OUTER JOIN TabelaB B
ON A.id = B.id




RIGHT OUTER JOIN exclusiva

Esta consulta retorna todos os registros da tabela da direita que não possuem coincidentes na tabela da esquerda. É realizado o mesmo RIGHT OUTER JOIN, excluindo os registros coincidentes na tabela da esquerda com a cláusula WHERE:

SELECT *
FROM TabelaA A
RIGHT OUTER JOIN TabelaB B
ON A.id = B.id
WHERE A.id IS NULL




FULL OUTER JOIN

Esta junção externa total produz o conjunto de todos os registros de todas as tabelas, mesmo os registros que não possuem coincidência entre as tabelas:

SELECT *
FROM TabelaA A
FULL OUTER JOIN TabelaB B
ON A.id = B.id




FULL OUTER JOIN exclusiva

Esta junção externa total produz o conjunto de todos os registros únicos das tabelas, excluindo os registros que possuem coincidência entre as tabelas. É realizado o mesmo FULL OUTER JOIN, excluindo os registros que possuem coincidência com a cláusula WHERE:

SELECT *
FROM TabelaA A
FULL OUTER JOIN TabelaB B
ON A.id = B.id
WHERE A.id IS NULL OR B.id IS NULL




Observações:

Nas consultas onde são retornados registros sem coincidência, estes registros recebem o valor NULL.

A junção cruzada (CROSS JOIN), que gera um produto cartesiano das tabelas, não pode ser simbolizada graficamente no diagrama de Venn, pois retorna mais registros que os existentes nos conjuntos originais.

A linguagem SQL possui, além das junções, outros operadores de conjunto da álgebra relacional, entre eles os operadores UNION, INTERSECT e EXCEPT.