Tuesday 8 October 2024

O objetivo do comando SELECT é pesquisar dados dentro do DB2. Ele especifica o formato de uma tabela para conter o resultado da pesquisa e outros parâmetros para definir o processo de pesquisa.

Para seleção de todas os campos (ou colunas) da tabela de Departamentos.

          SELECT    *    FROM    DEPT;

O exemplo utiliza o coringa "*" para selecionar as colunas na ordem em que foram criadas. A instrução Select, como pudemos observar seleciona um grupo de registros de uma (ou mais) tabela(s). No caso a instrução From nos indica a necessidade de pesquisarmos tais dados apenas na tabela Dept.

Where como base das Restrição de tuplas.

A cláusula "where" corresponde ao operador restrição da álgebra relacional. Contém a condição que as tuplas devem obedecer a fim de serem listadas. Ela pode comparar valores em colunas, literais, expressões aritméticas

ou funções.

Operadores lógicos

       operador                    significado
          =                        igual a
          >                        maior que
          >=                       maior que ou igual a
          <                        menor que
          <=                       menor que ou igual a

Exemplos:

      SELECT    EMPNOME, EMPSERV
                FROM    EMP
                WHERE    DEPNUME > 10;

      SELECT    EMPNOME, EMPSERV
                FROM    EMP
                WHERE EMPSERV = 'GERENTE';

 

O conjunto de caracteres ou datas devem estar entre apóstrofes (‘)    na cláusula "where".

 

Para selecionar todos os departamentos cujo orçamento mensal seja maior que 100000. Apresente o Nome de tal departamento e seu orçamento anual, que será obtido multiplicando-se o orçamento mensal por 12.

Neste problema precisamos de uma expressão que é a combinação de um ou mais valores, operadores ou funções que resultarão em um valor. Esta expressão poderá conter nomes de colunas, valores numéricos, constantes e operadores aritméticos.

              SELECT    DEPNOME,    DEPORCA * 12
                        FROM    DEPT
                        WHERE DEPORCA > 100000;

Apresentando a instrução anterior porém ao invés dos "feios" DepNome e DepOrca, os Títulos Departamento e Orçamento.

Neste exemplo deveremos denominar colunas por apelidos. Os nomes das colunas mostradas por uma consulta, são geralmente os nomes existentes no Dicionário de Dado, porém geralmente estão armazenados na forma do mais puro "informatiquês", onde "todo mundo" sabe que CliCodi significa Código do Cliente. É possível    (e provável) que o usuário desconheça estes símbolos, portanto devemos os apresentar dando apelidos às colunas "contaminadas" pelo informatiquês, que apesar de fundamental para os analistas, somente são vistos como enigmas para os usuários.

    SELECT    DEPNOME "DEPARTAMENTO", DEPORCA * 12 "ORCAMENTO ANUAL"
              FROM    DEPT
              WHERE DEPORCA > 100000;

 Para apresentar todos os salários existentes na empresa, porém omita eventuais duplicidades.

A cláusula Distinct elimina duplicidades, significando que somente relações distintas serão apresentadas como resultado de uma pesquisa.

    SELECT DISTINCT EMPSERV
              FROM EMP;

Para apresentar todos os dados dos empregados, considerando sua existência física diferente de sua existência lógica (ou seja devidamente inicializado).

Desejamos um tratamento diferenciado para valores nulos. Qualquer coluna de uma tupla que não contenha informações é denominada de nula, portanto informação não existente. Isto não é o mesmo que "zero", pois zero é um número como outro qualquer, enquanto que um valor nulo utiliza um "byte" de armazenagem interna e são tratados de forma diferenciada pelo SQL.

    SELECT    EMPNOME, EMPSALA + EMPCOMI
              FROM EMP;

    SELECT    EMPNOME, NVL(EMPSALA,0) + NVL(EMPCOMI,0)
              FROM EMP;

 Obs: a função "NVL" é utilizada para converter valores nulos em zeros.

 

ORDER BY (Ordenação)

Para apresentar os nomes e funções da cada funcionário contidos na tabela empresa, porém classificados alfabeticamente (A..Z) e depois alfabeticamente invertido (Z..A).

A cláusula Order By modificará a ordem de apresentação do resultado da pesquisa (ascendente ou descendente).

    SELECT    EMPNOME, EMPSERV
              FROM    EMP
              ORDER    BY    EMPNOME;

    SELECT    EMPNOME, EMPSERV
              FROM    EMP
              ORDER    BY    EMPPNOME    DESC;

Nota: Também é possível fazer com que o resultado da pesquisa venha classificado por várias colunas. Sem a claúsula "order by" as linhas serão exibidas na sequência que o SGBD determinar.

