SQL - Selecionandos dados com SQL


Fico impressionado com a quantidade de consultas postadas em fóruns com dúvidas básicas a respeito da linguagem SQL . Não que eu seja um expert em SQL , longe disto , mas eu creio que a linguagem é muito intuitiva e que reservando algum tempo para dar uma olhada nos comandos principais em pouco tempo temos uma visão geral do funcionamento da linguagem. 

O SQL usado pelo Visual Basic com arquivos Access tem recursos para selecionar , atualizar , excluir , editar , criar tabelas , índices , chave primárias fazer agrupamentos , gerar registros oriundos de diversas tabelas dentre outros recursos. Já deu para sentir que é importante saber onde você esta pisando ao usar o SQL para aplicações com acesso a dados no VB.

Neste artigo vou mostrar um roteiro básico sobre SQL voltada para o Microsoft Jet SQL ( o SQL suportado pelo Access). A sintaxe da SQL é determinada por um comitê que é parte do ANSI. O motor do Microsoft Jet DataBase  utiliza SQL ANSI (ANSI SQL-89) com algumas pequenas diferenças de implementação. Tenha em mente que nem todos os comandos que você usa na SQL do Jet irão funcionar com outros banco de dados relacionais.

Para testar as instruções SQL usadas neste artigo eu vou usar o aplicativo Visdata  e o banco de dados Biblio.mdb ambos vem junto com o VB5/6 .

Nota :  Vou utilizar os comandos SQL em caixa alta , embora o VB não se importe se o comandos estão em caixa alta ou baixa.

SQL - O Básico

O comando mais simples do SQL é selecionar dados de uma tabela do banco de dados: SELECT / FROM

Este comando possui duas partes :

  1. Uma lista de uma ou mais colunas das tabelas a selecionar

  2. Uma lista de um ou mais tabelas que contém as colunas requisitadas

Ex: :    SELECT Au_Id , Author FROM Authors

A instrução SQL acima irá selecionar(SELECT) as colunas Au_Id , Author da tabela(FROM)  Authors

Nota: A sintaxe padrão SQL usa a palavra coluna para descrever o campo e linha para descrever um registro.

É claro que você deve conhecer a estrutura da tabela para nomear as colunas corretamente.

Para Selecionar todos os registros da tabela Authors podemos usar o asterisco (*) ao invés de informar a relação de colunas separadas por vírgula. Teremos:

SELECT * FROM Authors

Digite esta instrução na janela SQL Statement do Visdata e clique em Execute. Você verá a relação de todos as colunas da tabela exibidas conforme abaixo:

A cláusual ORDER BY

Para exibir os registros em ordem usamos a cláusula ORDER BY

Colocando as palavras chaves ASC e DESC depois de cada coluna estamos indicando a ordem na qual você quer ordenar a coluna .

ASC indica ordem ascendente (do menor para o maior) e DESC indica ordem descendente.

Ex: SELECT * FROM Authors ORDER BY Author ASC

Abaixo temos o resultado desta seleção onde a ordenação é feita pelo campo Author na ordem ascendente (ASC)

Nota : você pode combinar em uma mesma instrução SQL a ordenação usando ASC e DESC.

Ex: SELECT * FROM Authors ORDER BY Au_Id DESC, Author ASC

A clásusula WHERE

Usamos a cláusula WHERE para controlar o resultado obtido pelo comando SELECT. Existem duas maneiras duas maneiras de fazer isto:

Quando for selecionar e exibir registros de dados de um tabela usando SELECT , SEMPRE use a cláusula WHERE. Você faz isto definindo um critério para filtrar os dados da retornados: WHERE coluna = critério

SELECT Name , State  FROM Publishers  WHERE state = 'CA'

A instrução SQL selecione as colunas Name e State da tabela Publishers do banco de dados Biblio.mdb.

A cláusula WHERE acima filtra os dados retornados pelo comando SELECT e retorna somente os registros cuja coluna state for igual a CA.

Perceba que a palavra CA esta entre aspas simples pois é uma string

Se a coluna requerer como critério um valor numérico não há necessidade de envolver o critério por aspas simples;

A instrução SQL para selecionar somente registros da tabela Publishers cuja coluna PubID for menor que 10 será :

SELECT PubId, Name , State  FROM Publishers  WHERE PubId  < 10

Podemos também usar mais de um critério na instrução SQL , assim :

SELECT PubId, Name , State  FROM Publishers  WHERE PubId  < 10 AND state= 'CA'

Além do operador AND você também pode usar o operador OR  e ainda pode usar também os operadores de comparação : = , <> , < , > , >= , <=.

Se a coluna for do tipo Date devemos usar a cerquilha(#) entre o valor de data do critério.

Ex: criterio = #12/09/1957#

Além disto o VB suporta a utilização da cláusula BETWEEN / AND na cláusula WHERE. Vejamos um exemplo:

SELECT PubId, Name , State , City FROM Publishers WHERE PubId BETWEEN 10 AND 15

O resultado será a seleção das colunas indicadas quando a coluna PubId estiver entre 10 e 15 conforme abaixo:

A palavra IN também pode ser usada para ser usada como critério contra uma lista de opções. Veja :

SELECT PubId, Name , State , City FROM Publishers WHERE State IN ('NY' , 'CA' , 'RI')

seleciona as colunas da tabela Publishers quando a coluna State coincidir com um dos seguintes valores : 'NY' , 'CA' . Iremos obter :

Outro recurso interessante é a função LIKE que pode ser usado com WHERE . Ela retorna todas as linhas cujo conteúdo das colunas  for igual ao literal passado na função.

SELECT PubId, Name , State FROM Publishers WHERE State LIKE ('B%')

O comando acima exibe todas as colunas indicadas da tabela Publishers onde a coluna state for iniciada com a letra B.

Nota: Você deve usar o caractere % ao invés do asterístico (*).

Resumo das exigências da sintaxe contidas nas instruções SQL

Elemento Contém Exemplos Quando usar
Dados Numéricos Nenhum    
Dados de texto(Strings) Aspas simples(') ou duplas(") 'macoratti' ou "SP"  Sempre
Dados de datas cerquilha(#) #12/09/2004#  Sempre
Nomes de campos Colchetes([]) [Nome],[Ano Final] Quando o nome do campo tiver espaços
Nome de tabelas Colchetes([]) [Detalhes Pedido] Quando o nome do campo tiver espaços

DICA-Como toda a instrução SQL vem entre aspas duplas(") , os dados de texto no interior da instrução SQL requerem aspas simples(')
Ex:  sql = "SELECT [nome] , [cidade], [cep] FROM Clientes WHERE [UF] = 'SP' "

Se o texto contido possuir aspas simples(') você deverá incluir aspas duplas. Ex:

sql = "SELECT [nome] , [cidade], [cep] FROM Clientes WHERE [Nome] = ""Joe's King""

E eu vou ficando por aqui, em breve retornarei ao assunto...  


José Carlos Macoratti