domingo, 30 de novembro de 2014

No post SQL Joins, estudamos as quatro principais operações de junção no SQL - inner, left, right e outer join. Existem outras três operações que podem ser feitas com uma pequena modificação na estrutura do código destas outras quarto. São elas
  1. LEFT EXCLUDING JOIN
  2. RIGHT EXCLUDING JOIN
  3. OUTER EXCLUDING JOIN
Utilizando as mesmas tabelas do post SQL Joins, vamos explanar cada uma destas consultas.

LEFT EXCLUDING JOIN

Derivada do LEFT JOIN, esta consulta apenas os valores na tabela da esquerda que não estão presentes na tabela da direita - CUSTOMERS e ORDERS, respectivamente. Graficamente,


No código em SQL temos

-- LEFT EXCLUDING JOIN
SELECT A.CustomerName, B.OrderDate
FROM CUSTOMERS A
LEFT JOIN ORDERS B
ON A.CustomerID = B.CustomerID
WHERE B.CustomerID IS NULL


Repare que a única diferença para o LEFT JOIN é a inclusão da última linha em negrito. Por esta razão, muitos não consideram o LEFT  EXCLUDING JOIN como uma operação de join propriamente dita (assim como as outras duas que são assunto deste post).

RIGHT EXCLUDING JOIN

Aqui, retornamos todos os registros que estão na tabela da direita e que não possuem nenhuma relação com os registros da tabela da esquerda. Sua representação é


No SQL

-- RIGHT EXCLUDING JOIN
SELECT A.CustomerName, B.OrderDate
FROM CUSTOMERS A
RIGHT JOIN ORDERS B
ON A.CustomerID = B.CustomerID
WHERE A.CustomerID IS NULL

Novamente, a única diferença para o RIGHT JOIN é a inclusão da linha WHERE A.CustomerID IS NULL.


OUTER EXCLUDING JOIN

Esta consulta traz como resultado todos os registros das colunas da esquerda e da direta, excluídos os registros de intersecção.


No SQL,

-- OUTER EXCLUDING JOIN
SELECT A.CustomerName, B.OrderDate
FROM CUSTOMERS A
FULL OUTER JOIN ORDERS B
ON A.CustomerID = B.CustomerID
WHERE A.CustomerID IS NULL OR B.CustomerID IS NULL

E seguimos o mesmo racional das consultas anteriores, com resultado





Um abraço e até o próximo post!


0 comentários:

Postar um comentário