Para selecionar os Nomes dos Departamentos que estejam na fábrica.

      SELECT DEPNOME
                FROM DEPT
                WHERE DEPLOCA = "SAO PAULO";

O exemplo exigiu uma restrição (São Paulo) que nos obrigou a utilizar da instrução Where.

 

Demais Operadores

Operador                             Significado
between    ...    and ...            entre dois valores ( inclusive )
in ( .... )                          lista de valores
like                                 com um padrão de caracteres
is null                              é um valor nulo

Exemplos:

      SELECT    EMPNOME, EMPSALA
              FROM    EMP
                WHERE    EMPSALA BETWEEN    500    AND    1000;

      SELECT    EMPNOME,    DEPNUME
                FROM    EMP
                WHERE    DEPNUME    IN    (10,30);

      SELECT    EMPNOME, EMPSERV
                FROM    EMP
                WHERE      EMPNOME    LIKE    'F%';

      SELECT EMPNOME, EMPSERV
                FROM    EMP
                WHERE    EMPCOMI    IS    NULL;

 

O símbolo "%" pode ser usado para construir a pesquisa ("%" = qualquer sequência de nenhum até vários caracteres).

 

Operadores Negativos

operador                 descrição
<> diferente
not nome_coluna =        diferente da coluna
not nome_coluna > não maior que
not between não entre dois valores informados
not in não existente numa dada lista de valores
not like diferente do padrão de caracteres informado
is not null não é um valor nulo

 

Para selecionar os Empregados cujos salários sejam menores que 1000 ou maiores que 3500.

Necessitaremos aqui a utilização de expressão negativas. A seguir apresentamos operadores negativos.

      SELECT EMPNOME,    EMPSALA
                FROM    EMP
                WHERE    EMPSALA    NOT    BETWEEN    1000    AND    3500;

                                                    

Para apresentar todos os funcionários com salários entre 200 e 700 e que sejam Vendedores.

Necessitaremos de consultas com condições múltiplas.

 

Operadores    "AND" (E) e    "OR" (OU).

    SELECT EMPNOME, EMPSALA, EMPSERV
              FROM    EMP
              WHERE    EMPSALA    BETWEEN    700 AND 2000
                AND    EMPSERV =    'VENDEDOR';

 

Para apresentar todos os funcionários com salários entre 200 e 700 ou que sejam Vendedores.

      SELECT EMPNOME, EMPSALA, EMPSERV
                FROM    EMP
                WHERE EMPSALA    BETWEEN    700 AND 2000
                   OR    EMPSERV =    'VENDEDOR';

 

Para apresentar todos os funcionários com salários entre 200 e 700 e que sejam Vendedores ou  Balconistas.

      SELECT EMPNOME, EMPSALA, EMPSERV
                FROM    EMP
                WHERE    EMPSALA    BETWEEN    700 AND 2000
                              AND ( EMPSERV =    'BALCONISTA' OR    EMPSERV =    'VENDEDOR' );

 

Funções de Caracteres

Lower - força caracteres maiúsculos aparecerem em minúsculos.

Upper - força caracteres minúsculos aparecerem em maiúsculos.

Concat(x,y)- concatena a string "x" com a string "y".

Substring(x,y,str)- extrai um substring da string "str", começando em "x", e termina em "y".

To_Char(num)- converte um valor numérico para    uma string de caracteres.

To_Date(char,fmt)- converte uma string caracter em uma data.

^Q - converte data para o formato apresentado.

                                                                                                                                  

Para apresentar o nome de todos os empregados em letras minúsculas.

      SELECT LOWER( EMPNOME )
                FROM EMP;

                                                                                                                                  

Para apresentar o nome de todos os empregados (somente as 10 primeiras letras).

      SELECT    SUBSTRING (1,10,EMPNOME)
                FROM EMP;

 

Para apresentar o nome de todos os empregados admitidos em 01/01/80.

            SELECT    *
                      FROM    EMP
                      WHERE    EMPADMI =    ^Q"DD-AAA-YYYY"("01-JAN-1980");

ou
          SELECT    *
                      FROM    EMP
                      WHERE    EMPADMI =    ^Q("01-JAN-1980");

 

Funções Agregadas (ou de Agrupamento)

função                    retorno
avg(n) média do valor n, ignorando nulos
count(expr) vezes que o número da expr avalia para algo nao nulo
max(expr) maior valor da expr
min(expr) menor valor da expr
sum(n) soma dos valores de n, ignorando nulos

 

Para apresentar a Média, o Maior, o Menor e também a Somatória dos Salários pagos aos empregados.

          SELECT    AVG(EMPSALA)    FROM    EMP;

          SELECT    MIN(EMPSALA)    FROM    EMP;

          SELECT    MAX(EMPSALA)    FROM EMP;

          SELECT    SUM(EMPSALA) FROM    EMP;