Free CSS Button Css3Menu.com

Tutoriais » SQL » Junção »
Definindo:
Este comando coloca lado-a-lado as tuplas de duas tabelas que atendam a uma condição de comparação de campos. Em livros o termo 'lado-a-lado' pode ser escrito: EMPARELHAR.
Simbologia AR:
A [[ condição ]] B ou A B
Sintaxe:
Citam-se a sintaxe de 87 e a de 92
SELECT * FROM tabela1, tabela2 WHERE [[ Condição ]]; [ANSI/87]
SELECT * FROM tabela1 INNER JOIN tabela2 ON [[ Condição ]]; [ANSI/92]

Notas:
  • Em AR, a expressão para representar a operação de junção é a mesma para as duas sintaxes da SQL, ou seja:
    <tabela1>[[condição]]<tabela2>
  • CUIDADO!
    Também já foi visto em livros a definição: 'Junção é um Produto Cartesiano condicionado', ou pior: 'Junção é um Produto Cartesiano como qual se faz uma Seleção'.
    Olha! Eu entendo a intenção dos autores destas pérolas... mas é melhor ficar com a primeira definição!
  • A junção é um comando que passou por versões no Padrão SQL.
    Se tivermos as tabelas:
    Pedidos (NumPedido, ValorTotal, Dat_Pedido, Cod_Cliente)
    Clientes(Cod_Cliente, Nome_Cli, Logradouro)
    Na primeira versão se implementou o comando:
    Clientes [[Clientes.CodCliente=Pedidos.CodCliente]] Pedidos
    Em SQL este comando fica assim:
    SELECT * FROM Clientes, Pedidos WHERE Clientes.Cod_Cliente=Pedidos.Cod_Cliente; [ANSI/87]
    Na Realidade de processamento de dados, já existia o conceito de junção aberta.
    'Encontrar linhas que NÃO participam de uma junção, daí tinha-se que implementar este conceito...
    Então surgiu a especificação do comando JOIN
    O comando JOIN veio com 5 complementos: CROSS, LEFT, RIGHT, INNER e FULL OUTER (para produto cartesiano, junções abertas para ESQUERDA, DIRETA, NATURAL e COMPLETA).
    Podemos implementar a Junção com o operador INNER JOIN, assim:
    SELECT * FROM Clientes INNER JOIN Pedidos ON Clientes.Cod_Cliente=Pedidos.Cod_Cliente; [ANSI/92]
  • Veja esta característica do SQL: COMBINAR COMANDOS DA Álgebra Relacional
    Vamos fazer uma JUNÇÃO e uma PROJEÇÃO
    SELECT Clientes.* FROM Clientes, Pedidos WHERE Clientes.Cod_Cliente=Pedidos.Cod_Cliente;
    Neste comando o SQL faz a junção e a seguir a projeção de todos os campos da tabela Clientes (somente de Clientes).
  • CUIDADO!
    O SQL permite fazer em um comando a junção de três ou mais tabelas.
    POR EXEMPLO. Se tivermos as tabelas:
    Pedidos (NumPedido, ValorTotal, Dat_Pedido, Cod_Cliente)
    Clientes(Cod_Cliente, Nome_Cli, Logradouro)
    ItensPedidos(NumPedido,CodProduto,QtdItemPedido,ValUnitario) e
    Produtos(CodProduto,Nome_Pro)
    Podemos fazer a junção destas 4 tabelas (usando a notação ANSI/87) assim:
    SELECT * FROM Clientes, Pedidos, ItensPedidos, Produtos
             WHERE Clientes.Cod_Cliente=Pedidos.Cod_Cliente AND
                   Pedidos.NumPedido=ItensPedido.NumPedido AND
                   ItensPedido.CodProduto=Produtos.CodProduto; [ANSI/87]

    Ou usando a notação ANSI/92 (note que o comando 'evoca' 3 vezes o INNER JOIN - e cada um com seu 'ON'):
    SELECT * FROM Clientes INNER JOIN Pedidos ON Clientes.Cod_Cliente=Pedidos.Cod_Cliente
                           INNER JOIN ItensPedidos ON Pedidos.NumPedido=ItensPedido.NumPedido
                           INNER JOIN Produtos ON ItensPedido.CodProduto=Produtos.CodProduto; [ANSI/92]


Tutoriais » SQL » Junção »