Consultas de seleção

As consultas de seleção se utilizam para indicar ao motor de dados que devolva a informação dos bancos de dados, esta informação é devolvida em forma de conjunto de registros que podem se armazenar em um objeto recordset.

Por Claudio


Publicado em: 06/9/07
Valorize este artigo:
Este conjunto de registros pode ser modificável.

Consultas básicas

A sintaxe básica de uma consulta de seleção é a seguinte:

SELECT
   Campos
FROM
   Tabela


Onde "campos" é a lista de campos que se deseja recuperar e "tabela" é a origem dos mesmos, por exemplo:

SELECT
   Nombre, Telefone
FROM
   Clientes


Esta sentença devolve um conjunto de resultados com o campo nome e telefone da tabela clientes.

Devolver Literais

Em determinadas ocasiões pode nos interessar incluir uma coluna com um texto fixo em uma consulta de seleção, por exemplo, suponhamos que temos uma tabela de empregados e desejamos recuperar as tarifas semanais dos eletricistas, poderíamos realizar a seguinte consulta:

SELECT
   Empregados.Nome, 'Tarifa semanal: ', Empregados.TarifaHora * 40
FROM
   Empregados
WHERE
   Empleados.Cargo = 'Eletricista'


Ordenar los registros

Adicionalmente pode se especificar a ordem em que se deseja recuperar os registros das tabelas mediante a cláusula ORDER BY Lista de Campos. Em onde Lista de campos representa os campos a ordenar. Exemplo:

SELECT
   CodigoPostal, Nome, Telefone
FROM
   Clientes
ORDER BY
   Nome


Esta consulta devolve os campos CodigoPostal, Nome, Telefone da tabela Clientes ordenados pelo campo Nome.

Pode-se ordenar os registros por mais de um campo, como por exemplo:

SELECT
   CodigoPostal, Nome, Telefone
FROM
   Clientes
ORDER BY
   CodigoPostal, Nome


Inclusive pode-se especificar a ordem dos registros: ascendente mediante a cláusula (ASC - toma-se este valor padrão) ou descendente (DESC)

SELECT
   CodigoPostal, Nome, Telefone
FROM
   Clientes
ORDER BY
   CodigoPostal DESC , Nome ASC


Uso de Índices das tabelas

Se desejarmos que a sentença SQL utilize um índice para mostrar os resultados se pode utilizar a palavra reservada INDEX da seguinte forma:

SELECT ... FROM Tabela (INDEX=Indice) ...

Normalmente os motores dos bancos de dados decidem que índice se deve utilizar para a consulta, para isso utilizam critérios de rendimento e sobretudo, os campos de busca especificados na cláusula WHERE. Se se deseja forçar a não utilizar nenhum índice utilizaremos a seguinte sintaxe:

SELECT ... FROM Tabela (INDEX=0) ...

Consultas com Predicado

O predicado se inclui entre a cláusula e o primeiro nome do campo a recuperar, os possíveis predicados são:

Predicado Descrição
ALL Devolve todos os campos da tabela
TOP Devolve um determinado número de registros da tabela
DISTINCT Omite os registros cujos campos selecionados coincidam totalmente
DISTINCTOW Omite os registros duplicados baseando-se na totalidade do registro e não só nos campos selecionados.

ALL

Se não se inclui nenhum dos predicados se assume ALL. O Motor de banco de dados seleciona todos os registros que cumprem as condições da instrução SQL e devolve todos e cada um de seus campos. Não é conveniente abusar deste predicado já que obrigamos ao motor do banco de dados a analisar a estrutura da tabela para averiguar os campos que contém, é muito mais rápido indicar a lista de campos desejados.

SELECT ALL
FROM
   Empregados

SELECT *
FROM
   Empregados


TOP

Devolve um certo número de registros que entram entre ao princípio ou ao final de uma categoria especificada por uma cláusula ORDER BY. Suponhamos que queremos recuperar os nomes dos 25 primeiros estudantes do curso 1994:

SELECT TOP 25
   Nome, Sobrenome
FROM
   Estudantes
ORDER BY
   Nota DESC


Se não se inclui a cláusula ORDER BY, a consulta devolverá um conjunto arbitrário de 25 registros da tabela de Estudantes. O predicado TOP não escolhe entre valores iguais. No exemplo anterior, se a nota média número 25 e a 26 são iguais, a consulta devolverá 26 registros. Pode-se utilizar a palavra reservada PERCENT para devolver uma certa porcentagem de registros que caem ao princípio ou ao final de uma categoria especificada pela cláusula ORDER BY. Suponhamos que no lugar dos 25 primeiros estudantes desejamos o 10 por cento do curso:

SELECT TOP 10 PERCENT
   Nome, Sobrenome
FROM
   Estudantes
ORDER BY
   Nota DESC


O valor que vai a seguir de TOP deve ser um inteiro sem signo. TOP não afeta à possível atualização da consulta.

