Pular para o conteúdo

JOINS

JOIN ou INNER JOIN

SELECT * FROM Clientes
  JOIN Contas
    ON Clientes.ClienteCodigo=Contas.ClienteCodigo;

SELECT * FROM CLIENTES
  INNER JOIN Contas
    ON Clientes.ClienteCodigo=Contas.ClienteCodigo;

LEFT JOIN ou LEFT OUTER JOIN

O comando LEFT indica que todos os registros existentes na tabela da sua esquerda serão retornados e os registros da outra tabela da direita irão ser retornados ou então virão em branco.

SELECT ClienteNome, ContaSaldo,
  CASE WHEN CartaoCodigo IS NULL THEN 'LIGAR' ELSE 'NÃO INCOMODAR' END AS 'NN'
  FROM Clientes
  INNER JOIN Contas
  ON (Contas.ClienteCodigo = Clientes.ClienteCodigo)
  LEFT JOIN CartaoCredito
  ON (CartaoCredito.ClienteCodigo = Clientes.ClienteCodigo);

Já o comando RIGHT traz todos os registros da tabela da direita e os registos da tabela da esquerda, mostrando em branco aqueles que não tem relação.

SELECT * FROM CartaoCredito RIGHT JOIN Clientes 
ON CartaoCredito.ClienteCodigo=Clientes.ClienteCodigo;

FULL JOIN

É como se fosse uma junção de LEFT JOIN com RIGHT JOIN

SELECT *
FROM Clientes A
FULL JOIN CartaoCredito B
ON A.ClienteCodigo = B.ClienteCodigo

CROSS JOIN

Produto cartesiano

SELECT *
FROM Clientes A
CROSS JOIN CartaoCredito B

SELF JOIN

É uma operação de JOIN de uma tabela com ela mesma.

Exemplo: https://learnsql.com/blog/what-is-self-join-sql/

SELECT * FROM Clientes as C 
INNER JOIN Clientes as B 
on
C.ClienteCodigo=B.ClienteCodigo

JOIN com uma Sub Consulta

SELECT * FROM Clientes as C 
INNER JOIN 
    (SELECT * FROM CartaoCredito) AS CC
            on C.ClienteCodigo=CC.ClienteCodigo

CTE – Common Table Expression

Especifica um conjunto de resultados nomeado temporário, conhecido como uma CTE (expressão de tabela comum). Ela é derivada de uma consulta simples e definida no escopo de execução de uma única instrução SELECT, INSERT, UPDATE, DELETE ou MERGE.

WITH cte_clientes
as
(
SELECT ClienteCodigo 
FROM Clientes
),
cte_cartao
as
(
SELECT ClienteCodigo 
FROM CartaoCredito
)

select cte_cartao.ClienteCodigo, cte_clientes.ClienteCodigo 
from cte_clientes inner join cte_cartao
on cte_cartao.ClienteCodigo=cte_clientes.ClienteCodigo

Atualizando dados usadno CTE

WITH cte_clientes
as
(
SELECT ClienteCodigo 
FROM Clientes
),
cte_cartao
as
(
SELECT ClienteCodigo 
FROM CartaoCredito
)

UPDATE cte_clientes set ClienteCodigo = cte_clientes.ClienteCodigo 
from cte_clientes inner join cte_cartao
on cte_cartao.ClienteCodigo=cte_clientes.ClienteCodigo

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *