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 | |
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 |
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 | |
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 |
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 | |
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 |
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 |
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 |
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 |
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 |
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