DISTINCT

Omite os registros que contém dados duplicados nos campos selecionados. Para que os valores de cada campo listado na instrução SELECT se incluam na consulta devem ser únicos. Por exemplo, vários empregados listados na tabela Empregados podem ter o mesmo sobrenome. Se dois registros contém Lopez no campo Sobrenome, a seguinte instrução SQL devolve um único registro:

SELECT DISTINCT
   Sobrenome
FROM
   Empregados


Com outras palavras o predicado DISTINCT devolve aqueles registros cujos campos indicados na cláusula SELECT possuam um conteúdo diferente. O resultado de uma consulta que utiliza DISTINCT não é atualizável e não reflete as mudanças subseqüentes realizadas por outros usuários.

DISTINCTROW

Este predicado não é compatível com ANSI. Que eu saiba no dia de hoje só funciona com ACCESS.

Devolve os registros diferentes de uma tabela; a diferença do predicado anterior que só se fixava no conteúdo dos campos selecionados, este o faz no conteúdo do registro completo independentemente dos campos indicados na cláusula SELECT.

SELECT DISTINCTROW
   Sobrenome
FROM Empregados


Se a tabela empregados contém dois registros: Antonio Lopez e Marta Lopez o exemplo do predicado DISTINCT devolve um único registro com o valor Lopez no campo Sobrenome já que busca não duplicados em tal campo. Este último exemplo devolve dois registros com o valor Lopez no sobrenome já que se buscam não duplicados no registro completo.

ALIAS

Em determinadas circunstâncias é necessário atribuir um nome a alguma coluna determinada de um conjunto devolvido, outras vezes por simples capricho ou porque estamos recuperando dados de diferentes tabelas e acabam tendo um campo com igual nome. Para resolver todas elas, temos a palavra reservada AS que se encarrega de atribuir o nome que desejamos à coluna desejada. Tomado como referência o exemplo anterior podemos fazer a coluna devolvida pela consulta, ao invés de se chamar sobrenome (assim como o campo devolvido) se chame Empregado. Neste caso procederíamos da seguinte forma:

SELECT DISTINCTROW
   Sobrenome AS Empregado
FROM Empregados

AS não é uma palavra reservada de ANSI, existem diferentes sistemas de atribuir os alias em função do motor de banco de dados. Em ORACLE para atribuir um alias a um campo há que fazer da seguinte forma:

SELECT
   Sobrenome AS "Empregado"
FROM Empregados


Também podemos atribuir alias às tabelas dentro da consulta de seleção, neste caso há que ter em conta que em todas as referências que desejarmos fazer a tal tabela há que utilizar o alias ao invés do nome. Esta técnica será de grande utilidade mais adiante quando se estudarem as vinculações entre tabelas. Por exemplo:

SELECT
   Apellido AS Empregado
FROM
   Empregados AS Trabalhadores


Para atribuir alias às tabelas em ORACLE e SQL-SERVER os alias se atribuem escrevendo o nome da tabela, deixando um espaço em branco e escrevendo o Alias (se atribuem dentro da cláusula FROM).

SELECT
   Trabalhadores.Sobrenome (1) AS Empregado
FROM
   Empregadore Trabalhadores


(1)Esta nomenclatura [Tabela].[Campo] deve-se utilizar quando se está recuperando um campo cujo nome se repete em várias das tabelas que se utilizam na sentença. Não obstante quando na sentença se empregam várias tabelas é aconselhável utilizar esta nomenclatura para evitar o trabalho que supõem ao motor de dados averiguar em que tabela está cada um dos campos indicados na cláusula SELECT.

Recuperar Informação de um banco de Dados Externo

Para concluir este capítulo se deve fazer referência à recuperação de registros de banco de dados externos. Em ocasiões é necessário a recuperação de informação que se encontra contida em uma tabela que não se encontra no banco de dados que executará a consulta ou que nesse momento não se encontra aberta, esta situação podemos salva-la com a palavra reservada IN da seguinte forma:

SELECT
   Sobrenome AS Empregado
FROM
   Empleados IN'c: \databases\gerenciamento.mdb'


Em onde c: \databases\gerenciamento.mdb é o banco de dados que contém a tabela Empregados. Esta técnica é muito simples e comum em banco de dados do tipo ACCESS em outros sistemas como SQL-SERVER ou ORACLE, a cosa é mais complicada por ter que existir relações de confiança entre os servidores ou ao ser necessária a vinculação entre os banco de dados. Este exemplo recupera a informação de um banco de dados de SQL-SERVER localizado em outro servidor (obviamente que os servidores estão linkados):

SELECT
   Sobrenome
FROM
   Servidor1.BancoDados1.dbo.Empregados





Comentários do artigo
Foi enviado 1 comentário ao artigo
1 comentário não revisado
0 comentários revisados

Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato