Selecionando Dados da Tabela

Observação: Para concluir os tutoriais e exemplos nesta seção, você deve estar conectado ao Oracle Database como o usuário HR do SQL Developer. Para obter instruções, consulte "Estabelecendo Conexão com o Oracle Database como HR do Usuário do SQL Developer".

Sobre Consultas

Uma consulta, ou instrução SQL SELECT, seleciona dados de uma ou mais tabelas ou views.

A forma mais simples de consulta tem a seguinte sintaxe:

SELECT select_list FROM source_list

O valor select_list especifica as colunas das quais os dados devem ser selecionados, e o valor source_list especifica as tabelas ou views que têm essas colunas.

Uma consulta aninhada dentro de outra instrução SQL é chamada de subconsulta.

No ambiente SQL*Plus, você pode informar uma consulta (ou qualquer outra instrução SQL) após o prompt SQL>.

No ambiente do SQL Developer, você pode inserir uma consulta (ou qualquer outra instrução SQL) na Planilha.

Observação: Quando o resultado de uma consulta é exibido, os registros podem ser em qualquer ordem, a menos que você especifique sua ordem com a cláusula ORDER BY. Para obter mais informações, consulte "Ordenando Dados Selecionados".

Consulte também:

Executando Consultas no SQL Developer

Esta seção explica como executar consultas no SQL Developer, usando a Planilha.

Observação: A Planilha não se limita a consultas; você pode usá-la para executar qualquer instrução SQL.

Etapas para executar consultas no SQL Developer:

  1. Se o quadro direito do SQL Developer mostrar o painel hr_conn:

    1. Se o subpainel Planilha não for exibido, selecione a guia Planilha.

    2. Passo 4.

  2. Selecione o ícone Planilha SQL.

  3. Se a janela Selecionar Conexão for aberta:

    1. Se o campo Conexão não tiver o valor hr_conn, selecione esse valor no menu.

    2. Selecione OK.

    Um painel é exibido com uma guia chamada hr_conn e dois subpainéis, Planilha e Criador de Expressões e Consulta. Na Planilha, você pode informar uma instrução SQL.

  4. Na Planilha, digite uma consulta (uma instrução SELECT).
  5. Clique no ícone Executar Instrução.

    A consulta é executada. Na Planilha, o painel Resultado da Consulta é exibido, mostrando o resultado da consulta.

  6. Na guia hr_conn, clique no ícone Limpar.

    A consulta desaparece e você pode inserir outra instrução SQL na Planilha. Quando você executa outra instrução SQL, seu resultado aparece no painel Resultado da Consulta, substituindo o resultado da instrução SQL executada anteriormente.

Consulte Também: Oracle SQL Developer User's Guide para obter informações sobre como usar a Planilha no SQL Developer

Tutorial: Selecionando Todas as Colunas de uma Tabela

Este tutorial mostra como selecionar todas as colunas da tabela EMPLOYEES.

Etapas para selecionar todas as colunas da Tabela EMPLOYEES:

  1. Se um painel com a guia hr_conn for exibido, selecione-o. Caso contrário, clique no ícone Planilha SQL, como em "Executando Consultas no SQL Developer".

  2. Na Planilha, insira a seguinte consulta:

    SELECT * FROM EMPLOYEES;

  3. Clique no ícone Executar Instrução.

    A consulta é executada. Na Planilha, o painel Resultado da Consulta aparece mostrando todas as colunas da tabela EMPLOYEES.

Cuidado: tenha muito cuidado ao usar SELECT * em tabelas com colunas que armazenam dados confidenciais, como senhas ou informações de cartão de crédito.

Consulte Também: "Tutorial: Exibindo Propriedades e Dados da Tabela EMPLOYEES com o SQL Developer" para obter informações sobre outra maneira de exibir dados da tabela com o SQL Developer

Tutorial: Selecionando Colunas Específicas de uma Tabela

Este tutorial mostra como selecionar apenas as colunas FIRST_NAME (Nome), LAST_NAME (Sobrenome) e DEPARTMENT_ID da tabela EMPLOYEES (Funcionários).

Etapas para selecionar somente FIRST_NAME, LAST_NAME e DEPARTMENT_ID:

  1. Se um painel com a guia hr_conn for exibido, selecione-o. Caso contrário, clique no ícone Planilha SQL, como em "Executando Consultas no SQL Developer".

  2. Se o painel Planilha contiver uma consulta, limpe-a selecionando o ícone Limpar.

  3. Na Planilha, insira a seguinte consulta:

    SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID FROM EMPLOYEES;

  4. Clique no ícone Executar Instrução.

    A consulta é executada. Na Planilha, o painel Resultado da Consulta é exibido, mostrando os resultados da consulta, que são semelhantes ao texto a seguir.

FIRST_NAME           LAST_NAME                 DEPARTMENT_ID

