Seleção de tabelas III
Um banco de dados pode ser considerado como um conjunto de tabelas. Estas tabelas, em muitos casos, estão relacionadas entre elas e se complementam unas com outras.
Fazendo referência ao nosso clássico exemplo de um banco de dados para uma aplicação de e-comercio, a tabela clientes que estivemos falando pode estar perfeitamente coordenada com uma tabela onde armazenamos os pedidos realizados por cada cliente. Esta tabela de pedidos pode por sua vez, estarconectada com uma tabela onde armazenamos os dados correspondentes a cada artigo do inventário.
Deste modo poderíamos facilmente obter informações contidas nessas três tabelas como pode ser a designação do artigo mais popular em uma determinada região onde a designação do artigo seria obtida na tabela de artigos, a popularidade (quantidade de vezes que esse artigo foi vendido) viria da tabela de pedidos e a região estaria compreendida obviamente na tabela clientes.
Este tipo de organização baseada em múltiplas tabelas conectadas nos permite trabalhar com tabelas muito mais manejáveis e ao mesmo tempo, nos evita copiar o mesmo campo em vários lugares já que podemos acessa-lo a partir de uma simples chamada à tabela que o contém.
Neste capítulo veremos como, usando o que foi aprendido até agora, podemos realizar facilmente seleções sobre várias tabelas. Definiremos antes de nada as diferentes tabelas e campos que vamos utilizar em nossos exemplos:
Tabela de clientes | |
---|---|
Nome campo | Tipo campo |
id_cliente | Numérico inteiro |
nome | Texto |
sobrenomes | Texto |
endereço | Texto |
cidade | Texto |
cep | Texto |
telefone | Numérico inteiro |
Texto |
Tabela de pedidos | |
---|---|
Nome campo | Tipo campo |
id_pedido | Numérico inteiro |
id_cliente | Numérico inteiro |
id_artigo | Numérico inteiro |
data | Data |
quantidade | Numérico inteiro |
Tabela de artigos | |
---|---|
Nome campo | Tipo campo |
id_artigo | Numérico inteiro |
titulo | Alfanumérico |
autor | Alfanumérico |
editorial | Alfanumérico |
preço | Numérico real |
Estas tabelas podem ser utilizadas simultaneamente para extrair informações de todo tipo. Suponhamos que queremos enviar um mailing a todos aqueles que tiverem realizado um pedido nesse mesmo dia. Poderíamos escrever algo assim:
Select clientes.sobrenomes, clientes.email From clientes,pedidos Where pedidos.data like ’25/02/00′ And pedidos.id_cliente= clientes.id_cliente
Como pode ser visto desta vez, depois da cláusula From, introduzimos o nome das duas tabelas de onde tiramos as informações. Ademais, o nome de cada campo vai precedido da tabela de proveniência separado ambos por um ponto. Nos campos que possuem um nome que só aparece em uma das tabelas, não é necessário especificar sua origem embora na hora de ler sua sentença possa ser mais claro tendo esta informação mais precisa. Neste caso, o campo data poderia ter sido designado como “data” ao invés de “pedidos.data”.
Vejamos outro exemplo mais para consolidar estes novos conceitos. Desta vez queremos ver o título do livro correspondente a cada um dos pedidos realizados:
Select pedidos.id_pedido, artigos.titulo From pedidos, artigos Where pedidos.id_artigo=artigos.id_artigo
Na verdade a filosofia continua sendo a mesma que para a consulta de uma única tabela.