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