-------------------- ------------------------- -------------
Donald               OConnell                             50
Douglas              Grant                                50
Jennifer             Whalen                               10
Michael              Hartstein                            20
Pat                  Fay                                  20
Susan                Mavris                               40
Hermann              Baer                                 70
Shelley              Higgins                             110
William              Gietz                               110
Steven               King                                 90
Neena                Kochhar                              90

FIRST_NAME           LAST_NAME                 DEPARTMENT_ID

-------------------- ------------------------- -------------
Lex                  De Haan                              90
...
Kevin                Feeney                               50

107 rows selected.

Exibindo Colunas Selecionadas em Novos Cabeçalhos

Nos resultados de consulta exibidos, os cabeçalhos de coluna padrão são nomes de coluna. Para exibir uma coluna sob um novo cabeçalho, especifique o novo cabeçalho (alias) imediatamente após o nome dela. O alias renomeia a coluna pela duração da consulta, mas não altera seu nome no banco de dados.

A consulta no Exemplo 2-5 seleciona as mesmas colunas que a consulta no "Tutorial: Selecionando Colunas Específicas de uma Tabela", mas também especifica aliases para elas. Como os aliases não estão delimitados por aspas duplas, eles são exibidos em letras maiúsculas.

Se você delimitar aliases de coluna entre aspas duplas, as letras maiúsculas e minúsculas serão preservadas, e os aliases poderão incluir espaços, como no Exemplo 2-6.

Consulte Também: Referência de Linguagem SQL do Oracle Database para mais informações sobre a instrução SELECT, incluindo o alias da coluna (c_alias)

Exemplo 2-5 Exibindo Colunas Selecionadas em Novos Cabeçalhos

SELECT FIRST_NAME First, LAST_NAME last, DEPARTMENT_ID DepT
FROM EMPLOYEES;

O resultado é semelhante ao seguinte texto:

FIRST                LAST                            DEPT
-------------------- ------------------------- ----------
Donald               OConnell                          50
Douglas              Grant                             50
Jennifer             Whalen                            10
Michael              Hartstein                         20
Pat                  Fay                               20
Susan                Mavris                            40
Hermann              Baer                              70
Shelley              Higgins                          110
William              Gietz                            110
Steven               King                              90
Neena                Kochhar                           90

FIRST                LAST                            DEPT
-------------------- ------------------------- ----------
Lex                  De Haan                           90
...
Kevin                Feeney                            50

107 rows selected.

Exemplo 2-6 Preservando Maiúsculas e Minúsculas e Incluindo Espaços em Aliases de Coluna

SELECT FIRST_NAME "Given Name", LAST_NAME "Family Name"
FROM EMPLOYEES;

O resultado é semelhante ao seguinte texto:

Given Name           Family Name
-------------------- -------------------------
Donald               OConnell
Douglas              Grant
Jennifer             Whalen
Michael              Hartstein
Pat                  Fay
Susan                Mavris
Hermann              Baer
Shelley              Higgins
William              Gietz
Steven               King
Neena                Kochhar

Given Name           Family Name
-------------------- -------------------------
Lex                  De Haan
...
Kevin                Feeney

107 rows selected.

Selecionando Dados que Atendam às Condições Especificadas

Para selecionar somente dados que correspondam a uma condição especificada, inclua a cláusula WHERE na instrução SELECT.

A condição na cláusula WHERE pode ser qualquer condição SQL (para mais informações sobre condições SQL, consulte Referência de Linguagem SQL do Oracle Database).

A consulta no Exemplo 2-7 seleciona dados apenas para funcionários no departamento 90.

Para selecionar dados somente para funcionários dos departamentos 100, 110 e 120, use a seguinte cláusula WHERE:

WHERE DEPARTMENT_ID IN (100, 110, 120);

A consulta no Exemplo 2-8 seleciona dados somente para funcionários cujos sobrenomes começam com "Ma".

Para selecionar dados somente para funcionários cujos sobrenomes incluem "ma", use a seguinte cláusula WHERE:

WHERE LAST_NAME LIKE '%ma%';

A consulta no Exemplo 2-9 testa duas condições - se o salário é pelo menos 11000 e se a porcentagem de comissão não é nula.

Consulte também:

Exemplo 2-7 Selecionando Dados de um Departamento

SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90;

O resultado é semelhante ao seguinte texto:

FIRST_NAME           LAST_NAME                 DEPARTMENT_ID
-------------------- ------------------------- -------------
Steven               King                                 90
Neena                Kochhar                              90
Lex                  De Haan                              90

3 rows selected.

Exemplo 2-8 Selecionando Dados para Sobrenomes que Começam com a Mesma Substring

SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE 'Ma%';

O resultado é semelhante ao seguinte texto:

FIRST_NAME           LAST_NAME
-------------------- -------------------------
Jason                Mallin
Steven               Markle
James                Marlow
Mattea               Marvins
Randall              Matos
Susan                Mavris

6 rows selected.

Exemplo 2-9 Selecionando Dados que Atendem a Duas Condições

SELECT FIRST_NAME, LAST_NAME, SALARY, COMMISSION_PCT "%"
FROM EMPLOYEES
WHERE (SALARY >= 11000) AND (COMMISSION_PCT IS NOT NULL);

O resultado é semelhante ao seguinte texto:

FIRST_NAME           LAST_NAME                     SALARY          %
-------------------- ------------------------- ---------- ----------
John                 Russell                        14000         .4
Karen                Partners                       13500         .3
Alberto              Errazuriz                      12000         .3
Gerald               Cambrault                      11000         .3
Lisa                 Ozer                           11500        .25
Ellen                Abel                           11000         .3

6 rows selected.

Classificando Dados Selecionados

Quando os resultados da consulta são exibidos, os registros podem estar em qualquer ordem, a menos que você especifique sua ordem com a cláusula ORDER BY.

Os resultados da consulta no Exemplo 2-10 são classificados por LAST_NAME, em ordem crescente (o padrão).

Como alternativa, no SQL Developer, é possível omitir a cláusula ORDER BY e clicar duas vezes no nome da coluna para classificar.

O critério de classificação não precisa ser incluído na lista de seleção, como mostra o Exemplo 2-11.

Consulte Também: Oracle Database SQL Language Reference para saber mais sobre a instrução SELECT, inclusive a cláusula ORDER BY

Exemplo 2-10 Classificando Dados Selecionados por SOBRENOME

SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY LAST_NAME;

Resultado:

FIRST_NAME           LAST_NAME                 HIRE_DATE
-------------------- ------------------------- ---------
Ellen                Abel                      11-MAY-04
Sundar               Ande                      24-MAR-08
Mozhe                Atkinson                  30-OCT-05
David                Austin                    25-JUN-05
Hermann              Baer                      07-JUN-02
Shelli               Baida                     24-DEC-05
Amit                 Banda                     21-APR-08
Elizabeth            Bates                     24-MAR-07
...
FIRST_NAME           LAST_NAME                 HIRE_DATE
-------------------- ------------------------- ---------
Jose Manuel          Urman                     07-MAR-06
Peter                Vargas                    09-JUL-06
Clara                Vishney                   11-NOV-05
Shanta               Vollman                   10-OCT-05
Alana                Walsh                     24-APR-06
Matthew              Weiss                     18-JUL-04
Jennifer             Whalen                    17-SEP-03
Eleni                Zlotkey                   29-JAN-08

107 rows selected

Exemplo 2-11 Classificando Dados Selecionados por uma Coluna Não Selecionado

SELECT FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY LAST_NAME;

Resultado:

FIRST_NAME           HIRE_DATE
-------------------- ---------
Ellen                11-MAY-04
Sundar               24-MAR-08
Mozhe                30-OCT-05
David                25-JUN-05
Hermann              07-JUN-02
Shelli               24-DEC-05
Amit                 21-APR-08
Elizabeth            24-MAR-07
...
FIRST_NAME           HIRE_DATE
-------------------- ---------
Jose Manuel          07-MAR-06
Peter                09-JUL-06
Clara                11-NOV-05
Shanta               10-OCT-05
Alana                24-APR-06
Matthew              18-JUL-04
Jennifer             17-SEP-03
Eleni                29-JAN-08

107 rows selected.

Selecionando Dados de Várias Tabelas

Para selecionar dados de várias tabelas, use uma consulta chamada junção. As tabelas em uma junção devem compartilhar pelo menos um nome de coluna.

Suponha que você queira selecionar o FIRST_NAME, o LAST_NAME e o DEPARTMENT_NAME de cada funcionário. FIRST_NAME e LAST_NAME estão na tabela EMPLOYEES e DEPARTMENT_NAME está na tabela DEPARTMENTS. Ambas as tabelas têm DEPARTMENT_ID. Você pode usar a consulta no Exemplo 2-12.

Os qualificadores de tabela-nome são opcionais para os nomes da coluna que aparecem em apenas uma tabela de uma junção, mas são obrigatórios para os nomes de colunas que aparecem nas duas tabelas. A seguinte consulta é equivalente à consulta no Exemplo 2-12:

SELECT FIRST_NAME "First",
LAST_NAME "Last",
DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
ORDER BY DEPARTMENT_NAME, LAST_NAME;

Para tornar as consultas que usam nomes de colunas qualificados mais legíveis, use aliases de tabela, conforme mostrado no exemplo a seguir:

SELECT FIRST_NAME "First",
LAST_NAME "Last",
DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES e, DEPARTMENTS d
WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY d.DEPARTMENT_NAME, e.LAST_NAME;

Embora você crie os aliases na cláusula FROM, pode usá-los anteriormente na consulta, conforme mostrado no seguinte exemplo:

