A linguagem SQL disp�e de diversos operadores e cl�usulas que nos permitem estruturar as consultas de acordo com nossa necessidade, a fim de obter o resultado esperado. Conhecer esses operadores � fundamental para que se possa construir as queries adequadamente e, comm isso, extrair do banco os dados necess�rios em cada situa��o.

Saiba mais sobre linguagem SQL

Neste artigo aprenderemos a trabalhar com os operadores LIKE IN e BETWEEN no Oracle, um dos principais sistemas gerenciadores de bancos de dados em uso atualmente.

Saiba mais sobre Oracle com o nosso Guia de Refer�ncia

Para os exemplos que veremos aqui, utilizaremos uma tabela chamada PESSOA, a qual deve conter alguns registros que nos permitam efetuar diferentes consultas. A Listagem 1 mostra o script necess�rio para criar essa tabela.

Listagem 1 Criando a tabela PESSOA

            CREATE TABLE PESSOA
            (
             id_pessoa integer constraint id_pessoa_PK primary key,
             nome varchar2(20),
             cpf varchar2(14),
             nascimento date
            );
        

Em seguida, precisamos incluir alguns registros, o que pode ser feito utilizando o script da Listagem 2.

Listagem 2. Inserindo dados para teste na tabela PESSOA

            INSERT INTO PESSOA VALUES (1,"Luis da Silva","11109865424","20-06-1994");
            INSERT INTO PESSOA VALUES (2,"Maria Joaquina","87604465334","20-07-1981");
            INSERT INTO PESSOA VALUES (3,"Jos� da Silva","54279835424","08-03-1999");
            INSERT INTO PESSOA VALUES (4,"Jo�o Henrique","283835424","28-08-1981");
            INSERT INTO PESSOA VALUES (5,"Eli�zio Mesquita","1087865424","28-02-1985");
            INSERT INTO PESSOA VALUES (6,"Gustavo Souza","7464465334","17-12-1995");
            INSERT INTO PESSOA VALUES (7,"Wesley Yamazack","54329835424","12-10-1997");
            INSERT INTO PESSOA VALUES (8,"Edson Arantes","90874465334","02-04-2005");
            INSERT INTO PESSOA VALUES (9,"Silvio Santos","54279835424","17-07-1955");
            INSERT INTO PESSOA VALUES (10,"Zico Galinho","654838724","15-11-2011");
            INSERT INTO PESSOA VALUES (11,"Ir� Almeida","1087865424","07-09-2000");
            INSERT INTO PESSOA VALUES (12,"Lula da Silva","798465334","25-05-1974");
            INSERT INTO PESSOA VALUES (13,"Dilma Russef","12329655424","03-01-1965");
            COMMIT;
        

Saiba mais sobre operadores no Oracle

Operador Like

O operador LIKE � utilizado para buscar por uma determinada string dentro de um campo com valores textuais. Com ele podemos, por exemplo, buscar os registros cujo NOME inicia com uma determinada palavra, ou cont�m um certo texto.

Para efetuar esse tipo de consulta, podemos utilizar tamb�m o caractere % para indicar um "coringa", ou seja, um texto qualquer que pode aparecer no campo. Sua sintaxe padr�o � a seguinte:


                SELECT colunas FROM tabela WHERE campo LIKE "valor"
            

Nessa instru��o, o "valor" pode ser informado de v�rias formas:

  • texto: Nesse caso, ser�o retornados todos os registros que cont�m no campo buscado exatamente o "texto" informado no filtro. O funcionamento aqui � equivalente a utilizar o operador de igualdade (=);
  • %texto%: Ser�o retornados os registros que cont�m no campo buscado o "texto" informado. Por exemplo, podemos buscar os nomes que cont�m "Santos", ou que cont�m uma s�laba ou letra espec�fica. O registro com nome "Luis da Silva", por exemplo, cont�m o termo "da", ent�o atenderia ao filtro "%da%";
  • %texto: Ser�o retornados os registros cujo valor do campo filtrado termina com o "texto" informado. O %, nesse caso, indica que pode haver qualquer valor no come�o do campo, desde que ele termine com o "texto". Por exemplo, o registro com nome "Luis da Silva" atenderia ao filtro "%Silva";
  • texto%: Ser�o retornados os registros cujo valor do campo filtrado come�a com o "texto" informado. Dessa vez, o % indica que ap�s o "texto" pode haver qualquer valor. Por exemplo, o registro com nome "Luis da Silva", atenderia ao filtro "Luis%"

Considerando nossa tabela de exemplo, se executarmos a seguinte consulta, teremos como resultado os registros que aparecem na Figura 1:


                SELECT * FROM PESSOA WHERE Nome LIKE "J%";
            
Utilizando o operador LIKE com percentual
Figura 1. Utilizando o operador LIKE com percentual

Al�m do %, existe ainda o s�mbolo especial underscore ou sublinhado (_), com o qual podemos efetuar filtros mais exatos sobre as colunas textuais, buscando por um termo em uma posi��o espec�fica do texto. O underscore indica a quantidade de casas/caracteres antes ou depois do texto buscado. A seguir temos alguns exemplos de uso para que possamos compreender sua sintaxe:

  • "_este": Filtra os registros que cont�m 1 caractere qualquer no come�o e em seguida o termo "este". Por exemplo, seriam retornados registros contendo o valor "teste", "peste", "veste";
  • "b_m": Filtra os registros que comecem com a letra "b", contenham 1 caractere em seguida, e depois a letra "m". Nesse caso, atenderiam a esse filtro, por exemplo, os valores "bom", "bem", "bPm", etc.
  • "_u%": Filtra os registros cujo campo especificado comece com um caractere qualquer, em seguida contenha uma letra "u", e depois qualquer valor. Por exemplo, os valores "Luis da Silva" e "Gustavo" atenderiam a esse filtro.

O seguinte script pode ser executado sobre nossa tabela para que possamos visualizar o funcionamento do underscore na pr�tica. O resultado ser� o que vemos na Figura 2.


                Select * from Pessoa Where Nome LIKE "_u%";
            
Utilizando o operador LIKE com underscore e percentual
Figura 2. Utilizando o operador LIKE com underscore e percentual

Operador IN

O operador IN � utilizado quando desejamos consultar uma tabela, filtrando o valor de um de seus campos a partir de uma lista e possibilidades. Enquanto o operador de compara��o de igualdade (=) avalia se os dois valores s�o iguais, o IN permite verificar se o valor de um campo se encontra em uma lista. Sua sintaxe � a seguinte:


                    SELECT campos FROM tabela WHERE campo IN (valor1, valor2, valor3);
                

Para testarmos esse operador com a tabela que criamos, podemos executar a seguinte consulta e teremos como resultado os registros que vemos na Figura 3.


                SELECT * FROM Pessoa WHERE Id_Pessoa IN (2, 3, 7);
            
Utilizando o operador IN
Figura 3. Utilizando o operador IN

Nesse caso, filtramos apenas os registros que possuem o Id_Pessoa igual a 2, 3, ou 7.