A instrução SELECT faz parte do grupo DQL (Data Query Language) e tem como finalidade a extração de informações de bancos de dados, podendo definir quais as colunas devem ser devolvidas no resultado.

Visão geral

Embora seja simples o conceito da instrução, existem diversas cláusulas que o auxiliam no momento de trazer as informações do banco de dados no formato desejado pelo desenvolvedor. Essas cláusulas serão vistas em mais detalhes nas próximas páginas da documentação.

Sintaxe simplificada

SELECT
  [ coluna1, coluna2, ... | * ]
FROM
  [ tabela1, tabela2, ... ]
  

Sintaxe completa

SELECT
[
   tabela.coluna1, tabela.coluna2, … |
   * |
   (SUBQUERY) AS alias_campo,
   [FUNÇÃO AGREGADA] (tabela.coluna1)
]
FROM
[
  tabela1 |
  tabela1, tabela2 |
  (SUBQUERY) AS alias_tabela
]
WHERE
[
    tabela1.coluna1 LIKE (condição) |
    tabela1.coluna1 IN ( Valores | SUBQUERY ) |
      EXISTS (SUBQUERY)
]
GROUP BY
[
    Tabela1.coluna1, tabela1.coluna2 ...
]
HAVING
[
    tabela.coluna1 [FUNÇÕES AGREGADAS (tabela1.coluna1)]
]
ORDER BY
[
    tabela.coluna1, tabela.coluna2, ...
]

Na prática

Exemplo 1

Para este primeiro exemplo, considere o seguinte cenário:

Uma escola possui uma tabela chamada aluno (Tabela 1), responsável por armazenar a informação de todos os alunos da escola.

Id nome email
1 João Fernando joao@gmail.com
2 Maria Carvalho maria@gmail.com
3 Bruna dos Santos bruna@gmail.com
4 Pedro da Silva pedro@gmail.com
5 Tiago Pereira tiago@gmail.com
Tabela 1. Estrutura da tabela aluno

Supondo que desejamos buscar por todos os alunos. Para isso utilizamos a instrução SELECT, conforme o trecho de código abaixo demonstra:

SELECT
   *
FROM
  aluno

Note acima que utilizamos a instrução SELECT passando * para trazer todas as colunas no resultado, conforme ilustra a Tabela 2.

id nome email
1 João Fernando joao@gmail.com
2 Maria Carvalho maria@gmail.com
3 Bruna dos Santos bruna@gmail.com
4 Pedro da Silva pedro@gmail.com
5 Tiago Pereira tiago@gmail.com
Tabela 2. Resultado da consulta utilizando a instrução SELECT *

Exemplo 2

Esta instrução pode também definir quais colunas serão obtidas como resultado da consulta. Suponhamos que desejamos trazer apenas o nome e o email de todos os alunos da tabela aluno, podemos utilizar para isso a query abaixo.

SELECT
  nome,
  email 
FROM
  aluno

O resultado da query acima pode ser visto na Tabela 3

.
nome email
João Fernando joao@gmail.com
Maria Carvalho maria@gmail.com
Bruna dos Santos bruna@gmail.com
Pedro da Silva pedro@gmail.com
Tiago tiago@gmail.com
Tabela 3. Resultado da consulta utilizando a instrução SELECT definindo as colunas presentes no resultado

Note aqui a ausência do campo Id, pois o mesmo não foi selecionado na listagem de colunas da instrução SELECT.

Exemplo 3

Ao realizar uma consulta, podemos também definir um alias (apelido) para a mesma no resultado.

Para este exemplo, considere mais uma tabela neste cenário, a tabela professor (Tabela 4), responsável por armazenar a informação de todos os professores da instituição.

id nome dtcad Id_turma
1 Elson Marques 2018-03-01 1
2 Pedro Botelho 2018-03-01 1
3 Janaína Braga 2016-06-04 2

4 Lucas Gonçalves 2017-02-01 2
5 Gilmar Mendes 2017-02-01 1
Tabela 4. Tabela professor

Suponhamos que desejamos trazer todos os dados da tabela professor de forma que o significado das colunas dtcad e id_turma fique mais legível no resultado:

SELECT
  nome,
  dtcad as Admissao,
  id_turma as Turma 
FROM
  professor

Observe que no trecho de código acima utilizamos um apelido para os campos dtcad e id_turma, que foram definidos através da palavra reservada AS. O resultado da consulta pode ser visto na Tabela 5.

nome Admissao Turma
Elson Marques 2018-03-01 1
Pedro Botelho 2018-03-01 1
Janaína Braga 2016-06-04 2
Lucas Gonçalves 2017-02-01 2
Gilmar Mendes 2017-02-01 1
Tabela 5. Resultado da consulta com os nomes das colunas alterados

Veja que retornamos os dados de todos os professores e, além disso, utilizamos ALIAS para renomear no resultado a coluna dtcad para Admissão e id_turma para Turma.

Nota: mais exemplos de seleções com ALIAS podem ser vistas em FUNÇÕES AGREGADAS.

Exemplo 4

A instrução SELECT também pode ser utilizada em mais de uma tabela ao mesmo tempo. Para este exemplo adicionamos mais uma tabela ao cenário, a tabela turma (Tabela 6), responsável por armazenar os dados de todas as turmas da instituição.

Id Nome
1 Turma A
2 Turma B
Tabela 6. Tabela turma

Suponhamos que queremos exibir o mesmo resultado visto no Exemplo 3 (Tabela 5), porém, no lugar da coluna Turma vir o ID da turma, queremos trazer o nome dessa turma.

Para trazer todos os professores e o nome da turma a qual o professor está vinculado, podemos utilizar o fragmento de código abaixo:

SELECT
 P.nome as Professor,
 T.nome as Turma
FROM 
 professor P, turma T
WHERE
 P.id_turma = T.id

Observe que na query acima o comando SELECT foi utilizado para realizar a consulta em duas tabelas diferentes, na tabela professor e na tabela turma.

Dessa forma obtivemos o resultado ilustrado na Tabela 7.

Professor Turma
Elson Marques Turma A
Pedro Botelho Turma A
Janaína Braga Turma B
Lucas Gonçalves Turma B
Gilmar Mendes Turma A
Tabela 7. Resultado da consulta de professores, trazendo os dados relacionados a turma vinculada

Em caso de SELECT feito em mais de uma tabela, é recomendado o uso de ALIAS para evitar o conflito entre as colunas do resultado.

Saiba mais Veja a Série SQL nível Jedi: Subqueries