SELECT e.FIRST_NAME "First",
e.LAST_NAME "Last",
d.DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES e, DEPARTMENTS d
WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY d.DEPARTMENT_NAME, e.LAST_NAME;

Consulte Também: Oracle Database SQL Language Reference para ver mais informações sobre junções

Exemplo 2-12 Selecionando Dados de Duas Tabelas (Unindo Duas Tabelas)

SELECT EMPLOYEES.FIRST_NAME "First",
EMPLOYEES.LAST_NAME "Last",
DEPARTMENTS.DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
ORDER BY DEPARTMENTS.DEPARTMENT_NAME, EMPLOYEES.LAST_NAME;

Resultado:

First                Last                      Dept. Name
-------------------- ------------------------- ------------------------------
William              Gietz                     Accounting
Shelley              Higgins                   Accounting
Jennifer             Whalen                    Administration
Lex                  De Haan                   Executive
Steven               King                      Executive
Neena                Kochhar                   Executive
John                 Chen                      Finance
...
Jose Manuel          Urman                     Finance
Susan                Mavris                    Human Resources
David                Austin                    IT
...
Valli                Pataballa                 IT
Pat                  Fay                       Marketing
Michael              Hartstein                 Marketing
Hermann              Baer                      Public Relations
Shelli               Baida                     Purchasing
...
Sigal                Tobias                    Purchasing
Ellen                Abel                      Sales
...
Eleni                Zlotkey                   Sales
Mozhe                Atkinson                  Shipping
...
Matthew              Weiss                     Shipping

106 rows selected.

Usando Operadores e Funções em Consultas

A select_list de uma consulta pode incluir expressões SQL, que podem incluir operadores SQL e funções SQL. Esses operadores e funções podem ter dados de tabela como operandos e argumentos. As expressões SQL são avaliadas e seus valores aparecem nos resultados da consulta.

Consulte também:

Usando Operadores Aritméticos em Consultas

Os operadores aritméticos básicos —+ (adição), — (subtração), \* (multiplicação) e/ou (divisão) — operam em valores de coluna.

A consulta no Exemplo 2-13 exibe LAST_NAME, SALARY (pagamento mensal), e o pagamento anual de cada funcionário no departamento 90, em ordem decrescente de SALARY.

Exemplo 2-13 Usando uma Expressão Aritmética em uma Consulta

SELECT LAST_NAME,
SALARY "Monthly Pay",
SALARY * 12 "Annual Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90
ORDER BY SALARY DESC;

Resultado:

LAST_NAME                 Monthly Pay Annual Pay
------------------------- ----------- ----------
King                            24000     288000
De Haan                         17000     204000
Kochhar                         17000     204000

Usando Funções Numéricas em Consultas

As funções numéricas aceitam entrada numérica e retornam valores numéricos. Cada função numérica retorna um único valor para cada linha avaliada.

As funções numéricas que o SQL suporta estão listadas e descritas na Referência de Linguagem SQL do Oracle Database.

A consulta no Exemplo 2-14 usa a função numérica ROUND para exibir o pagamento diário de cada funcionário no departamento 100, arredondado para o centavo mais próximo.

A consulta no Exemplo 2-15 usa a função numérica TRUNC para exibir o pagamento diário de cada funcionário no departamento 100, truncado para o dólar mais próximo.

Consulte Também: Oracle Database SQL Language Reference para obter mais informações sobre funções numéricas de SQL

Exemplo 2-14 Dados Numéricos de Arredondamento

SELECT LAST_NAME,
ROUND (((SALARY * 12)/365), 2) "Daily Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                  Daily Pay
------------------------- ----------
Chen                          269.59
Faviet                        295.89
Greenberg                     394.52
Popp                          226.85
Sciarra                       253.15
Urman                         256.44

6 rows selected.

Exemplo 2-15 Truncando Dados Numéricos

SELECT LAST_NAME,
TRUNC ((SALARY * 12)/365) "Daily Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                  Daily Pay
------------------------- ----------
Chen                             269
Faviet                           295
Greenberg                        394
Popp                             226
Sciarra                          253
Urman                            256

6 rows selected.

Usando o Operador de Concatenação nas Consultas

O operador de concatenação (||) combina duas strings em uma string, anexando a segunda string à primeira. Por exemplo, 'a'||'b'='ab'. Você pode usar esse operador para combinar informações de duas colunas ou expressões na mesma coluna de um resultado de consulta.

A consulta no Exemplo 2-16 concatena o nome, um espaço e o sobrenome de cada funcionário selecionado.

Consulte Também: Referência de Linguagem SQL do Oracle Database para saber mais sobre o operador da concatenação

Exemplo 2-16 Concatenando Dados de Caracteres

SELECT FIRST_NAME || ' ' || LAST_NAME "Name"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

Resultado:

