Vamos dar uns toques em queries SQL? III

19 Comentários

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:

sql_00

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:

sql_01

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

sql_02

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'

Resultado:
sql_03

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:
sql_04
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')

Resultado:
sql_05

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.

Partilhar:
Tags:

Comentários

19

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Anão do Milhafre

    Muito bom post! Continua assim! 😀

  2. Avatar de João Dias

    Também gostei imenso do tutorial, desconhecia de algumas queries que foram aqui mostradas.

  3. Avatar de tb
    tb

    No ex. 3 poderias usar tb “between” 😉

    1. Avatar de Pedro Gaspar
      Pedro Gaspar

      correcto 🙂

    2. Avatar de Queirós
      Queirós

      Between seria mais apropriado para BD temporais e nao neste caso.

      1. Avatar de Queirós
        Queirós

        esqecam o que escrevi..loool

  4. Avatar de Vitor
    Vitor

    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?

    1. Avatar de Pedro Gaspar
      Pedro Gaspar

      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”
      🙂

      1. Avatar de pfbatista
        pfbatista

        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

  5. Avatar de Paraoh
    Paraoh

    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.

    1. Avatar de Pedro Gaspar
      Pedro Gaspar

      sim, tens razão, e de muito mais facil compreenção tudo identado, no proximo vou ter em atenção isso 🙂

  6. Avatar de Jesus
    Jesus

    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.

    1. Avatar de lmx
      lmx

      boas…
      a data e formato depende de como crias-te o atributo dessa coluna na tabela…

      cmops

  7. Avatar de JPedrosa
    JPedrosa

    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)

  8. Avatar de Marcio
    Marcio

    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

    1. Avatar de pfbatista
      pfbatista

      exacto… deve-se fazer, por exemplo, um UPPER aos dois campos para se poder compara-los dessa forma

  9. Avatar de Caetano
    Caetano

    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.

    1. Avatar de lmx
      lmx

      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

    2. Avatar de Emerson Luiz
      Emerson Luiz

      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