Olá DBA! Hoje vou mostrar todas as variações do operador LIKE
. Ele ajuda muito no dia a dia para localizar registros com padrões específicos. Para os exemplos, usei a tabela EMP com os dados abaixo:
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------- ---------- ---------- ----------
8000 ESCAPE_TST SALES_MAN 05-DEC-2024 2000 40
7369 SMITH CLERK 7902 17-DEC-1980 800 20
7499 ALLEN SALESMAN 7698 20-FEB-1981 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-1981 1250 500 30
7566 JONES MANAGER 7839 02-APR-1981 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-1981 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-1981 2850 30
7782 CLARK MANAGER 7839 09-JUN-1981 2450 10
7788 SCOTT ANALYST 7566 09-DEC-1982 3000 20
7839 KING PRESIDENT 17-NOV-1981 5000 10
7844 TURNER SALESMAN 7698 08-SEP-1981 1500 0 30
7876 ADAMS CLERK 7788 12-JAN-1983 1100 20
7900 JAMES CLERK 7698 03-DEC-1981 950 30
7902 FORD ANALYST 7566 03-DEC-1981 3000 20
7934 MILLER CLERK 7782 23-JAN-1982 1300 10
15 rows selected.
SQL>
1. Usar % (Qualquer sequência de caracteres)
Localizar cargos (JOB) que começam com “S”:
SQL>
SELECT ENAME, JOB
FROM EMP
WHERE JOB LIKE 'S%';
ENAME JOB
---------- ---------
ESCAPE_TST SALES_MAN
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
TURNER SALESMAN
5 rows selected.
SQL>
2. Usar _
(Um único caractere)
Buscar cargos com exatamente 7 caracteres:
SQL>
SELECT ENAME, JOB
FROM EMP
WHERE JOB LIKE '_______';
ENAME JOB
---------- ---------
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
SCOTT ANALYST
FORD ANALYST
5 rows selected.
SQL>
3. Combinar padrões com %
e _
Localizar cargos que comecem com “S”, tenham pelo menos dois caracteres após o “S” e contenham “A” em qualquer posição posterior:
SQL>
SELECT ENAME, JOB
FROM EMP
WHERE JOB LIKE 'S%__A%';
ENAME JOB
---------- ---------
ESCAPE_TST SALES_MAN
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
TURNER SALESMAN
5 rows selected.
SQL>
4. Escapar caracteres reservados (ESCAPE)
Buscar nomes (ENAME) que contêm “E_T”:
SQL>
SELECT ENAME, JOB
FROM EMP
WHERE ENAME LIKE '%E\_T%' ESCAPE '\';
ENAME JOB
---------- ---------
ESCAPE_TST SALES_MAN
1 row selected.
SQL>
5. Combinar múltiplas condições com OR
Buscar funcionários cujo nome começa com “S” ou cargo começa com “M”:
SQL>
SELECT ENAME, JOB
FROM EMP
WHERE ENAME LIKE 'S%' OR JOB LIKE 'M%';
ENAME JOB
---------- ---------
SMITH CLERK
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
SCOTT ANALYST
5 rows selected.
SQL>
6. Combinar múltiplas condições com AND
Localizar funcionários nome começa com “A” e cargo termina com “MAN”:
SQL>
SELECT ENAME, JOB
FROM EMP
WHERE ENAME LIKE 'A%' AND JOB LIKE '%MAN';
ENAME JOB
---------- ---------
ALLEN SALESMAN
1 row selected.
SQL>
7. Usar NOT LIKE para exclusões
Localizar funcionários cujo nome não começa com “S” e o cargo não termina com “MAN”:
SQL>
SELECT ENAME, JOB
FROM EMP
WHERE ENAME NOT LIKE 'S%'
AND JOB NOT LIKE '%MAN';
ENAME JOB
---------- ---------
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
KING PRESIDENT
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK
8 rows selected.
SQL>
Resumo LIKE
Curinga/Conceito | Descrição | Exemplo | Resultado |
---|---|---|---|
% | Qualquer sequência de caracteres. | JOB LIKE 'S%' | Localiza cargos que começam com “S”. |
_ | Um único caractere. | JOB LIKE '_______' | Localiza cargos com exatamente 7 caracteres. |
Combinação % e _ | Combina diferentes padrões. | JOB LIKE 'S%__A%' | Localiza cargos começando com “S” e contendo “A” depois. |
ESCAPE | Trata caracteres reservados como texto. | ENAME LIKE '%E\_T%' ESCAPE '\' | Localiza nomes que contêm “E_T”. |
OR | Combina condições alternativas. | ENAME LIKE 'S%' OR JOB LIKE 'M%' | Localiza nomes que começam com “S” ou cargos com “M”. |
AND | Combina condições simultaneamente. | ENAME LIKE 'A%' AND JOB LIKE '%MAN' | Localiza nomes que começam com “A” e cargos terminando com “MAN”. |
NOT LIKE | Exclui valores que atendem ao padrão. | ENAME NOT LIKE 'S%' AND JOB NOT LIKE '%MAN' | Exclui nomes que começam com “S” e cargos terminando com “MAN”. |
Operador LIKE Oracle Documentation
🫨🤑#20241205 #DBASobrinho #GuinaNãoTinhaDó #BóBó #CaceteDeAgulha #OracleACE #CaiuA8EuMatoAPar #CriançaReclamaAdultoResolve #TocouACampainhaPlin🫨🤑