Marcelo Hely Restrigindo e Classificando Dados 26/8/2010 1 Durante a recuperação de dados do BD, pode ser necessário restringir as linhas de dados exibidas ou especificar a ordem de exibição dessas linhas. SELECT * | { coluna/expressão [apelido] } FROM tabela WHERE condição ; A cláusula WHERE segue a cláusula FROM. 26/8/2010 2 É possível restringir linhas retornadas da consulta utilizando a cláusula WHERE. Uma cláusula WHERE contém uma condição que deve ser atendida. Se a condição for verdadeira, a linha que atender à condição será retornada. 26/8/2010 3 WHERE - restringe a consulta às linhas que atendem a uma condição. Ela consiste de três elementos: Nome da coluna Condição de comparação Nome da coluna, constante ou lista de valores Condição - é composta de nomes de colunas, expressões, constantes e um operador de comparação. 26/8/2010 4 SELECT empno, ename, job, deptno FROM emp WHERE deptno = 10 26/8/2010 5 SELECT ename, job, deptno FROM emp WHERE ename = „King‟ 26/8/2010 6 As strings de caracteres e valores de data devem aparecer entre aspas simples. Os valores de caracteres fazem distinção entre maiúsculas e minúsculas e os valores de data fazem distinção entre formatos. O formato de data default é: Dia-Mês-Ano 26/8/2010 7 São utilizados em condições que comparam uma expressão a outro valor ou expressão. Operador = (igual a) > ( maior que) >= (maior que ou igual a) < (menor que) <= (menor que ou igual a) <> (diferente de), também pode ser != ou ^= 26/8/2010 8 SELECT ename, sal FROM emp WHERE sal <= 3000 Observe que há um valor explícito fornecido para a cláusula WHERE. O valor de 3000 é comparado ao valor do salário na coluna sal da tabela emp. 26/8/2010 9 Operador ◦ BETWEEN ...AND.. (entre dois valores) inclusive. ◦ IN (corresponde qualquer valor de uma lista) ◦ LIKE (corresponde um padrão de caractere) ◦ IS NULL (é um valor nulo) 26/8/2010 10 Use a condição BETWEEN para exibir linhas baseadas em uma faixa de valores. SELECT ename, sal FROM emp WHERE sal BETWEEN 2500 AND 3500 A faixa que vc especificar terá um limite inferior e outro superior. Os valores especificados devem ser inclusivos. 26/8/2010 11 Use a condição de associação IN para testar valores em uma lista. SELECT empno, ename, sal, mgr FROM emp WHERE mgr IN (7566, 7782, 7902) A condição IN pode ser usada com qualquer tipo de dados. 26/8/2010 12 SELECT empno, mgr, deptno FROM emp WHERE ename IN („SCOTT‟, „MILLER‟) Se forem utilizados caracteres ou datas na lista, eles devem estar entre aspas simples. 26/8/2010 13 Use a condição LIKE para executar pesquisas curingas de valores válidos de string de pesquisa. As condições de pesquisa podem conter caracteres literais ou números: % - Representa zero ou muitos caracteres _ - Representa qualquer caractere. 26/8/2010 14 SELECT ename, hiredate FROM emp WHERE hiredate LIKE „%81‟ 26/8/2010 15 SELECT ename FROM emp WHERE ename LIKE 'S%‟ 26/8/2010 16 Pode-se utilizar para combinar caracteres de correspondência de padrão SELECT ename FROM emp WHERE ename LIKE ‟_O%‟ 26/8/2010 17 Teste para valores nulos com o operador IS NULL SELECT ename, mgr FROM emp WHERE mgr IS NULL 26/8/2010 18 As condições NULL incluem a condição IS NULL e a condição IS NOT NULL SELECT ename, job, comm FROM emp WHERE comm IS NOT NULL 26/8/2010 19 Operador ◦ AND ( Retorna TRUE se ambas as condições de componentes forem verdadeiras). ◦ OR (Retorna TRUE se uma das condições de componente for verdadeira). ◦ NOT (Retorna TRUE se a condição seguinte for falsa). 26/8/2010 20 AND exige que ambas as condições sejam verdadeiras. SELECT empno, ename, job, sal FROM emp WHERE sal >=1000 AND job LIKE „%MAN%‟ 26/8/2010 21 OR exige que uma das condições seja verdadeira. SELECT empno, ename, job, sal FROM emp WHERE sal >=1000 OR job LIKE „%MAN%‟ 26/8/2010 22 SELECT ename, job FROM emp WHERE job NOT IN („ANALYST‟, „CLERK‟); O operador NOT também pode ser utilizado com outros operadores SQL, como : BETWEEN, LIKE e NULL. 26/8/2010 23 SELECT ename, job, sal FROM emp WHERE job = „SALESMAN‟ OR job = „PRESIDENT‟ AND sal > 1500 26/8/2010 24 SELECT ename, job, sal FROM emp WHERE (job = „SALESMAN‟ OR job = „PRESIDENT‟) AND sal > 1500 26/8/2010 25 Classifique linhas com a cláusula ORDER BY ◦ ASC : ordem crescente (default) ◦ DESC : ordem decrescente SELECT ename, job, deptno, hiredate FROM emp ORDER BY hiredate 26/8/2010 26 Ordenação de Dados default é crescente ◦ Os valores numéricos são exibidos primeiro com os valores mais baixos. ◦ Os valores de datas são exibidos primeiro os mais antigos. ◦ Os valores de caracteres são exibidos em ordem alfabética 26/8/2010 27 Para reverter a ordem de exibição das linhas, especifique a palavra-chave DESC após o nome da coluna na cláusula ORDER BY SELECT ename, job, deptno, hiredate FROM emp ORDER BY hiredate DESC 26/8/2010 28 Pode-se utilizar um apelido de coluna na cláusula ORDER BY SELECT empno, ename, sal*12 “SALARIO ANUAL” FROM emp ORDER BY “SALARIO ANUAL” 26/8/2010 29 Pode-se classificar os resultados da consulta por mais de uma coluna. O limite de classificação é nº de colunas de uma determinada tabela. Pode-se classificar por uma coluna que não esteja na lista SELECT. SELECT ename, deptno, sal FROM emp ORDER BY deptno, sal DESC 26/8/2010 30