EDUCAÇÃO / TECNOLOGIA / UTILIDADE PÚBLICA

Filtrar dados: between, like e IN em sql server, access e mysql

Conheça as condições Between, In, Not In, like e not like, usadas para criar filtros em consultas com a linguagem SQL e aplicável a diversos bancos de dados

Filtrar dados com between, like e IN em consultas a banco de dados é uma prática comum e suportada pelos principais bancos de dados, como o SQL Server, Access, Mysql, Oracle e outros. Filtros são extramente úteis para dar performance às consultas, aliviando possíveis sobrecargas no banco de dados.

[QUEBRA]

A condição Between

Use a condição Between para retornar linhas baseadas em uma faixa de valores. Muito proprício para campos do tipo numérico ou data.

Como exemplo poderemos efetuar uma consulta para retornar o salário dos empregados que ganham entre 1000 e 5000 ou uma consulta por todos os prédios tombados entre o ano 2000 e 2005.

Veja um exemplo abaixo:

SELECT nome, data_nascimento, cidade, estado
FROM empregados
WHERE data_nascimento between '01/01/1975' and '12/13/1985'

No exemplo as linhas retornadas tem a data de nascimento do empregado entre 01 de janeiro de 1975 e 13 de dezembro de 1985. (observe que a comparação de data deve ser feita no formato americano).

Outro exemplo pode ser feito com valores numéricos e aplicado a um campo do tipo int, decimal ou outro numérico.

SELECT nome, data_nascimento, cidade, estado
FROM empregados
WHERE salario between 1500 and 2000

No exemplo acima será mostrado os registros cujos salários estiverem entre 1500 e 2000, inclusive.

Alem da coluna do tipo data é possível também usar o between em uma coluna numérica.

A condição IN e Not IN

Use a condição IN para retornar linhas cujos valores atendem a uma determinada lista ou a NOT IN para os valores que não atendem a lista.

Entenda por lista valores separados por vírgulas, exemplo: 1,2,3,4 ou 'um','dois','tres'.

Esta condição poderia efetuar uma imobiliária encontrar por exemplo, todos os imóveis alugados nas cidades de São Paulo, Rio de Janeiro e Belo Horizonte ou todos os prédios comerciais de luxo disponíveis nos bairros do Broklin, Morumbi e Vila Olimpia.

Veja um exemplo abaixo:

SELECT código_empregado, nome, data_nascimento, cidade
FROM empregados
WHERE codigo_empregado in(3,7,9,11,14);

Neste exemplo as linhas retornadas tem o valor da coluna código_empregado igual a 3,7,9,11 e 14.

Outra possibilidade é usar valores do tipo String ca cadeia do IN, veja um exemplo abaixo:

SELECT código_empregado, nome, data_nascimento, cidade
FROM empregados
WHERE estado in('SP','MG','RJ','ES');

Se trocarmos a condição IN por NOT IN, teremos o resultado inverso.

SELECT código_empregado, nome, data_nascimento, cidade
FROM empregados
WHERE codigo_empregado not in(3,7,9,11,14)

 

A condição Like e Not Like

Use a condição LIKE para executar pesquisas curingas.

O caracter curinga %(porcentagem) deve ser usado para substituir um caracter ou grupo de caracteres, não importando a sua natureza.

Esta condição é muito usada na internet para fazer as buscas tradicionais, como no caso dos sites de busca (google, yahoo, MSN, etc).

SELECT codigo_empregado, nome, data_nascimento, cidade
FROM empregados
WHERE nome Like '%Maria%'

Neste exemplo foi mostrado as linhas cujo nome tinha a sequencia de caracteres Maria.

Há duas outras possibilidades com este mesmo exemplo. Veja:

SELECT codigo_empregado, nome, data_nascimento, cidade
FROM empregados
WHERE nome Like 'Maria%'

No exemplo acima ele mostraria os registros cujos nomes iniciam por Maria.

SELECT codigo_empregado, nome, data_nascimento, cidade
FROM empregados
WHERE nome Like '%Maria'

No exemplo acima é o inverso, ou seja, ele mostraria os registros cujos nomes terminam por Maria.

Agora veja o mesmo exemplo com o not like.

SELECT codigo_empregado, nome, data_nascimento, cidade
FROM empregados
WHERE nome Not Like '%MA%'

Neste caso será mostrado todas as linhas, exceto as que tiverem MA no nome.

OBS: O Access as vezes trata de forma diferentes os caracteres curingas nestas consultas, mas funciona normalmente em Sql Server e MySQL.

 

Veja também

Comentários

Parabéns... Muito bom!!! Adorei! Obrigado. Juliana // XXXXX
Gostariade saber como faço para: Tendo duas tabelas A e B; Da tabela A no campo NOME quero buscar na tabela B esse nome, usando o LIKE ou algo que permita eu pesquisar por partes. Como faço? Obrigado Paulo Ladislau // Votuporanga
Olá! Parabéns pelo seu Blog. Eu gostaria de saber como pesquisar um código no access através de uma consulta baseada num controle não acoplado de um formulário, ignorando os zeros à esquerda, na hora de digitar, mas que os zeros apareçam normalmente no resultado. Ex: código:000501 digitar só:501. Obrigado!!! Izair // Curitiba
Salvou meu dia!!!! Agora consigo fazer prova , pq a minha professora naum explica nada!!! Gabi // Belo Horizonte
valeu... bom!! Róger // Lajeado
Amigo, parabéns pelo blog e o artigo ficou muito interessante! Porém fiquei com uma dúvida... como faço pra fazer vários WHEREs em uma consulta? (vai ser um formulário de "busca avançada" com os campos CIDADE, CAPACIDADE, VALOR). estou programando em PHP e o bd é MySQL. se puder me ajudar, agradeço muito! muito obrigado! Sol Beltrame // Curitiba
gostaria de saber o seguinte.. tenho uma tabela com varias datas .... sendo que farei uma consulta assim: entre dia 01/02/2010 e 10/02/2010 ... mas quero os registros que não estejam nesse periodo. Between MAS DOS REGISTROS QUE ELE NÃO ENCONTRAR ... OU SEJA SE FOR DIFERENTE QUE ESTA DATA ELE MOSTRA. vinicius // ilheus
Valeu pelas explicações amigo... parabéns!!!!!!!! Nilson // Manaus
Presciso de uma SQL que informe para mim os dados entre datas informadas pelo usuario porem se a data inicial não existir no banco ela ira pegar a data anterior.Alguem pode me ajudar me dando um exemplo de alguma consulta urgente por favor até hoje á tarde!!! Alison // Belo Horizonte
Boas e se quiser utilizar o in e o like juntos? Tipo tenho uma tabela com vários registos um deles são séries que tem um numero inicial e outro final de incremento, por ex. 12012.00$1$10 - $10 inicio do processo e 12012.00$1$60 - $60 é o fim do processo eu quero um query que retorne todos os registos das séries que já tenham terminado. Complicado? luis // braga
© 2008-2017 | LUIS.BLOG.BR | Política de Privacidade | Em Jesus Cristo eu confio