Name
----------------------------------------------
John Chen
Daniel Faviet
Nancy Greenberg
Luis Popp
Ismael Sciarra
Jose Manuel Urman

6 rows selected.

Usando Funções de Caractere em Consultas

As funções de caractere aceitam a entrada de caracteres. A maioria retorna valores de caractere, mas algumas retornam valores numéricos. Cada função de caractere retorna um único valor para cada linha avaliada.

As funções de caractere que a SQL suporta estão listadas e descritas na Referência de Linguagem SQL do Oracle Database.

As funções UPPER, INITCAP e LOWER exibem seus argumentos de caracteres em letras maiúsculas, iniciais e minúsculas, respectivamente.

A consulta no Exemplo 2-17 exibe LAST_NAME em letras maiúsculas, FIRST_NAME com o primeiro caractere em letras maiúsculas e todos os outros em letras minúsculas e EMAIL em letras minúsculas.

Consulte Também: Oracle Database SQL Language Reference para obter mais informações sobre as funções de caracteres SQL

Exemplo 2-17 Alterando o Caso de Dados de Caracteres

SELECT UPPER(LAST_NAME) "Last",
INITCAP(FIRST_NAME) "First",
LOWER(EMAIL) "E-Mail"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY EMAIL;

Resultado:

Last                      First                E-Mail
------------------------- -------------------- -------------------------
FAVIET                    Daniel               dfaviet
SCIARRA                   Ismael               isciarra
CHEN                      John                 jchen
URMAN                     Jose Manuel          jmurman
POPP                      Luis                 lpopp
GREENBERG                 Nancy                ngreenbe

6 rows selected.

Usando Funções de Data e Hora em Consultas

As funções de data e hora operam em DATE, timestamp e valores de intervalo. Cada função de data e hora retorna um único valor para cada linha avaliada.

As funções de data e hora que o SQL suporta são listadas e descritas na Referência de Linguagem SQL do Oracle Database.

Para cada DATE e valor de timestamp, o Oracle Database armazena as seguintes informações:

Para cada valor de timestamp, o Oracle Database também armazena a parte fracionária da segunda, cuja precisão você pode especificar. Para armazenar o fuso horário também, use o tipo de dados TIMESTAMP WITH TIME ZONE ou TIMESTAMP WITH LOCAL TIME ZONE.

Para obter mais informações sobre o tipo de dados DATE, consulte Referência de Linguagem SQL do Oracle Database.

Para obter mais informações sobre o tipo de dados TIMESTAMP, consulte Referência de Linguagem SQL do Oracle Database.

Para obter informações sobre os outros tipos de dados de timestamp e os tipos de dados de intervalo, consulte Oracle Database SQL Language Reference.

A consulta no Exemplo 2-18 usa as funções EXTRACT e SYSDATE para mostrar quantos anos cada funcionário do departamento 100 foi empregado. A função SYSDATE retorna a data atual do relógio do sistema como um valor DATE. Para obter mais informações sobre a função SYSDATE, consulte Referência da Linguagem SQL do Oracle Database. Para obter informações sobre a função EXTRACT, consulte Referência de Idioma SQL do Oracle Database.

A consulta no Exemplo 2-19 usa a função SYSTIMESTAMP para exibir a data e a hora atuais do sistema. A função SYSTIMESTAMP retorna um valor TIMESTAMP. Para obter informações sobre a função SYSTIMESTAMP, consulte Referência de Linguagem SQL do Oracle Database.

A tabela na cláusula FROM da consulta, DUAL, é uma tabela de uma linha que oOracle Database cria automaticamente com o dicionário de dados. Selecione em DUAL quando quiser calcular uma expressão constante com a instrução SELECT. Como DUAL tem apenas uma linha, a constante é retornada apenas uma vez. Para obter mais informações sobre a seleção de DUAL, consulte Oracle Database SQL Language Reference.

Consulte Também: Oracle Database SQL Language Reference para obter mais informações sobre funções SQL de data e hora

Exemplo 2-18 Exibindo o Número de Anos Entre Datas

SELECT LAST_NAME,
(EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)) "Years Employed"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY "Years Employed";

Resultado:

LAST_NAME                 Years Employed
------------------------- --------------
Popp                                   5
Urman                                  6
Chen                                   7
Sciarra                                7
Greenberg                             10
Faviet                                10

6 rows selected.

Exemplo 2-19 Exibindo a Data e a Hora do Sistema

SELECT EXTRACT(HOUR FROM SYSTIMESTAMP) || ':' ||
EXTRACT(MINUTE FROM SYSTIMESTAMP) || ':' ||
ROUND(EXTRACT(SECOND FROM SYSTIMESTAMP), 0) || ', ' ||
EXTRACT(MONTH FROM SYSTIMESTAMP) || '/' ||
EXTRACT(DAY FROM SYSTIMESTAMP) || '/' ||
EXTRACT(YEAR FROM SYSTIMESTAMP) "System Time and Date"
FROM DUAL;

