Então, já começamos a mexer com o SELECT, o comando SQL feito pra buscar dados de uma tabela ou de várias tabelas no banco de dados. Dá pra dizer que é tipo o F5 do navegador, só que pro banco: "me mostra aí o que você tem". A estrutura básica da query é assim:
SELECT coluna1, coluna2, … colunaN
FROM tabela
Onde:
SELECT— é a palavra-chave que começa a query.coluna1, coluna2, ...— é a lista das colunas que você quer pegar os dados.FROM tabela— indica de qual tabela os dados vão ser extraídos.
Bora já quebrar isso em partes com exemplos!
Estrutura principal do comando SELECT
Selecionando todas as colunas. Se você quiser ver todos os dados da tabela, pode usar o asterisco *. Por exemplo, temos a tabela students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 17 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 21 | C |
Pra pegar todos os dados dessa tabela, usa essa query:
SELECT * FROM students
E o resultado vai ser esse conjunto de colunas e linhas:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 17 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 21 | C |
Ou seja — a tabela toda, do jeitinho que você pediu.
Selecionando colunas específicas
Claro que, na real, quase sempre você só quer pegar as colunas que precisa, pra não puxar dado à toa. Por exemplo, se você quer saber só os nomes e a idade dos estudantes. Aí a query fica assim:
SELECT name, age FROM students
O resultado dessa query vai ser:
| name | age |
|---|---|
| Alex | 17 |
| Maria | 19 |
| Otto | 21 |
Sacou a diferença? Quando você pega só as colunas que precisa, a query fica mais rápida e mais bonita.
Ordem de execução da query
Query SQL é meio traiçoeira: a gente escreve SELECT no começo, mas na real o banco primeiro processa a parte do FROM, e só depois devolve o resultado. Por baixo dos panos, rola assim:
- Processa a tabela do
FROM: o servidor acha a tabela que você falou. - Aplica condições nas linhas (se tiver): só pega as linhas que batem com as condições.
- Seleciona as colunas pedidas: das linhas que sobraram, pega os dados que você pediu.
Ou seja, numa query assim:
SELECT name FROM students
Primeiro o servidor acha a tabela students, depois lê a coluna name, e só aí devolve o resultado.
Exemplos práticos
Exemplo nº1: Lista de estudantes.
Imagina que você é admin da faculdade e precisa dos nomes de todos os estudantes. Query:
SELECT name
FROM students;
Resultado:
| name |
|---|
| Alex |
| Maria |
| Otto |
Exemplo nº2: Adicionando idade e id.
Agora você quer id, nome e idade. Só colocar mais umas colunas:
SELECT name, age, id
FROM students;
Resultado:
| name | age | id |
|---|---|---|
| Alex | 17 | 1 |
| Maria | 19 | 2 |
| Otto | 21 | 3 |
Exemplo nº3: Adicionando expressões.
Vamos supor que você quer saber quantos anos faltam pros seus estudantes serem maiores de idade.
Aí, em vez de age, coloca 21-age. Aqui a gente tá supondo que maioridade é aos 21:
SELECT name, 21-age
FROM students;
E o resultado vai ser:
| name | 21-age |
|---|---|
| Alex | 4 |
| Maria | 2 |
| Otto | 0 |
Você vai aprender mais sobre expressões nas próximas aulas. Agora bora ver os erros que provavelmente você já encontrou por aí.
Erros comuns ao usar SELECT
Erros de digitação nos nomes das tabelas e colunas.
Um dos erros mais comuns é quando o nome da tabela ou da coluna tá errado.
Se não existe a tabela studentsz no banco, você vai ver esse erro:
SELECT name
FROM studentsz; -- Erro: tabela não existe!
Ou se a coluna chama name, mas você escreveu student_name, de novo erro:
SELECT student_name -- Erro: coluna não existe!
FROM students;
O jeito é simples: sempre confere os nomes das tabelas e colunas.
Erros de sintaxe na query.
Outro erro comum — esqueceu a vírgula quando tava listando as colunas:
SELECT name age id -- Erro: faltou vírgula!
FROM students;
Mas relaxa. Query SELECT só busca dados. Qualquer erro desse tipo não vai estragar os dados do seu banco. Mas quando a gente chegar nas queries que mudam dados — aí sim o erro pode sair caro.
Usar * em vez de colunas específicas.
Quando você usa *, você pega TODOS os dados, até os que não precisa. Isso deixa tudo mais lento e pode ser ruim em tabelas grandes. Sempre pega só as colunas que realmente precisa.
GO TO FULL VERSION