Você está na página 1de 7

Selecionando registros de suas Tabelas

http://www.macoratti.net/cursql4.htm

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:

1 de 7

12/05/2016 20:46

Selecionando registros de suas Tabelas

http://www.macoratti.net/cursql4.htm

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 dene 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

2 de 7

12/05/2016 20:46

Selecionando registros de suas Tabelas

http://www.macoratti.net/cursql4.htm

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 denir 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 denido 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 denido como tipo Numero.
sql="SELECT nome FROM tblalunos WHERE serie= " & text1.text
Observe que no usamos o nome da tabela na especicao 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.
3 de 7

12/05/2016 20:46

Selecionando registros de suas Tabelas

http://www.macoratti.net/cursql4.htm

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 nome Macdonald'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

4 de 7

12/05/2016 20:46

Selecionando registros de suas Tabelas

http://www.macoratti.net/cursql4.htm

As vezes os dados que voc est desejando ltrar no tm uma ocorrncia exata, ou voc pretende realizar uma
busca mais irrestrita. Para isso devemos usar a clusula LIKE. Supondo que desejamos ltrar 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
Denindo 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

5 de 7

12/05/2016 20:46

Selecionando registros de suas Tabelas

http://www.macoratti.net/cursql4.htm

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

6 de 7

12/05/2016 20:46

Selecionando registros de suas Tabelas

http://www.macoratti.net/cursql4.htm

Temos 3 opes de clusulas usadas com JOIN e, o comportamento na maneira de retornar os registros difere em
cada caso:
Tipos de
JOIN

Registros da Tabela da Esquerda

Registros da Tabela da Direita

INNER

Somente registros com um registro


correspondente na tabela da direita

LEFT

Todos os Registros

Somente registros com um registro correspondente


na tabela da esquerda
Somente registros com um registro correspondente
na tabela da esquerda

RIGHT

Somente registros com um registro


correspondente na tabela da direita

Todos os Registros

Retorna

7 de 7

12/05/2016 20:46