Os resultados variam de acordo com o valor SYSTIMESTAMP atual, mas têm o seguinte formato:

System Time and Date
-------------------------------------------------------------------
18:17:53, 12/27/2012

Usando Funções de Conversão em Consultas

As funções de conversão convertem um tipo de dados em outro.

As funções de conversão que o SQL suporta são listadas e descritas em Referência do Oracle Database SQL Language.

A consulta no Exemplo 2-20 usa a função TO_CHAR para converter valores HIRE_DATE (que são do tipo DATE) em valores de caractere com o formato FMMonth DD YYYY. FM remove os espaços em branco à esquerda e à direita do nome do mês. FMMonth DD YYYY é um exemplo de um modelo de formato de data e hora. Para obter informações sobre modelos do formato de data e hora, consulte Referência da Linguagem SQL do Oracle Database.

A consulta no Exemplo 2-21 usa a função TO_NUMBER para converter valores POSTAL_CODE (que são do tipo VARCHAR2) em valores do tipo NUMBER, que ele usa em cálculos.

Consulte também:

Exemplo 2-20 Convertendo Datas em Caracteres Usando um Modelo de Formato

SELECT LAST_NAME,
HIRE_DATE,
TO_CHAR(HIRE_DATE, 'FMMonth DD YYYY') "Date Started"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                 HIRE_DATE Date Started
------------------------- --------- -----------------
Chen                      28-SEP-05 September 28 2005
Faviet                    16-AUG-02 August 16 2002
Greenberg                 17-AUG-02 August 17 2002
Popp                      07-DEC-07 December 7 2007
Sciarra                   30-SEP-05 September 30 2005
Urman                     07-MAR-06 March 7 2006

6 rows selected.

Exemplo 2-21 Convertendo Caracteres em Números

SELECT CITY,
POSTAL_CODE "Old Code",
TO_NUMBER(POSTAL_CODE) + 1 "New Code"
FROM LOCATIONS
WHERE COUNTRY_ID = 'US'
ORDER BY POSTAL_CODE;

Resultado:

CITY                           Old Code       New Code
------------------------------ ------------ ----------
Southlake                      26192             26193
South Brunswick                50090             50091
Seattle                        98199             98200
South San Francisco            99236             99237

4 rows selected.

Usando Funções de Agregação em Consultas

Uma função agregada pega um grupo de linhas e retorna uma única linha de resultado. O grupo de linhas pode ser uma view ou tabela inteira.

As funções agregadas que a SQL suporta estão listadas e descritas em Referência de Linguagem SQL do Oracle Database.

As funções agregadas são especialmente poderosas quando usadas com a cláusula GROUP BY, que agrupa resultados de consulta por uma ou mais colunas, com um resultado para cada grupo.

A consulta no Exemplo 2-22 usa a função COUNT e a cláusula GROUP BY para mostrar quantas pessoas se reportam a cada gerente. O caractere curinga, *, representa um registro inteiro. Exemplo 2-22 mostra que um funcionário não se reporta a um gerente. A consulta a seguir seleciona o nome, sobrenome e o cargo do funcionário:

COLUMN FIRST_NAME FORMAT A10;
COLUMN LAST_NAME FORMAT A10;
COLUMN JOB_TITLE FORMAT A10;

SELECT e.FIRST_NAME,
e.LAST_NAME,
j.JOB_TITLE
FROM EMPLOYEES e, JOBS j
WHERE e.JOB_ID = j.JOB_ID
AND MANAGER_ID IS NULL;

Resultado:

FIRST_NAME LAST_NAME  JOB_TITLE
---------- ---------- ----------
Steven     King       President

Para que a consulta retorne somente linhas em que os valores agregados atendam às condições especificadas, use uma função agregada na cláusula HAVING da consulta.

A consulta no Exemplo 2-23 mostra quanto cada departamento gasta anualmente em salários, mas somente nos departamentos cuja quantia excede $1.000.000.

A consulta no Exemplo 2-24 usa várias funções de agregação para mostrar estatísticas para os salários de cada JOB_ID.

Consulte Também: Referência de Linguagem SQL do Oracle Database para obter mais informações sobre funções agregadas de SQL

Exemplo 2-22 Contando o Número de Linhas em Cada Grupo

SELECT MANAGER_ID "Manager",
COUNT(*) "Number of Reports"
FROM EMPLOYEES
GROUP BY MANAGER_ID
ORDER BY MANAGER_ID;

Resultado:

Manager Number of Reports
---------- -----------------
       100                14
       101                 5
       102                 1
       103                 4
       108                 5
       114                 5
       120                 8
       121                 8
       122                 8
       123                 8
       124                 8
       145                 6
       146                 6
       147                 6
       148                 6
       149                 6
       201                 1
       205                 1
                           1

19 rows selected.

