Introdução ao SQL - Pesquisa em Multiplas Tabelas
Veja nesta quick como manipular várias tabelas direto no SQL.
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
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;
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;
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;
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;
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á.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo