Sunteți pe pagina 1din 5

Selecionando os registros de suas

tabelas.
O comando SELECT.
Provavelmente este ser o comando que mais voc utilizar em suas instrues SQL.
Na verdade cerca de 70 a 80 % de suas instrues SQL utilizaro o
comando SELECT.
Estaremos trabalhando com o banco de dados Access e a sintaxe que usaremos para
nossas instrues SQL ser a suportada pelo Access. Lembre-se que para as instrues
SQL atuarem necessrio que o arquivo esteja aberto. Iremos utilizar o banco de
dados Escola.mdb e as tabelas criadas no artigo - Criando Tabelas .
A instruo SELECT retornar um conjunto de registros , recordset, do
tipo Dynaset/Table.
Basicamente voc dever fornecer duas informaes bsicas:
1. Quais campos(colunas) da tabela deseja obter
2. O nome da Tabela da qual voc quer obter os dados.
Assim uma instruo SELECT para selecionar todos os registros da tabela - tblalunos poder ser escrita como:
SELECT * FROM tblalunos
-O asterico ( * ) o curinga para indicar todos os campos da tabela
-A clusula FROM indica de onde os dados sero extrados.
Para selecionar os campos nome e endereo da tabela tblalunos , faremos:
SELECT nome, endereco FROM tblalunos
- Os nomes dos campos e das tabelas podem ser indicados sem colchtes [] , quando
no existir espaos ou pontuao, e so separados por vrgulas.
Assim para uma tabela de nome Tabela Alunos com os campos : Nome
Aluno e Endereo Aluno seriamos obrigados a escrever:
SELECT [Nome Aluno], [Endereo Aluno] FROM [Tabela Alunos]
Nomeando e Criando Campos Calculados

Um campo calculado pode resultar de uma operao aritmtica sobre campos


numricos ou pode ser resultado de operaes de strings sobre campos textos. Para
campos numricos voc pode qualquer operador padro ( +,-,*,/,^) e para strings o
operador de concatenao ( & ), alm de poder usar as funes do Visual Basic .Ex:
UCASE$, MID$ , SQR ,
Vejamos um exemplo onde temos uma tabela chamada Produtos com os seguintes
campos: Produto,Nome , Preo e noutra tabela chamada Estoque os
campos: Produto, quantidade
Vamos extrair atravs de um comando SELECT o nome do produto, e o valor total em
estoque.
Note que no temos a informao valor total , para isto vamos criar um campo
calculado com o nome de Valor Total e esse campo ser resultante da multiplicao do
preo do produto pela quantidade do mesmo em estoque.
SELECT produtos.nome, [preo]*[quantidade] AS [valor total]
FROM estoque INNER JOIN produtos ON estoque.produto = produtos.produto;
Criamos o campo calculado [preo]*[quantidade] e o nomeamos como valor total.
A clusula AS define o nome desejado.
Outro exemplo seria a criao de um campo nome pela juno dos campos nome e
sobrenome de uma tabela clientes:
SELECT nome & ', ' & sobrenome AS nome FROM clientes
Se a clusula AS no for utilizada ser criado automaticamente um
nome Expr1001 para o primeiro campo , e assim por diante.
Usando a clusula WHERE para definir critrios.
Se voc precisar usar um determinado critrio para selecionar os dados pode utilizar a
clusula WHERE.
A sintaxe bsica a seguinte:
SELECT <nome dos campos> FROM <nome da tabela> WHERE <critrio>
Para extrair uma relao com o nome dos alunos da 1 srie, faremos:
SELECT nome FROM tblalunos WHERE serie="1"
Note que usamos o nmero entre aspas, pois o campo serie definido como do tipo
Texto, se fosse numrico teramos que escrever:
SELECT nome FROM tblalunos WHERE serie=1
Supondo que voc desse a opo ao usurio de informar a srie em uma caixa de
texto(Text1) , voc teria que escrever o seguinte:
sql="SELECT nome FROM tblalunos WHERE serie=' " & text1.text & " ' "

ou para o campo serie definido como tipo Numero.


sql="SELECT nome FROM tblalunos WHERE serie= " & text1.text
Observe que no usamos o nome da tabela na especificao dos campos pois o campo
esta presente na tabela de origem dos dados.
Cuidado quando for trabalhar com datas como critrio de seleo pois a data deve estar
entre os caracteres # ( cerquilha) e no formato mm/dd/yyyy.
Assim para selecionar os alunos que nasceram no dia 12 de agosto de 1986 12/08/1986 - devemos fazer:
sql = "Select nome FROM tblalunos WHERE nascimento= #8/12/1986#"
Dando a opo ao usurio de informa a data e usando um MaskeditBox(Maskdata)
para receber a informaco teremos:
sql="Select nome FROM tblalunos WHERE nascimento=" & "#" &
Format(maskdata, "mm/dd/yyyy") & "#"
Note que tivemos que mudar o formato da data para mm/dd/yyyy
Ateno !!! cuidado com o Apstrofo - Se tiver um apstrofo dentro de uma string de
pesquisa , para evitar problemas voc deve delimitar a string de pesquisa por aspas.
Assim para pesquisar o nomeMacdonald's voc de fazer assim:
sql="SELECT nome FROM tblempresas WHERE nome= " & " Macdolnad's"
Ordenando o resultado de sua Consulta - ORDER BY
Se quisermos ordernar o resultado de uma consulta podemos acrescentar a
clusula ORDER BY e o nome do campo pelo qual desejamos a ordenao. Por
padro ser retornado os dados na ordem crescente , se desejar na inverter a ordem use
a palavra chave DESC.
Assim para ordernarmos os alunos da 1 srie por nome e em ordem crescente faramos
assim:
sql="SELECT nome FROM tblalunos WHERE serie=' " & text1.text & " ' "
ORDER BY nome
para ordernar em ordem de teramos:
sql="SELECT nome FROM tblalunos WHERE serie=' " & text1.text & " ' "
ORDER BY nome DESC
Usando a clusula LIKE

As vezes os dados que voc est desejando filtrar no tm uma ocorrncia exata, ou
voc pretende realizar uma busca mais irrestrita. Para isso devemos usar a
clusula LIKE. Supondo que desejamos filtrar todos os alunos que tenham o nome
comeado pelas letrar Jos, Atravs da clusula LIKE podemos inserir as letras
desejadas e a SQL far uma busca parcial pela string informada: Algo como:
SELECT nome FROM tblalunos WHERE nome LIKE "Jos*"
Isto retornar os possveis nomes: Jos , Josu, Josimar, Josias, etc...
Note que usamos o asterstico (*) que funciona como um coringa , substituindo os
demais caracteres.
A seguir listamos abaixo as principais ocorrncias :
Tipo de ocorrncia Padro utilizado na Consulta SQL O retorno da Pesquisa
Mltiplos caracteres
b*b
bb, bBb, bccccB
Caractere especial
b[*]b
b*b
Mltiplos caracteres
ab*
abcdefg, abc
Caractere nico
b?b
bbb, b1b,bNb
Dgito nico
b#b
b0b,b1b,b4b
Intervalo de caracteres
[b-h]
c,d,e,f,g
No dgito
[!0-9]
A,a, %, P
Definindo o relacionamento entre as Tabelas: JOIN
Com frequncia voc vai ser obrigado a obter dados de diversas tabelas, pois
trabalhando com o modelo relacional de banco de dados , durante a normalizao os
dados sero colocados em tabelas diferentes para evitar a repetio de informaes.
Para selecionar campos de vrias tabelas , voc deve informar basicamente o seguinte:
O nome de cada tabela na qual cada campo selecionado
Os nomes dos campos dos quais voc est selecionando os dados
O relacionamento entre as tabelas
Assim, supondo que voc deseja obter o nome e a nota de cada aluno do banco de
dados Escola.mdb; se voc observar vai notar que no temos essas informaes em
uma mesma tabela. Os dados que desejamos encontram-se em duas
tabelas: Tblalunos ( o nome do aluno ) , TblNotas ( o codigo do curso e a nota)
A sintaxe para o comando SQL extrair esses dados(nome e nota, ordenados pelo nome
do aluno) :
SELECT tblalunos.nome, tblnotas.nota
FROM tblalunos INNER JOIN tblnotas ON tblalunos.codaluno =
tblnotas.codaluno ORDER BY tblalunos.nome;
Quando voc tm um vnculo entre duas tabelas poder usar a palavra chave INNER
JOIN na clusula FROM de uma instruo SELECT para criar um conjunto de
registros com campos de ambas as tabelas

Naturalmente quanto maior a quantidade de tabelas das quais voc deseja extrair os
seus dados mais complexa a instruo se tornar.
Assim, para obter o nome ,curso e a nota de cada aluno do banco de
dados Escola.mdb; agora os dados que desejamos encontram-se em trs
tabelas: Tblalunos ( o nome do aluno ) , TblNotas ( o codigo do curso e a nota)
e TblCursos.
SELECT tblalunos.nome, tblcursos.nomecurso, tblnotas.nota
FROM tblcursos INNER JOIN (tblalunos INNER JOIN tblnotas ON
tblalunos.codaluno = tblnotas.codaluno) ON tblcursos.codcurso =
tblnotas.codcurso
ORDER BY tblalunos.nome;
A diferena entre a utilizao da clusula WHERE e da JOIN para reunir dados de
mltiplas tabelas que a clusula WHERE produz um recordset somente de leitura.
Para criar um recordset atualizvel devemos usar JOIN
A sintaxe bsica para o JOIN :
tabela 1 [INNER | LEFT | RIGHT ] JOIN tabela 2 ON
tabela1.chave1=tabela2.chave2
Temos 3 opes de clusulas usadas com JOIN e, o comportamento na maneira de
retornar os registros difere em cada caso:
Tipos de
JOIN
INNER
LEFT
RIGHT

Registros da Tabela da Esquerda Registros da Tabela da Direita


Somente registros com um registro Somente registros com um registro
correspondente na tabela da direita correspondente na tabela da esquerda
Somente registros com um registro
Todos os Registros
correspondente na tabela da esquerda
Somente registros com um registro
Todos os Registros
correspondente na tabela da direita

S-ar putea să vă placă și