# 10.5.1- SELECT - O Comando essencial

## Módulo 3 – Introdução à Linguagem SQL: Consultando os Dados

Agora que já estruturamos nosso banco de dados no Supabase, com suas respectivas tabelas, colunas e chaves, é hora de aprendermos a **consultar** as informações que foram armazenadas. Para isso, utilizaremos a linguagem **SQL (Structured Query Language)** – a linguagem padrão utilizada para comunicação com bancos de dados relacionais.

Com SQL, é possível realizar diversas operações, como: buscar registros, inserir novos dados, atualizar valores existentes ou até mesmo excluir informações. Neste módulo, o foco será no comando mais utilizado do SQL: o **`SELECT`**. Ele permite **visualizar os dados** armazenados em uma ou mais tabelas.

***

### Consulta Básica: `SELECT * FROM nome_da_tabela`

A forma mais simples de consultar dados é utilizando o `SELECT` para retornar **todas as colunas** de uma tabela.

**Sintaxe:**

```sql
SELECT * FROM nome_da_tabela;
```

**Explicação:**

* `SELECT`: palavra-chave que inicia a consulta.
* `*`: símbolo curinga que indica todas as colunas.
* `FROM`: indica de qual tabela os dados serão consultados.
* `nome_da_tabela`: nome da tabela que será consultada.
* `;`: indica o fim do comando.

**Exemplo:**\
Suponha a seguinte tabela chamada `usuarios`:

| id (PK)     | nome           | email                    | data\_nascimento | cidade         |
| ----------- | -------------- | ------------------------ | ---------------- | -------------- |
| f47ac10b... | João Silva     | <joao.silva@email.com>   | 2006-05-10       | Rio de Janeiro |
| z9y8x7w6... | Maria Souza    | <maria.s@outroemail.com> | 2007-11-22       | São Paulo      |
| a1b2c3d4... | Carlos Pereira | <carlos.p@email.com>     | 2005-02-15       | Rio de Janeiro |

Com o comando:

```sql
SELECT * FROM usuarios;
```

Você visualizará todas as colunas e linhas da tabela.

> **Dica:** No Supabase, esse tipo de comando pode ser executado diretamente no **SQL Editor** (ícone `</>` no painel).

***

### Selecionando Colunas Específicas

Se não for necessário visualizar todas as colunas, é possível selecionar apenas aquelas que forem relevantes para a consulta.

**Sintaxe:**

```sql
 coluna1, coluna2 FROM nome_da_tabela;
```

**Exemplo:**

```sql
nome, email FROM usuarios;
```

**Resultado esperado:**

| nome           | email                    |
| -------------- | ------------------------ |
| João Silva     | <joao.silva@email.com>   |
| Maria Souza    | <maria.s@outroemail.com> |
| Carlos Pereira | <carlos.p@email.com>     |

***

### Aplicando Filtros com `WHERE`

A cláusula `WHERE` permite restringir os resultados com base em condições lógicas.

**Sintaxe:**

```sql
coluna1, coluna2 FROM nome_da_tabela WHERE condicao;
```

#### Operadores comuns:

* `=` : igual
* `>` : maior que
* `<` : menor que
* `>=`, `<=`: maior/menor ou igual
* `<>` ou `!=`: diferente de

**Exemplos:**

1. Usuários do Rio de Janeiro:

```sql
SELECT * FROM usuarios WHERE cidade = 'Rio de Janeiro';
```

2. Nomes dos usuários nascidos antes de 2007:

<pre class="language-sql"><code class="lang-sql"><strong>Select nome FROM usuarios WHERE data_nascimento &#x3C; '2007-01-01';
</strong></code></pre>

3. Posts que **não** foram feitos pelo João (supondo o ID dele):

<pre class="language-sql"><code class="lang-sql"><strong>SELECT texto_do_post FROM posts WHERE usuario_id &#x3C;> 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
</strong></code></pre>

***

### Combinando Condições com `AND` e `OR`

É possível combinar múltiplas condições utilizando os operadores lógicos `AND` e `OR`.

* `AND`: todas as condições devem ser verdadeiras.
* `OR`: pelo menos uma das condições deve ser verdadeira.

**Exemplos:**

1. Usuários do Rio de Janeiro **e** nascidos antes de 2007:

```sql
Select  nome FROM usuarios 
WHERE cidade = 'Rio de Janeiro' AND data_nascimento < '2007-01-01';
```

2. Posts do João **ou** com mais de 20 curtidas:

```sql
SELECT texto_do_post FROM posts 
WHERE usuario_id = 'f47ac10b-58cc-4372-a567-0e02b2c3d479' OR numero_likes > 20;
```

> **Observação:** Use parênteses para tornar a lógica da condição mais clara, especialmente ao misturar `AND` e `OR`.

***

### Ordenando Resultados com `ORDER BY`

Para exibir os dados em uma ordem específica, utilize a cláusula `ORDER BY`.

**Sintaxe:**

```sql
SELECT ... FROM ... WHERE ... ORDER BY coluna [ASC | DESC];
```

* `ASC` (padrão): ordem crescente.
* `DESC`: ordem decrescente.

**Exemplos:**

1. Ordenar usuários por nome (A–Z):

```sql
SELECT nome, email FROM usuarios ORDER BY nome;
```

2. Posts do mais recente para o mais antigo:

```sql
SELECT texto_do_post, data_publicacao FROM posts ORDER BY data_publicacao DESC;
```

3. Usuários do Rio de Janeiro, do mais novo para o mais velho:

```sql
SELECT nome, data_nascimento 
FROM usuarios 
WHERE cidade = 'Rio de Janeiro' 
ORDER BY data_nascimento DESC;
```