Exemplo 2-23 Limitando Funções Agregadas a Linhas que Satisfazem uma Condição

SELECT DEPARTMENT_ID "Department",
SUM(SALARY*12) "All Salaries"
FROM EMPLOYEES
HAVING SUM(SALARY * 12) >= 1000000
GROUP BY DEPARTMENT_ID;

Resultado:

Department All Salaries
---------- ------------
        50      1876800
        80      3654000

Exemplo 2-24 Usando Funções de Agregação para Informações Estatísticas

SELECT JOB_ID,
COUNT(*) "#",
MIN(SALARY) "Minimum",
ROUND(AVG(SALARY), 0) "Average",
MEDIAN(SALARY) "Median",
MAX(SALARY) "Maximum",
ROUND(STDDEV(SALARY)) "Std Dev"
FROM EMPLOYEES
GROUP BY JOB_ID
ORDER BY JOB_ID;

Resultado:

JOB_ID              #    Minimum    Average     Median    Maximum    Std Dev
---------- ---------- ---------- ---------- ---------- ---------- ----------
AC_ACCOUNT          1       8300       8300       8300       8300          0
AC_MGR              1      12008      12008      12008      12008          0
AD_ASST             1       4400       4400       4400       4400          0
AD_PRES             1      24000      24000      24000      24000          0
AD_VP               2      17000      17000      17000      17000          0
FI_ACCOUNT          5       6900       7920       7800       9000        766
FI_MGR              1      12008      12008      12008      12008          0
HR_REP              1       6500       6500       6500       6500          0
IT_PROG             5       4200       5760       4800       9000       1926
MK_MAN              1      13000      13000      13000      13000          0
MK_REP              1       6000       6000       6000       6000          0
PR_REP              1      10000      10000      10000      10000          0
PU_CLERK            5       2500       2780       2800       3100        239
PU_MAN              1      11000      11000      11000      11000          0
SA_MAN              5      10500      12200      12000      14000       1525
SA_REP             30       6100       8350       8200      11500       1524
SH_CLERK           20       2500       3215       3100       4200        548
ST_CLERK           20       2100       2785       2700       3600        453
ST_MAN              5       5800       7280       7900       8200       1066

19 rows selected.

Usando Funções Relacionadas a NULL em Consultas

As funções relacionadas ao NULL facilitam o tratamento de valores NULL.

The NULL-related functions that SQL supports are listed and described in Oracle Database SQL Language Reference.

A consulta no Exemplo 2-25 retorna o sobrenome e a comissão dos funcionários cujos sobrenomes começam com 'B'. Se um funcionário não receber comissão (ou seja, se COMMISSION_PCT for NULO), a função NVL substituirá o valor NULO por "Não Aplicável".

A consulta no Exemplo 2-26 retorna o sobrenome, o salário e a receita dos funcionários cujos sobrenome começam com 'B', usando a função NVL2: Se COMMISSION_PCT não for NULL, a receita será o salário mais o comissionamento; se COMMISSION_PCT for NULL, a receita será apenas o salário.

Consulte também:

Exemplo 2-25 Substituindo uma String por um Valor NULL

SELECT LAST_NAME,
NVL(TO_CHAR(COMMISSION_PCT), 'Not Applicable') "COMMISSION"
FROM EMPLOYEES
WHERE LAST_NAME LIKE 'B%'
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                 COMMISSION
------------------------- ----------------------------------------
Baer                      Not Applicable
Baida                     Not Applicable
Banda                     .1
Bates                     .15
Bell                      Not Applicable
Bernstein                 .25
Bissot                    Not Applicable
Bloom                     .2
Bull                      Not Applicable

9 rows selected.

Exemplo 2-26 Especificando Expressões Diferentes para Valores NULL e Não NULL

SELECT LAST_NAME, SALARY,
NVL2(COMMISSION_PCT, SALARY + (SALARY * COMMISSION_PCT), SALARY) INCOME
FROM EMPLOYEES WHERE LAST_NAME LIKE 'B%'
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                     SALARY     INCOME
------------------------- ---------- ----------
Baer                           10000      10000
Baida                           2900       2900
Banda                           6200       6820
Bates                           7300       8395
Bell                            4000       4000
Bernstein                       9500      11875
Bissot                          3300       3300
Bloom                          10000      12000
Bull                            4100       4100

9 rows selected.

Usando Expressões CASE em Consultas

Uma expressão CASE permite que você use a lógica IF… THEN … ELSE em instruções SQL sem chamar subprogramas. Existem dois tipos de expressões CASE, simples e pesquisadas.

A consulta no Exemplo 2-27 usa uma expressão CASE simples para mostrar o nome de cada código de país.

A consulta no Exemplo 2-28 usa uma expressão CASE pesquisada para mostrar os aumentos salariais propostos (15%, 10%, 5% ou 0%), com base em intervalos de datas associados ao tempo de serviço.

Consulte também:

