Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
http://www.macoratti.net/cursql4.htm
1 de 7
12/05/2016 20:46
http://www.macoratti.net/cursql4.htm
2 de 7
12/05/2016 20:46
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
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
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
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
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
INNER
LEFT
Todos os Registros
RIGHT
Todos os Registros
Retorna
7 de 7
12/05/2016 20:46