Pesquisar no Programero

quinta-feira, 21 de junho de 2012

O que devemos conhecer sobre SQL/Oracle Parte 5: Restringindo e ordenando dados

Limitando registros recuperados por uma consulta

Na grande maioria dos casos apenas listar as colunas desejadas de certa tabela não é o suficiente, é necessário restringir o resultado de acordo com regras para que esse resultado possa ter algum significado, isso é alcançado pela cláusula WHERE.
O WHERE não é obrigatório, mas quando usado no comando SELECT deve vir depois da cláusula FROM. Ele sempre testa todos os registros recuperados pela consulta, retornando aqueles que o satisfizerem.
Para realizar as comparações da cláusula WHERE temos o operador de igualdade “=”, maior que “>”, maior ou igual “>=”, menor que “<”, menor ou igual “<=”, diferente “<>“, “!=” ou “^=”, se pertence “IN” e se contém uma parte especifica “LIKE”. Comparações com números são logicas, onde números menores são menores que números maiores. Os caracteres respeitam a ordem do alfabeto, onde “A” é menor que “Z”, e “Z” é menor que “a” (letras maiúsculas são sempre menores), além disso, os caracteres “10” são considerados menores que “2”. Quanto as datas podemos dizer que “hoje” é sempre menor que “amanhã”, logo datas anteriores são menores que datas posteriores.
O operador de comparação “LIKE” é muito poderoso, ele faz uso de caracteres “coringa” que permitem restringir partes, como por exemplo, pode-se usar o underline “_” para indicar um caractere, seja ele qual for, ou a porcentagem “%”, que indica que a partir dali qualquer resultado satisfaz a comparação, veja um exemplo:

SELECT NOME FROM FUNCIONARIOS WHERE NOME LIKE ‘JO__’;

Na consulta acima utilizamos o underline, estamos fazendo uma comparação de tamanho fixo, procurando por nomes que possuem as duas primeiras letras “JO” e que tenham apenas mais dois caracteres “__”. Agora veja o próximo exemplo:

SELECT NOME FROM FUNCIONARIOS WHERE NOME LIKE ‘JO%’;

No exemplo acima a busca ocorre por nomes iniciando em “JO”, onde os próximos caracteres não importam. Suponhamos que na base dos exemplos acima nos temos dois funcionários, “JOÃO” e “JOANA”, o primeiro exemplo retornaria apenas “JOÃO”, enquanto o segundo retornaria ambos.
Com os operadores booleanos (“AND” e “OR”) é possível realizar a combinação de condições, lembrando que sua avaliação se da de acordo com as convenções matemáticas:

SELECT * FROM FUNCIONARIOS WHERE ID != 2 AND STATUS = ‘S’;

Outro operador Booleano é o “NOT”, que é negação de uma condição:

SELECT * FROM FUNCIONARIOS WHERE ID != 2 AND NOT STATUS = ‘S’;

É importante ter em mente a ordem de precedência das comparações, onde temos no topo o “NOT”, depois “AND” e por fim “OR”.
O “IN” é utilizado na comparação com grupos, pode ser usado com datas, números e caracteres, as expressões devem estar dentro de aspas simples, elas também devem ser do mesmo tipo em ambos os lados da comparação:

SELECT * FROM FUNCIONARIOS WHERE NOME IN (‘ANA’, ‘MARIA’, ‘MARTA’);

O BETWEEN é usado para verificar se um determinado valor esta dentro de um limite determinado:

SELECT * FROM FUNCIONARIOS WHERE SALARIO BETWEEN 1000 AND 5000;

Por fim temos os operadores para comparar os valores nulos, ou seja, para a falta de valor:

SELECT * FROM FUNCIONARIO WHERE TELEFONE IS NULL;

Resumindo:

  • A cláusula WHERE vem sempre depois da clausula FROM;
  • O WHERE identifica os registros que devem ser incluídos no comando SQL;
  • O WHERE é usado em SELECT, UPDATE e DELETE;
  • WHERE é uma clausula opcional;
  • A cláusula WHERE é composta por expressões;
  • Essas expressões podem conter nomes de colunas, valores literais. A clausula WHERE compara ambos os lados determinando se o resultado é TRUE ou FALSE;
  • Os operadores booleanos separam as comparações para criar validações complexas. Coletivamente o resultado final para cada registro da tabela será TRUE ou FALSE, se TRUE o registro é retornado;
  • Os operadores booleanos são AND, OR e NOT;
  • As regras de precedência dos operadores booleanos definem que o operador NOT seja avaliado primeiro, em seguida o AND e então o OR;
  • O uso de parênteses pode alterar as regras originais de precedência;
  • Quando comparando datas, datas recentes são consideradas menores que datas antigas, como por exemplo, janeiro é menor que dezembro do mesmo ano;
  • Quando comparando caracteres, a letra ‘a’ é menor que a letra ‘z’, letras maiúsculas são menores que letras minúsculas e a representação de ‘3’ é maior que a representação de ‘22’;
  • LIKE pode ser usado com “coringas”;
  • IN pode ser usado para comparar uma expressão com um conjunto de uma ou mais expressões;
  • BETWEEN é usado para comparar expressões que estejam dentro de um limite. Ele é “inclusivo”, ou seja, “BETWEEN 2 AND 3” incluirá os valores 2 e 3 nos limites;
  • Devem ser usados IS NULL ou IS NOT NULL quando for necessário testar se uma coluna possui valor NULL (ou não);


Ordenando registros recuperados por uma consulta

Além de selecionar e restringir o resultado dessa seleção, também é possível ordenar o resultado, seja de forma descendente ou ascendente (ASC, DESC). Para fazermos uso da cláusula ORDER BY, basta especificar o nome da coluna que desejamos utilizar para a ordenação, ou a posição da coluna na listagem do SELECT.
O ORDER BY é sempre a ultima cláusula do comando SELECT, nele é possível listar uma ou mais colunas, separadas por vírgulas, onde a cada quebra ocorre uma reordenação.
É possível na cláusula WHERE usar expressões, ou mesmo apelidos atribuídos a colunas, também é possível mesclar todas essas possibilidades descritas acima:

SELECT ID, (SALARIO*2) SAL, NOME FROM FUNCIONARIOS ORDER BY ID, SAL, 3;

Resumindo:

  • ORDER BY é uma clausula opcional para ordenar registros recuperados pelo comado SELECT;
  • Se usado, o ORDER BY é sempre a ultima clausula do comando SELECT;
  • O ORDER BY utiliza expressões para direcionar a ordenação do comando SELECT;
  • Cada expressão é avaliada na sequencia, o primeiro item do ORDER BY realizara a primeira ordenação, o segundo ordenará dentro dos grupos já ordenados pelo primeiro item e assim por diante;
  • É possível ordenar por colunas não listadas no SELECT;
  • O ORDER BY pode utilizar expressões de qualquer tipo, seguindo as mesmas regras de expressões vistas na clausula WHERE;
  • Dados numéricos por padrão são ordenados de forma ascendente, do menor para o maior;
  • Caracteres por padrão são ordenados de forma ascendente, de ‘A’ a ‘Z’;
  • Datas por padrão são ordenadas de forma ascendente, de datas anteriores a posteriores;
  • As ordenações podem ser alteradas para descendente com a palavra DESC;
  • O ORDER BY pode identificar colunas por seus nomes, apelidos e posição na lista SELECT;


Nenhum comentário:

Postar um comentário

Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.