Exemplo 2-27 Usando uma Expressão Simple CASE em uma Consulta

SELECT UNIQUE COUNTRY_ID ID,
       CASE COUNTRY_ID
         WHEN 'AU' THEN 'Australia'
         WHEN 'BR' THEN 'Brazil'
         WHEN 'CA' THEN 'Canada'
         WHEN 'CH' THEN 'Switzerland'
         WHEN 'CN' THEN 'China'
         WHEN 'DE' THEN 'Germany'
         WHEN 'IN' THEN 'India'
         WHEN 'IT' THEN 'Italy'
         WHEN 'JP' THEN 'Japan'
         WHEN 'MX' THEN 'Mexico'
         WHEN 'NL' THEN 'Netherlands'
         WHEN 'SG' THEN 'Singapore'
         WHEN 'UK' THEN 'United Kingdom'
         WHEN 'US' THEN 'United States'
       ELSE 'Unknown'
       END COUNTRY
FROM LOCATIONS
ORDER BY COUNTRY_ID;

Resultado:

ID COUNTRY
-- --------------
AU Australia
BR Brazil
CA Canada
CH Switzerland
CN China
DE Germany
IN India
IT Italy
JP Japan
MX Mexico
NL Netherlands
SG Singapore
UK United Kingdom
US United States

14 rows selected.

Exemplo 2-28 Usando uma Expressão CASE Pesquisada em uma Consulta

SELECT LAST_NAME "Name",
HIRE_DATE "Started",
SALARY "Salary",
CASE
  WHEN HIRE_DATE < TO_DATE('01-Jan-03', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.15, 0)
  WHEN HIRE_DATE >= TO_DATE('01-Jan-03', 'dd-mon-yy') AND
       HIRE_DATE < TO_DATE('01-Jan-06', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.10, 0)
  WHEN HIRE_DATE >= TO_DATE('01-Jan-06', 'dd-mon-yy') AND
       HIRE_DATE < TO_DATE('01-Jan-07', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.05, 0)
  ELSE SALARY
END "Proposed Salary"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY HIRE_DATE;

Resultado:

Name                      Started       Salary Proposed Salary
------------------------- --------- ---------- ---------------
Faviet                    16-AUG-02       9000           10350
Greenberg                 17-AUG-02      12008           13809
Chen                      28-SEP-05       8200            9020
Sciarra                   30-SEP-05       7700            8470
Urman                     07-MAR-06       7800            8190
Popp                      07-DEC-07       6900            6900

6 rows selected.

Usando a Função DECODE em Consultas

A função DECODE compara uma expressão a vários valores de pesquisa. Sempre que o valor da expressão corresponder a um valor de pesquisa, DECODE retornará o resultado associado a esse valor de pesquisa. Se DECODE não encontrar nenhuma correspondência, ele retornará o valor padrão (se especificado) ou NULL (se nenhum valor padrão for especificado)

A consulta no Exemplo 2-29 usa a função DECODE para mostrar aumentos de salário propostos para três cargos diferentes. A expressão é JOB_ID; os valores de pesquisa são 'PU_CLERK', 'SH_CLERK' e 'ST_CLERK'; e o padrão é SALARY.

Observação: os argumentos da função DECODE podem ser qualquer um dos tipos de caracteres ou numéricos SQL. O Oracle converte automaticamente a expressão e cada valor de pesquisa no tipo de dados do primeiro valor de pesquisa antes da comparação. O Oracle converte automaticamente o valor de retorno no mesmo tipo de dados que o primeiro resultado. Se o primeiro resultado tiver o tipo de dados CHAR ou se o primeiro resultado for NULO, o Oracle converterá o valor de retorno ao tipo de dados VARCHAR2.

Consulte também:

Exemplo 2-29 Usando a Função DECODE em uma Consulta

SELECT LAST_NAME, JOB_ID, SALARY,
DECODE(JOB_ID,
'PU_CLERK', SALARY * 1.10,
'SH_CLERK', SALARY * 1.15,
'ST_CLERK', SALARY * 1.20,
SALARY) "Proposed Salary"
FROM EMPLOYEES
WHERE JOB_ID LIKE '%_CLERK'
AND LAST_NAME < 'E'
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                 JOB_ID         SALARY Proposed Salary
------------------------- ---------- ---------- ---------------
Atkinson                  ST_CLERK         2800            3360
Baida                     PU_CLERK         2900            3190
Bell                      SH_CLERK         4000            4600
Bissot                    ST_CLERK         3300            3960
Bull                      SH_CLERK         4100            4715
Cabrio                    SH_CLERK         3000            3450
Chung                     SH_CLERK         3800            4370
Colmenares                PU_CLERK         2500            2750
Davies                    ST_CLERK         3100            3720
Dellinger                 SH_CLERK         3400            3910
Dilly                     SH_CLERK         3600            4140

11 rows selected.