Introdução a Filtragem de Dados - SQL
Tags: beginners, sql, mysql
Published: 2022-02-23 21:23:26

## Tabela de Conteúdos

- [`WHERE`](#where)
- [`LIKE`](#like)
- [`IN`](#in)
- [`BETWEEN`](#between)
- [`DATE`](#date)
- [Links Úteis](#links-úteis)

---

## WHERE

### O que é?

É um comando que nos permite adicionar condicionais a uma pesquisa, atuando como um filtro.

### Filtros

Os filtros são feitos através de condicionais, essas condicionais são compostas por operadores lógicos, sendo possível adicionar mais filtros através dos operadores `AND` e `OR`.

Os operadores lógicos do MySQL incluem:

- __`=`__: igual
- __`<>`__: diferente
- __`>`__: maior
- __`<`__: menor
- __`>=`__: maior ou igual
- __`<=`__: menor ou igual
- __`IS`__: compara booleanos
- __`NOT`__: inverte o operador (negação)

### Sintaxe

O `WHERE` deve ser declarado após a definirmos a busca no `SELECT`, após isso informamos o filtro desejado.

``` sql
SELECT * FROM sakila.actors WHERE age >= 20;

-- A tradução literal dessa query seria:
-- Retorne todas as características dos atores que tenham 20 anos ou mais
```
``` sql
SELECT * FROM sakila.actors WHERE age >= 20 AND first_name <> 'john';

-- A tradução literal dessa query seria:
-- Retorne todas as características dos atores que tenham 20 anos ou mais E não se chamem John
```

<br />

<small>[Voltar ao topo](#tabela-de-conteúdos)</small>

___

## LIKE

### O que é?
É um comando utilizado para buscas de textos, fazendo a pesquisa ser mais dinâmica e maleável, assim conseguimos encontrar uma palavra apenas pelo seu início, fim ou _"meio"_.

### Adaptando termos
Para pesquisarmos por parte de uma palavra é necessário utilizar caracteres especiais, ou como são chamados _“curingas”_.

Esses caracteres são o sinal de porcentagem `%` e o underscore `_`, podemos intercalar eles em meio aos termos que desejamos pesquisar para construirmos um filtro mais maleável.

O sinal de porcentagem representa múltiplos caracteres, então se o colocarmos ao final de uma palavra, o MySQL entenderá que aquela palavra se trata do início. Já o underscore representa um único caractere.

``` sql
carro de mão  -- busca exatamente "carro de mão"

carr%  -- busca uma palavra que comece com "carr"

carro  -- busca exatamente "carro"

c__ro  -- busca uma palavra que comece com "c", possua 2 letras quaisquer e termine com "ro"
```

### Sintaxe

O `LIKE` funciona como um operador lógico, logo ele deve ser utilizado apenas após o `WHERE`, sendo necessário informar o termo de pesquisa através de string e utilizando os caracteres _“curingas”_.

``` sql
SELECT * FROM sakila.actors WHERE age >= 20 AND last_name LIKE 'ca%';

-- A tradução literal dessa query seria:
-- Retorne todas as características dos atores que o tenham 20 anos ou mais E com o sobrenome começando com "ca"
```

<br />

<small>[Voltar ao topo](#tabela-de-conteúdos)</small>

___

## IN

### O que é?

É um operador lógico que pode ser usado como uma condição para filtros, ele indica valores que estão dentro de uma coluna, comumente utilizado para substituir um encadeamento de `OR`.

Pode ser comparado ao método `.includes()` do JS.

### Sintaxe

O `IN` deve ser posicionado após o comando `WHERE` e os termos a serem pesquisados devem ser passados como argumento para o `IN`.

``` sql
SELECT * FROM sakila.actors WHERE age IN (20, 24, 32, 40);

-- A tradução literal dessa query seria:
-- Retorne todas as características dos atores que tenham 20, 24, 32 ou 40 anos
```

<br />

<small>[Voltar ao topo](#tabela-de-conteúdos)</small>

___

## BETWEEN

### O que é?

Assim como o `IN`, o `BETWEEN` é um operador lógico, que pode ser usado como condicional em filtros, ele limita a pesquisa a valores dentro de intervalo determinado por nós.

### Sintaxe

O `BETWEEN` deve ser utilizado após o `WHERE`.

Para definirmos o intervalo usamos além do comando `BETWEEN`, o operador `AND`, dessa forma o primeiro valor vai depois do `BETWEEN` e o segundo após o `AND`.

``` sql
SELECT * FROM sakila.actors WHERE age BETWEEN 20 AND 40;

-- A tradução literal dessa query seria:
-- Retorne todas as características dos atores que tenham ENTRE 20 E 40 anos
```
``` sql
SELECT * FROM sakila.languages
WHERE name BETWEEN 'italian' AND 'mandarim';

-- A tradução literal dessa query seria:
-- Retorne todas as características dos idiomas que estejam entre "italian" e "mandarim"
```

<br />

<small>[Voltar ao topo](#tabela-de-conteúdos)</small>

___

## DATE

### O que é?

É uma função que permite a utilização datas em nossas Queries.

### Encontrando datas

Podemos pesquisar por datas de duas formas diferentes, através da função `DATE`, caso estivermos fazendo uma comparação específica, ou através dos operadores `LIKE`, `BETWEEN` e `IN`.

### Sintaxe

Por ser uma função de conversão, o `DATE` pode ser usado em diferentes contextos, mas no caso de filtragem de dados iremos utilizá-lo como um conversor para o filtro.

Para fazermos a condicional com datas, devemos utilizar o formato __AAAA-MM-DD__ _(ANO-MÊS-DIA)_

``` sql
SELECT * FROM sakila.payment
WHERE DATE(payment_date) = '2005-07-31';

-- A tradução literal dessa query seria:
-- Retorne todas as características dos pagamentos que foram feitos dia 31 do 07 de 2005
```
``` sql
SELECT * FROM sakila.payment
WHERE payment_date BETWEEN '2005-05-26' AND '2005-06-26';

-- A tradução literal dessa query seria:
-- Retorne todas as características dos pagamentos realizados entre 26/05/2005 e 26/06/2006
```

*Obs: _Como visto no exemplo acima, nem sempre precisamos realizar a conversão de datas, apenas nos casos que vamos comparar valores específicos, em pesquisas de intervalos isso não é necessário_.

<br />

<small>[Voltar ao topo](#tabela-de-conteúdos)</small>

---

## Links Úteis

- [Execícios de SQL - HackerHank](https://www.hackerrank.com/domains/sql?filters%5Bsubdomains%5D%5B%5D=select)
- [Manual POP SQL - Pesquisa de Datas e Horários](https://popsql.com/learn-sql/mysql/how-to-query-date-and-time-in-mysql)

<br />

<small>[Voltar ao topo](#tabela-de-conteúdos)</small>