SELECT

SELECT pode ser usado como uma instrução ou como uma cláusula dentro de outras instruções:

  • Como uma instrução, a instrução SELECT é a instrução SQL mais comumente executada; ela consulta o banco de dados e recupera um conjunto de linhas.

  • Como uma cláusula, SELECT define o conjunto de colunas retornadas por uma consulta.

Consulte também:

Sintaxe de consulta

Sintaxe

[ ... ]
SELECT [ { ALL | DISTINCT } ]
       [ TOP <n> ]
       {

         -- Selecting all columns.
         [{<object_name>|<alias>}.]*
         [ EXCLUDE
           {
             <col_name>
             | ( <col_name>, <col_name>, ... )
           }
         ]
         [ RENAME
           {
             <col_name> AS <col_alias>
             | ( <col_name> AS <col_alias>, <col_name> AS <col_alias>, ... )
           }
         ]

       |

         -- Selecting specific columns.
         {
           [{<object_name>|<alias>}.]<col_name>
           | [{<object_name>|<alias>}.]$<col_position>
           | <expr>
         }
         [ [ AS ] <col_alias> ]
       }
       [ , ... ]
[ ... ]
Copy

Para obter mais informações sobre SELECT como uma instrução, e as outras cláusulas dentro da instrução, consulte Sintaxe de consulta.

Parâmetros

ALL | DISTINCT

Especifica se a eliminação duplicada deve ser feita no conjunto de resultados:

  • ALL inclui todos os valores no conjunto de resultados.

  • DISTINCT elimina os valores duplicados do conjunto de resultados.

Padrão: ALL

TOP n

Especifica o número máximo de resultados a serem retornados. Consulte TOP <n>.

object_name ou . alias

Especifica o identificador do objeto ou alias do objeto, conforme definido na cláusula FROM.

*

O asterisco é um asterisco para indicar que a saída deve incluir todas as colunas do objeto especificado, ou todas as colunas de todos os objetos se * não estiver qualificado com um nome ou alias do objeto.

EXCLUDE col_name . EXCLUDE (col_name, col_name, ...)

Quando você seleciona todas as colunas (SELECT * ou SELECT table_name.*), especifica as colunas que devem ser excluídas dos resultados.

Se você estiver selecionando de várias tabelas, use SELECT table_name.* para especificar que deseja selecionar todas as colunas de uma tabela específica, e especifique o nome da coluna não qualificado em EXCLUDE. Por exemplo:

SELECT table_a.* EXCLUDE column_in_table_a ,
  table_b.* EXCLUDE column_in_table_b
  ...
Copy
RENAME col_name AS col_alias . RENAME (col_name AS col_alias, col_name AS col_alias, ...)

Ao selecionar todas as colunas (SELECT * ou SELECT table_name.*), especifique os alias das colunas que devem ser usados nos resultados.

Se você estiver selecionando de várias tabelas, use SELECT table_name.* para especificar que deseja selecionar todas as colunas de uma tabela específica, e especifique o nome da coluna não qualificado em RENAME. Por exemplo:

SELECT table_a.* RENAME column_in_table_a AS col_alias_a,
  table_b.* RENAME column_in_table_b AS col_alias_b
  ...
Copy

Nota

Se você especificar ambos EXCLUDE e RENAME após SELECT *:

  • Você deve especificar EXCLUDE antes de RENAME:

    SELECT * EXCLUDE col_a RENAME col_b AS alias_b ...
    
    Copy
  • Não se pode especificar a mesma coluna em EXCLUDE e RENAME.

col_name

Especifica o identificador da coluna, conforme definido na cláusula FROM.

$col_position

Especifica a posição da coluna (baseado em 1) conforme definido na cláusula FROM. Se uma coluna for referenciada a partir de uma tabela, este número não pode exceder o número máximo de colunas na tabela.

expr

Especifica uma expressão, como uma expressão matemática, que avalia como um valor específico para qualquer linha específica.

[ AS ] col_alias

Especifica o alias da coluna atribuída à expressão resultante. Isto é usado como o nome de exibição em uma lista SELECT de nível superior, e o nome da coluna em uma exibição em linha.

