Você está na página 1de 5

1 CONSULTAS SQL - INTRODUÇÃO

As consultas SQL traduzem em "miúdos" àquilo que a aplicação deverá buscar no banco de dados

para gerar algum tipo de relatório. Nos casos mais comuns, existem consultas que deverão ser

realizadas por mais de um formulário ou relatório. Um exemplo comum é o que traz informações

específicas sobre uma mesma tabela em um banco de dados:

Consulta relação dos nomes e preços dos produtos por nome do produto.

SELECT NOME, PRECO FROM PRODUTO WHERE NOME LIKE 'REFRIGERANTE*';

O comando SELECT traduz a descrição acima, onde a consulta será realizada utilizando o campo

NOME em WHERE NOME LIKE

resultado será uma lista de NOMEs e PRECOs da tabela PRODUTO como descrito em SELECT

NOME, PRECO FROM PRODUTO

A definição de uma descrição detalhada facilita a utilização do comando SELECT, uma vez que a

definição ainda é a melhor forma de caracterizar o programa. Assim como o algoritmo em

programação, mecanismos como o Modelo E-R ou descrições sobre consultas são uma forma

simples de representar a seqüência estabelecida pelo problema, auxiliando na sua resolução.

O importante não é simplesmente o “saber fazer”, mas principalmente o “saber o quê fazer”.

Um exemplo constantemente utilizado em implementações é o de uma aplicação que utilize o

modelo E-R a seguir:

que será comparado com a string REFRIGERANTE e o

é o de uma aplicação que utilize o modelo E-R a seguir: que será comparado com

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 código do cliente;

Consulta nomes dos produtos mais vendidos no período (data);

Consulta nomes dos produtos e quantidade vendida por nome do quantidade vendida;

cliente, ordenando por

Consulta número de clientes por estado ou por cidade;

Consulta valor total vendido no período e por nome do cliente;

Consulta totais vendidos por cidade no período;

Consulta totais de descontos concedidos por nome do cliente;

Uma consulta NÃO poderia estar definida como:

Consulta clientes por estado;

-

Pois não se sabe quais informações sobre clientes são necessárias.

O

correto seria: Consulta nome do cliente por estado.

Consulta nome do cliente;

-

Pois não está definida qual informação será fornecida pelo usuário.

O

correto seria: Consulta nome do cliente por código 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, porém, o cuidado da interpretação adequada permite que o programador faça uso da lógica e implemente as soluções 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 serão 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 Variável: É o campo que será comparado com cada registro no banco de dados a fim de encontrar valores idênticos aos exigidos pelo usuário da aplicação.

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 lógico “E”;

CLIENTE.COD_CIDADE = CIDADE.CODIGO; Faz a junção das tabelas;

1.2 Junções

No exemplo, a cláusula WHERE identifica uma restrição de coluna em CIDADE.NOME LIKE „Jaraguá do Sul‟ e uma junção em CLIENTE.COD_CIDADE = CIDADE.CODIGO. A diferença está em que a restrição apenas seleciona registros que sejam compatíveis com o valor „Jaraguá do Sul‟ prefixado. Já a junção varre as duas tabelas em busca de valores coincidentes, ou seja, somente mostra clientes que estão localizados em alguma cidade, pois caso algum cliente tenha sido cadastrado sem que o usuário informasse sua cidade, o mesmo não apareceria entre o resultado da consulta.

As junções são 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 junções. Lembrando que estas tabelas

devem ter algum tipo de relacionamento, mesmo que indireto.

Veja um exemplo:

tipo de relacionamento, mesmo que indireto. Veja um exemplo: É possível fazer uma consulta relacionando os

É possível 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 junções. 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 informações das duas tabelas. Cada produto que aparece na tabela PRODUTO é mostrado com os nomes de todos os registros da tabela CLIENTE.

Para resolver esta situação, temos que aplicar três restrições na cláusula WHERE. Estas restrições são conhecidas como junções. A finalidade das junções é a de utilizar as chaves primárias e estrangeiras das tabelas que serão acessadas pela consulta, como meio de ligação 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 -> Junção entre as tabelas Cliente e NFiscal

AND

NFP.NFISCAL_COD = NF.COD -> Junção entre as tabelas NFiscal_Produto e NFiscal

AND

P.COD = NFP.PRODUTO_COD; -> Junção entre as tabelas Produto e NFiscal_Produto

Cada vez que utilizamos mais de uma tabela no mesmo SELECT necessariamente precisamos utilizar junções. Cada junção liga duas tabelas. Quando a consulta a ser feita utilizar duas tabelas, precisamos definir uma junção. No caso de três tabelas, duas junções, quatro tabelas, três junções, e assim por diante.

Vamos pensar um pouco!

Qual é o significado do comando SELECT apresentado pelo exemplo? Vamos descrever o significado deste comando em Português?

Faça uma descrição que represente o resultado do comando SQL de consulta ao banco de dados.