Até agora vimos como realizar pesquisas em uma única tabela. Contudo, na montagem do nosso modelo de dados sempre temos diversas tabelas. Logo é necessário sabermos como vincular a informação dessas tabelas de forma a mostrar a informação de maneira correta. A isto é dado o nome de união de tabelas (join).

Como visto anteriormente, a união entre as entidades do nosso modelo lógico se dá por meio de chaves primárias e estrangeiras. Essas chaves são, na representação física do modelo, as colunas que as tabelas têm em comum. No decorrer apresentarei as diversas formas de unir colunas e como implementá-las em SQL.

União de tabelas

Para realizar a união de tabelas, basta acrescentarmos após a cláusula FROM do comando SELECT as tabelas que queremos unir. Devemos colocar na cláusula WHEREa condição de união das tabelas, ou seja, as respectivas chaves primária e estrangeira. Sintaxe:

SELECT Tabela1.coluna1, Tabela1.coluna2, Tabela2.coluna1, Tabela2.coluna2
FROM Tabela1, Tabela2
WHERE Tabela1.chave_primaria = Tabela2.chave_estrangeira

Código 1. Estrutura SELECT

Note que é opcional colocar a identificação da tabela antes do nome das colunas na lista de campo do comando SELECT. Contudo, essa é uma prática recomendada para facilitar o entendimento do comando.

Essa regra só não é válida quando estivermos querendo mostrar uma coluna que tenha o mesmo nome em ambas as tabelas – normalmente o que acontece com as chaves primária e estrangeira. Nesse caso é necessário indicar de qual tabela se quer a informação – ainda que, de fato, o dado seja igual nas duas tabelas. Considere que na maior parte dos bancos de dados, informar em qual tabela está a coluna facilita o trabalho do banco de dados. Essa prática leva a maior agilidade na recuperação da informação.

União regular

Denomina-se união regular as uniões que têm a cláusula WHERE unindo a chave primária à estrangeira das tabelas afetadas pelo comando SELECT. Exemplo:

SELECT PEDIDO.CODIGO, PEDIDO.CODCLIENTE, PEDIDO.DATA, CLIENTES.NOME 
FROM PEDIDO,CLIENTES
WHERE PEDIDO.CODCLIENTE = CLIENTES.CODCLIENTE;

Código 2. Estrutura SELECT

Desta maneira o SELECT trará todos os registros em que o código do cliente seja igual ao código do pedido, o interessante aqui, é que ele traz também o nome do cliente na tabela Pedido, sabendo é claro que não há este campo na tabela pedido.

Podemos também fazer a união utilizando JOIN, veja como ficaria no exemplo a seguir:

SELECT PEDIDO.CODIGO, PEDIDO.CODCLIENTE, PEDIDO.DATA, CLIENTES.NOME 
FROM PEDIDO JOIN CLIENTES 
ON PEDIDO.CODCLIENTE = CLIENTES.CODCLIENTE;

Código 3. Estrutura SELECT - JOIN

Para evitar que o comando fique extremamente extenso, é possível atribuir apelidos às tabelas utilizadas no comando SELECT. Devemos fazer isso, colocando o apelido após o nome da tabela na cláusula FROM. Dessa forma, o seguinte comando teria o mesmo efeito do comando anterior:

SELECT a.CODIGOCLIENTE, a.CODVENDA, b.NOMECLIENTE 
FROM PEDIDO a, CLIENTE b
WHERE a.CODIGOCLIENTE = b.CODIGOCLIENTE;

Código 4. Estrutura SELECT - Alias

União de mais de duas tabelas

Frequentemente é necessário unir mais de duas tabelas para fornecer uma informação relevante do banco de dados. No Nosso caso, suponha que se queira saber o quais foram os produtos comprados por um determinado cliente, na tabela de itens do pedido não há o código do cliente, a regra é: na tabela de pedido tem o codigo de cliente e na tabela de itens tem o codigo da venda, veja como fica essa instrução:

SELECT a.CODVENDA, a.CODCLIENTE, b.CODCLIENTE, b.NOMECLIENTE, c.CODVENDA, c.PRODUTO 
FROM PEDIDO a, CLIENTES b, ITENS c
WHERE a.CODCLIENTE = b.CODCLIENTE AND a.CODVENDA = c.CODVENDA;

Código 5. Estrutura SELECT - Alias

Conclusão:

Como podemos ver neste artigo, a união de tabela é algo bastante usado nas instruções SQls, ela é bastante usada quando precisamos fazer Views, Stored Procedures e até triggers, no próximo artigo estarei falando de Funções de agrupamento, até lá.