Notas de uso

  • Os alias e identificadores diferenciam maiúsculas e minúsculas, por padrão. Para preservar o tipo de letra, coloque-os entre aspas duplas ("). Para obter mais informações, consulte Identificadores de objetos.

  • Sem uma cláusula ORDER BY, os resultados retornados por SELECT são um conjunto não ordenado. Executar a mesma consulta repetidamente com as mesmas tabelas pode resultar em uma ordem de saída diferente a cada vez. Se a ordem for importante, use a cláusula ORDER BY.

  • SELECT pode ser usado não apenas como uma instrução independente, mas também como uma cláusula em outras instruções, por exemplo INSERT INTO ... SELECT ...;. SELECT também pode ser usado em uma subconsulta dentro de uma instrução.

Exemplos

Alguns exemplos simples são fornecidos abaixo.

Muitos exemplos adicionais estão incluídos em outras partes da documentação, incluindo as descrições detalhadas de Sintaxe de consulta.

Configuração dos dados para os exemplos

Algumas das consultas abaixo utilizam as seguintes tabelas e dados:

CREATE TABLE employee_table (
    employee_ID INTEGER,
    last_name VARCHAR,
    first_name VARCHAR,
    department_ID INTEGER
    );

CREATE TABLE department_table (
    department_ID INTEGER,
    department_name VARCHAR
    );
Copy
INSERT INTO employee_table (employee_ID, last_name, first_name, department_ID) VALUES
    (101, 'Montgomery', 'Pat', 1),
    (102, 'Levine', 'Terry', 2),
    (103, 'Comstock', 'Dana', 2);

INSERT INTO department_table (department_ID, department_name) VALUES
    (1, 'Engineering'),
    (2, 'Customer Support'),
    (3, 'Finance');
Copy

Exemplos de seleção de todas as colunas (SELECT *)

Seleção de todas as colunas na tabela

Este exemplo mostra como selecionar todas as colunas em employee_table:

SELECT * FROM employee_table;

+-------------+------------+------------+---------------+
| EMPLOYEE_ID | LAST_NAME  | FIRST_NAME | DEPARTMENT_ID |
|-------------+------------+------------+---------------|
|         101 | Montgomery | Pat        |             1 |
|         102 | Levine     | Terry      |             2 |
|         103 | Comstock   | Dana       |             2 |
+-------------+------------+------------+---------------+
Copy

Seleção de todas as colunas exceto uma coluna

Este exemplo mostra como selecionar todas as colunas em employee_table, exceto a coluna department_id:

SELECT * EXCLUDE department_id FROM employee_table;

+-------------+------------+------------+
| EMPLOYEE_ID | LAST_NAME  | FIRST_NAME |
|-------------+------------+------------|
|         101 | Montgomery | Pat        |
|         102 | Levine     | Terry      |
|         103 | Comstock   | Dana       |
+-------------+------------+------------+
Copy

Seleção de todas as colunas exceto duas ou mais colunas

Este exemplo mostra como selecionar todas as colunas em employee_table, exceto as colunas department_id e employee_id:

SELECT * EXCLUDE (department_id, employee_id) FROM employee_table;

+------------+------------+
| LAST_NAME  | FIRST_NAME |
|------------+------------|
| Montgomery | Pat        |
| Levine     | Terry      |
| Comstock   | Dana       |
+------------+------------+
Copy

Seleção de todas as colunas e renomeação de uma coluna

Este exemplo mostra como selecionar todas as colunas em employee_table e renomear a coluna department_id:

SELECT * RENAME department_id AS department FROM employee_table;
+-------------+------------+------------+------------+
| EMPLOYEE_ID | LAST_NAME  | FIRST_NAME | DEPARTMENT |
|-------------+------------+------------+------------|
|         101 | Montgomery | Pat        |          1 |
|         102 | Levine     | Terry      |          2 |
|         103 | Comstock   | Dana       |          2 |
+-------------+------------+------------+------------+
Copy

Seleção de todas as colunas e renomeação de várias colunas

Este exemplo mostra como selecionar todas as colunas em employee_table e renomear as colunas department_id e employee_id:

SELECT * RENAME (department_id AS department, employee_id AS id) FROM employee_table;

+-----+------------+------------+------------+
|  ID | LAST_NAME  | FIRST_NAME | DEPARTMENT |
|-----+------------+------------+------------|
| 101 | Montgomery | Pat        |          1 |
| 102 | Levine     | Terry      |          2 |
| 103 | Comstock   | Dana       |          2 |
+-----+------------+------------+------------+
Copy

Seleção de todas as colunas, exclusão de uma coluna e renomeação de várias colunas

Este exemplo mostra como selecionar todas as colunas em employee_table, excluir a coluna first_name e renomear as colunas department_id e employee_id:

SELECT * EXCLUDE first_name RENAME (department_id AS department, employee_id AS id) FROM employee_table;

+-----+------------+------------+
|  ID | LAST_NAME  | DEPARTMENT |
|-----+------------+------------|
| 101 | Montgomery |          1 |
| 102 | Levine     |          2 |
| 103 | Comstock   |          2 |
+-----+------------+------------+
Copy

Seleção de todas as colunas de várias tabelas, exclusão de uma coluna e renomeação de uma coluna

Este exemplo une duas tabelas e seleciona todas as colunas das duas tabelas, exceto uma coluna de employee_table. O exemplo também renomeia uma das colunas selecionadas de department_table.

SELECT
  employee_table.* EXCLUDE department_id,
  department_table.* RENAME department_name AS department
FROM employee_table INNER JOIN department_table
  ON employee_table.department_id = department_table.department_id
ORDER BY department, last_name, first_name;

+-------------+------------+------------+---------------+------------------+
| EMPLOYEE_ID | LAST_NAME  | FIRST_NAME | DEPARTMENT_ID | DEPARTMENT       |
|-------------+------------+------------+---------------+------------------|
|         103 | Comstock   | Dana       |             2 | Customer Support |
|         102 | Levine     | Terry      |             2 | Customer Support |
|         101 | Montgomery | Pat        |             1 | Engineering      |
+-------------+------------+------------+---------------+------------------+
Copy

Exemplos de seleção de colunas específicas (SELECT nome de coluna)

Seleção de uma única coluna por nome

Este exemplo mostra como procurar o sobrenome de um funcionário se você souber sua ID.

SELECT last_name FROM employee_table WHERE employee_ID = 101;
+------------+
| LAST_NAME  |
|------------|
| Montgomery |
+------------+
Copy

Seleção de várias colunas por nome a partir de tabelas unidas

Este exemplo lista cada funcionário e o nome do departamento em que cada funcionário trabalha. A saída está em ordem por nome de departamento, e dentro de cada departamento os funcionários estão ordenados por nome. Esta consulta usa uma junção para relacionar as informações em uma tabela com as informações em outra tabela.

SELECT department_name, last_name, first_name
    FROM employee_table INNER JOIN department_table
        ON employee_table.department_ID = department_table.department_ID
    ORDER BY department_name, last_name, first_name;
+------------------+------------+------------+
| DEPARTMENT_NAME  | LAST_NAME  | FIRST_NAME |
|------------------+------------+------------|
| Customer Support | Comstock   | Dana       |
| Customer Support | Levine     | Terry      |
| Engineering      | Montgomery | Pat        |
+------------------+------------+------------+
Copy

Seleção de uma coluna por posição

Este exemplo mostra como usar $ para especificar uma coluna por número de coluna, em vez de por nome de coluna:

SELECT $2 FROM employee_table ORDER BY $2;
+------------+
| $2         |
|------------|
| Comstock   |
| Levine     |
| Montgomery |
+------------+
Copy

Especificação de um alias para uma coluna na saída

Este exemplo mostra que as colunas de saída não precisam ser retiradas diretamente das tabelas da cláusula FROM; as colunas de saída podem ser expressões gerais. Este exemplo calcula a área de um círculo que tem um raio de 2,0. Este exemplo também mostra como usar um alias de coluna para que a saída tenha um nome de coluna significativo:

SELECT pi() * 2.0 * 2.0 AS area_of_circle;
+----------------+
| AREA_OF_CIRCLE |
|----------------|
|   12.566370614 |
+----------------+
Copy