Você está na página 1de 5

1 CONSULTAS SQL - INTRODUO

As consultas SQL traduzem em "midos" quilo que a aplicao dever buscar no banco de dados para gerar algum tipo de relatrio. Nos casos mais comuns, existem consultas que devero ser realizadas por mais de um formulrio ou relatrio. Um exemplo comum o que traz informaes especficas sobre uma mesma tabela em um banco de dados:

Consulta relao dos nomes e preos dos produtos por nome do produto.

SELECT NOME, PRECO FROM PRODUTO WHERE NOME LIKE 'REFRIGERANTE*'; O comando SELECT traduz a descrio acima, onde a consulta ser realizada utilizando o campo NOME em WHERE NOME LIKE... que ser comparado com a string REFRIGERANTE e o resultado ser uma lista de NOMEs e PRECOs da tabela PRODUTO como descrito em SELECT NOME, PRECO FROM PRODUTO... A definio de uma descrio detalhada facilita a utilizao do comando SELECT, uma vez que a definio ainda a melhor forma de caracterizar o programa. Assim como o algoritmo em programao, mecanismos como o Modelo E-R ou descries sobre consultas so uma forma simples de representar a seqncia estabelecida pelo problema, auxiliando na sua resoluo. O importante no simplesmente o saber fazer, mas principalmente o saber o qu fazer. Um exemplo constantemente utilizado em implementaes o de uma aplicao que utilize o modelo E-R a seguir:

Um conjunto de consultas utilizadas para esta estrutura do banco de dados estaria definido como:

Consulta nomes dos clientes por nome da cidade; Consulta nome do cliente e nome da cidade por sigla do estado; Consulta CNPJ por nome ou cdigo do cliente; Consulta nomes dos produtos mais vendidos no perodo (data); Consulta nomes dos produtos e quantidade vendida por nome do quantidade vendida; cliente, ordenando por

Consulta nmero de clientes por estado ou por cidade; Consulta valor total vendido no perodo e por nome do cliente; Consulta totais vendidos por cidade no perodo; Consulta totais de descontos concedidos por nome do cliente;

Uma consulta NO poderia estar definida como: Consulta clientes por estado; Pois no se sabe quais informaes sobre clientes so necessrias.

O correto seria: Consulta nome do cliente por estado. Consulta nome do cliente; Pois no est definida qual informao ser fornecida pelo usurio.

O correto seria: Consulta nome do cliente por cdigo do cliente. H casos ainda em que permitido detalhar uma consulta de forma que ela seja parte de outra consulta mais abrangente. Veja os exemplos: Consulta nome do cliente por nome da cidade ou sigla do estado; Consulta nome do cliente e nome da cidade por sigla do estado;

Cada um dos exemplos acima pode ser descrito com um comando SELECT diferente para cada um. Eles podem ser muito parecidos, porm, o cuidado da interpretao adequada permite que o programador faa uso da lgica e implemente as solues em um nico comando, utilizando mais de uma tabela para isso.

1.1 Construindo o SELECT No exemplo vimos a necessidade de explicitar os nomes dos campos e tabelas que sero exibidos como resultado da consulta e o campo que servir de base para a pesquisa como no esquema abaixo: Consulta nomes de clientes por nome da cidade. nomes Campo Resultado: Aparece como resultado da consulta na forma de lista. clientes Tabela Consultada: a tabela utilizada para buscar os dados sobre clientes (nomes). nome Campo Varivel: o campo que ser comparado com cada registro no banco de dados a fim de encontrar valores idnticos aos exigidos pelo usurio da aplicao. cidade Tabela Consultada: a tabela utilizada para buscar os dados sobre cidades (nomes).

Desta forma, o comando SELECT poderia ser descrito como o exemplo abaixo:

SELECT CLIENTE.NOME, CIDADE.NOME FROM CLIENTE, CIDADE

Colunas resultantes; Tabelas utilizadas;

WHERE CIDADE.NOME LIKE Jaragu do Sul Compara coluna ao valor; AND Operador lgico E;

CLIENTE.COD_CIDADE = CIDADE.CODIGO; Faz a juno das tabelas;

1.2 Junes No exemplo, a clusula WHERE identifica uma restrio de coluna em CIDADE.NOME LIKE Jaragu do Sul e uma juno em CLIENTE.COD_CIDADE = CIDADE.CODIGO. A diferena est em que a restrio apenas seleciona registros que sejam compatveis com o valor Jaragu do Sul prefixado. J a juno varre as duas tabelas em busca de valores coincidentes, ou seja, somente mostra clientes que esto localizados em alguma cidade, pois caso algum cliente tenha sido cadastrado sem que o usurio informasse sua cidade, o mesmo no apareceria entre o resultado da consulta. As junes so extremamente utilizadas porque servem para aproveitar as chaves estrangeiras existentes nas tabelas. Sempre que houver a necessidade de utilizar dados (registros) provenientes de mais de uma tabela na mesma consulta utilizamos as junes. Lembrando que estas tabelas

devem ter algum tipo de relacionamento, mesmo que indireto. Veja um exemplo:

possvel fazer uma consulta relacionando os dados dos clientes cadastrados na tabela CLIENTE com dados dos produtos, para saber por exemplo, quais os produtos que foram consumidos por cada cliente. Vamos nos preocupar com as junes. Para facilitar nosso trabalho, vamos atribuir aliases (apelidos) a alguns campos e tabelas:

SELECT CLIENTE.NOME CNOME, PRODUTO.NOME PNOME FROM CLIENTE C, PRODUTO P, NFISCAL NF, NFISCAL_PRODUTO NFP;

Executando esta consulta, o resultado um cruzamento desordenado das informaes das duas tabelas. Cada produto que aparece na tabela PRODUTO mostrado com os nomes de todos os registros da tabela CLIENTE.

Para resolver esta situao, temos que aplicar trs restries na clusula WHERE. Estas restries so conhecidas como junes. A finalidade das junes a de utilizar as chaves primrias e estrangeiras das tabelas que sero acessadas pela consulta, como meio de ligao entre elas.

Veja o exemplo: SELECT CLIENTE.NOME CNOME, PRODUTO.NOME PNOME FROM CLIENTE C, PRODUTO P, NFISCAL NF, NFISCAL_PRODUTO NFP WHERE C.CODIGO = NF.CLIENTE_CODIGO -> Juno entre as tabelas Cliente e NFiscal AND NFP.NFISCAL_COD = NF.COD -> Juno entre as tabelas NFiscal_Produto e NFiscal AND P.COD = NFP.PRODUTO_COD; -> Juno entre as tabelas Produto e NFiscal_Produto

Cada vez que utilizamos mais de uma tabela no mesmo SELECT necessariamente precisamos utilizar junes. Cada juno liga duas tabelas. Quando a consulta a ser feita utilizar duas tabelas, precisamos definir uma juno. No caso de trs tabelas, duas junes, quatro tabelas, trs junes, e assim por diante.

Vamos pensar um pouco! Qual o significado do comando SELECT apresentado pelo exemplo? Vamos descrever o significado deste comando em Portugus? Faa uma descrio que represente o resultado do comando SQL de consulta ao banco de dados.

Você também pode gostar