Usando where podemos filtrar conteúdo baseado em uma condição. Se a condição for verdadeira(true) é retornado o valor que foi posto sob condição.
A condição pode ter uma ou várias expressões. Uma expressão sempre é avaliada e retorna um de três valores verdadeiro(true), falso(false) ou desconhecido(unknown). As expressões dentro do where também são conhecidas como predicados.
Além de ser usado dentro do select, where pode
A Tabela que Usaremos nos Testes
Antes de iniciarmos os exemplos vamos ver estrutura e conteúdo da tabela que usaremos
Vamos logar no Mysql ou MariaDB
sudo mysql -u root -p
Digite “use nation;” para usarmos o banco de dados nation que criamos no artigo anterior. Mas se tiver outro banco criado por você mesmo pode usá-lo.
MariaDB [(none)]> use nation;
Vamos ver a descrição da tabela languages. Execute describe languages;
MariaDB [nation]> describe languages; +-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | language_id | int(11) | NO | PRI | NULL | auto_increment | | language | varchar(50) | NO | | NULL | | +-------------+-------------+------+-----+---------+----------------+ 2 rows in set (0.004 sec)
Vamos ver o conteúdo da tabela languages. Execute select * from languages;
MariaDB [nation]> select * from languages; +-------------+---------------------------+ | language_id | language | +-------------+---------------------------+ | 1 | Dutch | | 2 | English | | 3 | Papiamento | | 4 | Spanish | | 5 | Balochi | | 6 | Dari | | 7 | Pashto | | 8 | Turkmenian | | 9 | Uzbek | | 10 | Ambo |
O conteúdo acima foi resumido para não poluir a página com tanta informação
Exemplos de Select com where
#1 Vamos exibir uma linha que tenha Brazil escrito. Execute select * from languages where language=’Portuguese’;
MariaDB [nation]> select * from languages where language='Portuguese'; +-------------+------------+ | language_id | language | +-------------+------------+ | 24 | Portuguese | +-------------+------------+ 1 row in set (0.001 sec)
#2 Agora vamos ver os valores da coluna language_id que sejam menores que 10. Execute select * from languages where language_id < 10;
MariaDB [nation]> select * from languages where language_id < 10; +-------------+------------+ | language_id | language | +-------------+------------+ | 1 | Dutch | | 2 | English | | 3 | Papiamento | | 4 | Spanish | | 5 | Balochi | | 6 | Dari | | 7 | Pashto | | 8 | Turkmenian | | 9 | Uzbek | +-------------+------------+ 9 rows in set (0.002 sec)
#3 Iremos usar and(significa e) para pegarmos valores maiores ou igual(=>=) a 15 e(and) menores o igual(<= a 20.
Execute: select * from languages where language_id >= 15 and language_id <= 20;
MariaDB [nation]> select * from languages where language_id >= 15 and language_id <= 20; +-------------+-----------------+ | language_id | language | +-------------+-----------------+ | 15 | Luvale | | 16 | Mbundu | | 17 | Nyaneka-nkhumbi | | 18 | Ovimbundu | | 19 | Albaniana | | 20 | Greek | +-------------+-----------------+ 6 rows in set (0.001 sec)
#5 Usando o mesmo comando acima mas usando between(entre) para selecionarmos um intervalo.
MariaDB [nation]> select * from languages where language_id between 15 and 20 ; +-------------+-----------------+ | language_id | language | +-------------+-----------------+ | 15 | Luvale | | 16 | Mbundu | | 17 | Nyaneka-nkhumbi | | 18 | Ovimbundu | | 19 | Albaniana | | 20 | Greek | +-------------+-----------------+ 6 rows in set (0.001 sec)
#6 usando o operador or(que significa ou). selecionaremos as linguagens com ID 20 ou 34. Execute: select * from languages where language_id = 20 or language_id = 34 ;
MariaDB [nation]> select * from languages where language_id = 20 or language_id = 34 ; +-------------+----------------+ | language_id | language | +-------------+----------------+ | 20 | Greek | | 34 | Canton Chinese | +-------------+----------------+ 2 rows in set (0.004 sec)
#7 Usando o operador in passar uma lista de itens. Execute select * from languages where language in(‘Portuguese’, ‘chinese’, ‘outro’); para ver se um ou os 3 itens da lista estão na tabela.
MariaDB [nation]> select * from languages where language in('Portuguese', 'chinese', 'outro'); +-------------+------------+ | language_id | language | +-------------+------------+ | 24 | Portuguese | | 79 | Chinese | +-------------+------------+ 2 rows in set (0.001 sec)
#8 Usando o operador like para buscarmos usando um padrão. Podemos usar dois wildcards:
- % corresponde(match) a um ou mais caracteres
- _ corresponde(ou match) a um caractere
Abaixo buscamos por linguagens iniciadas com P
MariaDB [nation]> select * from languages where language like 'p%'; +-------------+----------------------+ | language_id | language | +-------------+----------------------+ | 3 | Papiamento | | 7 | Pashto | | 24 | Portuguese | | 40 | Polish | | 97 | Punjabi | | 106 | Puyi | | 134 | Punu | | 176 | Pohnpei | | 181 | Punu-sira-nzebi | | 207 | Philippene Languages | | 235 | Persian | | 331 | Polynesian Languages | | 356 | Pitcairnese | | 363 | Pampango | | 364 | Pangasinan | | 365 | Pilipino | | 367 | Palau | | 368 | Papuan Languages | | 417 | Paiwan | +-------------+----------------------+ 19 rows in set (0.001 sec)