Vamos dar uns toques em queries SQL? III
Por Pedro Gaspar para o PPLWARE Depois da semana passada o Pedro Pinto ter iniciado a clausula WHERE, esta semana vamos aprofundar um pouco mais utilizando o AND e o OR. Tal como o nome diz o AND (e) e o OR (ou) são operações lógicas e com estas operações podemos especificar mais os resultados que pretendemos obter inserindo varias clausulas numa só query. Vamos a alguns exemplos:
A utilização do AND ou OR deve seguir a seguinte sintaxe de utilização:
Sintaxe de utilização
SELECT nome_coluna(s) FROM nome_tabela WHERE nome_coluna operador valores [AND/OR] nome_coluna operador valores |
Para apresentar alguns exemplos, utilizei a tabela tbl_pplware (com algumas alterações desde a semana passada) com os seguintes dados:
Vamos a alguns exemplos práticos:
EXEMPLO 1
Objectivo: Apresentar o nome e o numero de telefone, das pessoas que tiverem numero fixo (em portugal começa por 2) "E" que tiverem o cabelo castanho
Query:
SELECT nome, telefone FROM `tbl_ppware` WHERE cor_cabelo = 'castanho' AND telefone LIKE '2%' |
Resultado
EXEMPLO 2
Objectivo: Apresentar o nome e a cor de cabelo das pessoas que tiverem o cor de cabelo louro ou preto
Query:
SELECT nome, cor_cabelo FROM `tbl_ppware` WHERE cor_cabelo = 'louro' OR cor_cabelo = 'preto' |
EXEMPLO 3 Objectivo: Apresentar nome e Ano de Nascimento das pessoas que nasceram na década de 70
Query:
SELECT nome, nascimento FROM `tbl_ppware` WHERE nascimento >= 1970 AND nascimento < 1980 |
Resultado: Tal como acontece nos cálculos matemáticos também no SQL podemos utilizar parênteses para dar prioridade a certas operações, ora vejamos..
EXEMPLO 4 (Para complicar um pouquinho)
Objectivo: Apresentar nome, telefone e morada das pessoas que tenham numero de telefone fixo e que se chamem ‘pedro’ ou vivam no Porto.
Query:
SELECT nome, telefone, morada FROM `tbl_ppware` WHERE telefone BETWEEN 200000000 AND 299999999 AND (nome LIKE 'pedro%' OR morada = 'porto') |
Espero que tenham compreendido o funcionamento do AND e do OR em queries. Qualquer questão não hesitem em deixar nos comentários pois terei todo o gosto em responder. Visto que linguagem SQL não é absoluta e permite-nos chegar ao mesmo resultado numa infinidade de maneiras diferentes, convidamos como os exemplos anteriores a criarem queries similares.
Este artigo tem mais de um ano
Muito bom post! Continua assim! 😀
Também gostei imenso do tutorial, desconhecia de algumas queries que foram aqui mostradas.
No ex. 3 poderias usar tb “between” 😉
correcto 🙂
Between seria mais apropriado para BD temporais e nao neste caso.
esqecam o que escrevi..loool
Semana passada alguém comentou algo a respeito de que não devemos utilizar o “like”. O que deveríamos utilizar então? e como?
Boas Vitor, em strings não tens muito por onde fugir do like..
Agora falando em numeros (por exemplo valores inteiros) podes e deves evitar, pois o like e uma operação um pouco pesada…
Por exemplo nos nrs de telefone fixos.. sabes que têm 9 digitos e que começam por 2 (em portugal claro) a melhor forma seria usar o between: “BETWEEN 200000000 AND 299999999”
🙂
Claro… mas isso só funciona se o tipo de campo for numérico.
Normalmente, numa BD, como o numero de telefone pode ser um numero estrangeiro é necessário coloca-lo como texto, já que torna-se obrigatório guardar o indicativo de país (claro que é necessário criar uma máscara de validação no form, etc, etc, etc…) o between deixa de fazer sentido..
É óbvio que o Like deve ser omitido… quando possível… mas em queries complexas torna-se praticamente impossível omiti-lo na totalidade.
Uma forma de acelerar e não se notar a utilização do Like, deve-se ter uma BD bem configurada (as diversas chaves) e deve-se igualmente ter criado os vários indices, nos campos normalmente utilizados para filtros… isto ajuda e optimiza muito as queries a BD
Bom artigo! No entanto penso que o cógido poderia estar melhor apresentado. Tal como em linguagens de programação temos estilos de indentação, seria bom usar também em MySQL
O exemplo 3 ficaria assim:
SELECT nome, nascimento
FROM `tbl_ppware`
WHERE nascimento >= 1970 AND nascimento < 1980
Penso que é muito mais fácil de ler, pois identificasse o que está a ser selecionado, de quais tabelas, e quais as condições em causa.
sim, tens razão, e de muito mais facil compreenção tudo identado, no proximo vou ter em atenção isso 🙂
Muito bom. Em alternativa ao BETween temos os operadores >=,,< …
Podia haver um exemplo com datas, que esta semana me chateou deveras, é que em buscas com SQL com datas é usada a notação inglesa mm/dd/yyyy.
Podia haver uma articulação com os artigos em PHP e javascript, os envolvidos poderiam falar uns com os outros e organizavam-se de maneira a que um artigo php terminava num exemplo sql, que seria desenvolvido num destes artigos, e o retorno nos resultados poderia ser feito em outro artigo de javascript.
A continuar com a iniciativa.
boas…
a data e formato depende de como crias-te o atributo dessa coluna na tabela…
cmops
Boa iniciativa.
Talvez fosse importante mostrar como se organiza o query quando temos um “or” mas mais de duas condições.
ex: where (x > 0 or y < 20) and x 0 or (y < 20 and x < y)
Bom artigo.
Acho que devias realçar alguns aspectos nos exemplos.
Assim sugiro fazer referência ao campo ‘ nascimento ‘ que deverá ser int para que seja possível comparar numeros como no ex.
De referir ainda que no ultimo exemplo, o LIKE ‘pedro%’ poderá
ser null se for case sensitive.
Abraço
exacto… deve-se fazer, por exemplo, um UPPER aos dois campos para se poder compara-los dessa forma
Perdoem a minha ignorância.
Já percebi que o SQL trata dados e pode servir para o que procuro. Mas, qual é a aplicação que corre isto?
Possuo um ficheiro em excel no qual tenho os dados, contudo, este é apenas usado num posto. Eu quero um programa que esteja em rede e que seja possível efectuar alterações em vários postos ao mesmo tempo.
Obrigado amigos.
boas..
nesse caso cria uma base de dados e importa os dados da tua excel sheet, e cria uma aplicação para correr em todos os clientes e pronto…
as aplicações que correm o sql…?!o sql é uma linguagem estructurada de pesquisa.O que te vai fazer a pesquisa são os motores de pesquisa que existem nas bases de dados(é um conjunto de software).
tens muitas opções desde Mysql,M$ sql,…..
também podes criar em Base(openofice ou libreofice), isto deve sobrar para o que queres.
cmps
Caetano,
Você está precisando de um sistema web, que utilize um banco de dados.
Desta forma você terá suas informações disponiveis 24 horas, para você acessar. E ainda uma fácil integração com as outras filiais de seus postos.
Emerson-Brasil/Santos