Quando a gente puxa dados do banco, quase nunca precisa de todas as colunas. Por exemplo, na tabela de funcionários employees pode ter 15 colunas: nome, sobrenome, data de nascimento, cargo, salário, data de contratação e por aí vai. Mas tu só quer saber os nomes e cargos deles. Faz sentido, né? Puxar tudo é inútil e pesado. É aí que entra a arte de selecionar só as colunas que interessam.
Se for comparar, é tipo pegar só as maçãs de uma cesta cheia de laranjas, maçãs e bananas. Daora, né? É isso que vamos fazer!
Sintaxe
Lembra, SQL foi feito pra ser bem user-friendly.
Primeiro, maiúscula ou minúscula no comando não faz diferença. Tu pode escrever SELECT, Select ou select e vai funcionar igual. Segundo, quebra de linha não importa. O SGBD vai juntar tudo numa linha só, então escreve do jeito que tu achar melhor.
Como tu já deve imaginar, não é só SELECT e FROM que existem. Senão ninguém falava tanto de SQL. O formato mais completo do comando SQL é assim:
SELECT colunas
FROM tabela
WHERE condicao
GROUP BY colunas
HAVING colunas
ORDER BY ordenacao
Onde:
colunas— são os nomes das colunas que tu quer pegar.tabela— nome da tabela de onde tu vai puxar os dados.condicao— condição pra filtrar as linhas.ordenacao— linhas e ordem de ordenação.
Parece fácil? Bora ver isso num exemplo real. Mas vamos começar com exemplos mais simples.
Exemplo de consulta básica
Imagina que temos uma tabela students com dados dos estudantes. A estrutura da tabela pode ser assim:
| id | first_name | last_name | age | grade |
|---|---|---|---|---|
| 1 | Alex | Lin | 20 | A |
| 2 | Anna | Song | 22 | B |
| 3 | Otto | Art | 19 | A |
Agora a gente quer só os sobrenomes last_name e as notas grade de todos os estudantes.
A consulta vai ficar assim:
SELECT last_name, grade
FROM students;
Resultado:
| last_name | grade |
|---|---|
| Lin | A |
| Song | B |
| Art | A |
Parabéns, tu acabou de economizar recursos do banco e deixou o resultado bem mais fácil de ler!
Juntando strings
Selecionar dados tu já sabe, bora tentar algo mais legal. Na nossa tabela, nome e sobrenome estão em colunas separadas. Vamos fazer uma consulta que traga o nome completo do estudante numa coluna só.
Pra juntar duas strings no PostgreSQL, usa o operador ||. O SELECT vai ficar assim:
SELECT first_name || last_name, grade
FROM students;
Resultado:
| first_name || last_name | grade |
|---|---|
| AlexLin | A |
| AnnaSong | B |
| OttoArt | A |
Hmm. Faltou alguma coisa, né? Tipo um espaço entre nome e sobrenome! Bora arrumar isso.
SELECT first_name || ' ' || last_name, grade
FROM students;
Resultado:
| first_name || ' ' || last_name | grade |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Agora sim! O conteúdo da tabela ficou massa, mas e o cabeçalho? Seria melhor ver nome completo, ou só nome, mas não first_name || ' ' || last_name. Fica feio e nada prático. Mas tem solução pra isso também.
Selecionando com apelidos (alias)
Os comandos SQL ficam bem mais legíveis usando apelidos. É só dar um nome novo pra coluna no resultado da consulta. Pra isso, usa a palavra-chave AS (dá pra omitir, mas deixa com ela que fica mais claro).
Olha só:
SELECT first_name AS "Nome", last_name AS "Sobrenome", grade AS "Nota"
FROM students;
Resultado:
| Nome | Sobrenome | Nota |
|---|---|---|
| Alex | Lin | A |
| Anna | Song | B |
| Otto | Art | A |
Aqui a gente:
- Renomeou as colunas pra ficar mais claro em português.
- Usou alias no comando, com
AS.
Se teu chefe ou cliente precisa ver os dados dos usuários e não quer passar raiva lendo a tabela, alias é teu amigo.
Agora bora melhorar nossa consulta do nome completo.
SELECT first_name || ' ' || last_name AS "Nome completo", grade AS "Nota"
FROM students;
Resultado:
| Nome completo | Nota |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Top. Era isso que a gente queria.
Por que selecionar só algumas colunas?
- Performance
Imagina trabalhar com uma tabela gigante, milhões de linhas e centenas de colunas. Puxar tudo com SELECT * pode demorar minutos ou até horas, e vai pesar no servidor. Assim tu pega só o que interessa.
- Legibilidade
Quando tu pega só as colunas que precisa, o resultado fica muito mais fácil de entender. Senão parece que tu tá lendo um feed de notícias infinito numa sexta à noite.
- Menos chance de erro
Quanto menos dado tu processa na consulta, menor a chance de dar ruim. Principalmente se tu vai usar esses dados depois.
O que vale lembrar?
Apelidos pra tabelas
Outro jeito de lidar com nomes de tabelas grandes é usar alias pra tabela. Eles devem lembrar o nome original ou ter a ver com o conteúdo dela.
SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05
Esse jeito é muito útil quando o nome da tabela é gigante tipo university_students_enrollments_records, aí tu pode usar usr ou us
Erros comuns ao selecionar colunas específicas
Erro no nome da coluna. Se tu escrever o nome errado, vai aparecer um erro tipo:
ERROR: column "lastname" does not exist. Confere se escreveu certo.Conflito de nomes. Quando tem mais de uma tabela na consulta, sempre diz de qual tabela é o campo. Tipo
students.first_name.Usar
SELECT *— cilada pra iniciante. Funciona e é prático, mas em projetos grandes é má prática! Sempre seleciona só as colunas que tu realmente precisa.
GO TO FULL VERSION