Operadores do SQL |
O SQL possui cinco operadores especiais:
OPERADOR | SIGNIFICADO |
---|---|
BETWEEN
NOT BETWEEN |
Intervalo fechado compreendido entre os dois valores val1 e val2 |
IN (val1,val2,val3,val4)
NOT IN (val1,val2,val3,val4) |
Pertence à lista de valores val1, val2, val3, val4 |
LIKE
NOT LIKE |
Cadeia de caracteres que satisfaz a condição. Utilizar % e _ |
REGEXP_LIKE | Cadeia de caracteres que satisfaz uma expressão regular |
IS NULL
IS NOT NULL |
É um valor NULL |
BETWEEN
Permite pesquisar valores compreendidos entre um valor minimo e máximo (inclusivé). Utilizado na construção de condições, por exemplo para cláusula WHERE.
Ex: Listar empregados cujo salário está compreendido entre 1000 e 2000:
SELECT ename, sal FROM emp WHERE sal BETWEEN 1000 AND 2000; |
ENAME SAL ---------- --------- ALLEN 1600 WARD 1250 MARTIN 1250 TURNER 1500 ADAMS 1100 MILLER 1300 6 rows selected. |
Ex: Listar empregados cujo salário não está compreendido entre 1000 e 2000 (menor que 1000 ou maior que 2000):
SELECT ename, sal FROM emp WHERE sal NOT BETWEEN 1000 AND 2000; |
ENAME SAL ---------- --------- SMITH 800 JONES 2975 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 JAMES 950 FORD 3000 clark 3333 5CHARLES 5000 10 rows selected. |
IN (val1,val2,val3,val4)
Procura os valores numa lista especificada. Ex: encontrar todos os empregados que têm como chefe (MGR) o 7902, 7566 ou 7788:
SELECT empno, ename, sal, mgr FROM emp WHERE mgr IN (7902, 7566, 7788); |
EMPNO ENAME SAL MGR --------- ---------- --------- --------- 7369 SMITH 800 7902 7788 SCOTT 3000 7566 7876 ADAMS 1100 7788 7902 FORD 3000 7566 4 rows selected. |
Ex: Para encontrar todos os empregados que não têm como chefe (MGR) o 7902, 7566 ou 7788:
SELECT empno, ename, sal, mgr FROM emp WHERE mgr NOT IN (7902, 7566, 7788); |
EMPNO ENAME SAL MGR --------- ---------- --------- --------- 7499 ALLEN 1600 7698 7521 WARD 1250 7698 7566 JONES 2975 7839 7654 MARTIN 1250 7698 7698 BLAKE 2850 7839 7782 CLARK 2450 7839 7844 TURNER 1500 7698 7900 JAMES 950 7698 7934 MILLER 1300 7782 7799 clark 3333 5555 7798 5CHARLES 5000 5556 11 rows selected. |
LIKE
Quando não se conhece o valor exacto a procurar, mas temos uma ideia aproximada, podemos utilizar o operador LIKE. Permite seleccionar linhas que concordem com um dado padrão de caracteres. A cadeia de caracteres usada como padrão de pesquisa pode utilizar dois símbolos especiais:
SIMBOLO | REPRESENTA |
---|---|
% | Qualquer cadeia com nenhum ou vários caracteres |
_ | Um caracter qualquer |
Ex: listar todos os empregados cujo nome começa por 'S':
SELECT ename FROM emp WHERE ename LIKE 'S%'; |
ENAME ---------- SMITH SCOTT 2 rows selected. |
Ex: listar todos os empregados cujos nomes tenham exactamente 4 caracteres de dimensão:
SELECT ename FROM emp WHERE ename LIKE '____'; |
ENAME ---------- WARD KING FORD 3 rows selected. |
Ex: listar empregados cuja função não começa por um M:
SELECT ename, job FROM emp WHERE job NOT LIKE 'M%'; |
ENAME JOB ---------- --------- SMITH CLERK ALLEN SALESMAN WARD SALESMAN MARTIN SALESMAN SCOTT ANALYST KING PRESIDENT TURNER SALESMAN ADAMS CLERK JAMES CLERK FORD ANALYST MILLER CLERK 11 rows selected. |
SELECT ename, job FROM emp WHERE NOT job LIKE 'M%'; |
ENAME JOB ---------- --------- SMITH CLERK ALLEN SALESMAN WARD SALESMAN MARTIN SALESMAN SCOTT ANALYST KING PRESIDENT TURNER SALESMAN ADAMS CLERK JAMES CLERK FORD ANALYST MILLER CLERK 11 rows selected. |
REGEXP_LIKE
Permite pesquisar valores que satisfazem uma expressão regular. Estas têm desempenho mais lento que o LIKE, mas possuem uma sintaxe mais rica, que permite maior variedade na condição de pesquisa.
Máscara | Significado |
---|---|
^ | No inicio da string |
$ | No fim da string |
* | Zero ou mais ocorrências |
+ | Uma ou mais ocorrências |
. | Representa qualquer carater excepto NULL |
| | OR - permite introduzir um critério de pesquisa alternativo |
[] | Permite introduzir uma lista de caracteres que será usada como referência obrigatória na pesquisa |
[^] | Nega o caracter ou sequência que for escrita a seguir |
() | Usado para criar um grupo de alternativas |
{m} | Tem que existir "match" em m resultados. O número m é o valor máximo e minimo |
{n,m} | A linha aparece se houver n ou mais matchs, mas sempre sem exceder os m matches (n<=m) |
{n,} | A linha aparece se houver n ou mais matchs |
[A-Z] | Letras maiúsculas |
[a-z] | Letras minusculas |
Sites com exemplos de expressões regulares:
Neste exemplo procuramos linhas onde o valor da coluna first_name começa por S ("case sensitive"):
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^S'); |
A mesma pesquisa mas "case insensitive" (repare no terceiro argumento da função):
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^S', 'i'); |
First_name termina por s ("case sensitive"):
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, 'S$'); |
first_name começa por S e tem mais 5 carateres (6 no total)
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^S....'); |
O exemplo anterior não funciona se colocar-mos 3, pois como não existem ocorrências o SGBD lista todos os que começam por S. O próximo exemplo dá o mesmo resultado que o anterior, mas já funciona corretamente quando variamos para 3,4 ou 6 caracteres:
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^S[a-z]{5}$'); |
O mesmo que o exemplo anterior mas com pesquisa "case insensitive":
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^S[a-z]{5}$', 'i'); |
first_name começa por S,tem mais 5 carateres e o terceiro é "e"":
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^S.e...'); |
first_name começa por S, tem mais 5 carateres e o último carater é um ponto, que é um simbolo reservado e por isso tem que ser "scaped". Não temos linhas nestas condições:
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^S.....\.'); |
first_name não começa por "S". Os parentesis retos são usados como obrigatoriedade e o simbolo ^ funciona como negação:
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^[^S]'); |
first_name começa por "Ste" termina em "en" e no meio tem "v" ou "ph". Os parentesis curvos são usados para alternativas de valores:
SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$'); |
IS NULL
Utilizado para procurar valores NULL. Ex: Procurar todos os empregados que não têm chefe:
SELECT ename, mgr FROM emp WHERE mgr IS NULL; |
ENAME MGR ---------- --------- KING 1 row selected. |
Ex: procurar todos os empregados que têm chefe:
SELECT ename, mgr FROM emp WHERE mgr IS NOT NULL; |
ENAME MGR ---------- --------- SMITH 7902 ALLEN 7698 WARD 7698 JONES 7839 MARTIN 7698 BLAKE 7839 CLARK 7839 SCOTT 7566 TURNER 7698 ADAMS 7788 JAMES 7698 FORD 7566 MILLER 7782 clark 5555 5CHARLES 5556 15 rows selected. |
SELECT ename, comm FROM emp WHERE comm=NULL; |
no rows selected. |
SELECT ename, comm FROM emp WHERE comm!=NULL; |
no rows selected. |
Realizado por Turtle Learning ®. Última alteração em 2011-02-26