3.1 Comparando valores: <, >, =, <>
Uma das palavras-chave mais comuns usadas ao escrever consultas SQL é a WHERE
. É com sua ajuda que informamos ao MySQL quais linhas da tabela queremos filtrar (selecionar).
Após a palavra-chave, WHERE
você pode escrever condições muito complexas e complicadas. Então, quais operações essa condição pode conter?
Operador | Descrição | Exemplo |
---|---|---|
< | Menos | salário <40000 |
> | Mais | salário > 100.000 |
<= | menor ou igual | idade <= 25 |
>= | Mais ou igual | idade >= 18 |
= | É igual a | ocupação = 'Programador' |
<>, != | Não igual | Year(join_date) != 2015 |
Ao contrário da linguagem Java, para igualdade estrita, um caractere igual é usado aqui, e não dois .
Se você deseja verificar se os valores não são iguais, isso pode ser feito de duas maneiras: A <>
primeira !=
abordagem é usada em linguagens como Pascal, a segunda é típica para linguagens como C ++ e Java.
Para atribuição em SQL, é usado :=
como em Pascal, mas a atribuição em si é usada muito raramente.
Vamos escrever uma consulta onde mostramos todos os funcionários que não foram contratados em 2015.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programador | 100.000 | 25 | 30/06/2012 |
2 | Petrov Petr | Programador | 80.000 | 23 | 12/08/2013 |
3 | Ivanov Sergei | Testador | 40.000 | trinta | 2014-01-01 |
6 | Vaska | gato | 1.000 | 3 | 2018-01-01 |
3.2 Operações lógicas E, OU, NÃO
Você também pode WHERE
usar as operações lógicas AND
, OR
e NOT
. E eles estão escritos exatamente como eu os descrevi aqui. Nenhum &&
, ||
ou!
Vamos escrever uma consulta SQL onde selecionamos funcionários com mais de 20 anos e recebem um salário inferior a 50 mil.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
3 | Ivanov Sergei | Testador | 40.000 | trinta | 2014-01-01 |
5 | Kirienko Anastácia | Gerente | 40.000 | 25 | 2015-10-10 |
Muito fácil. Vamos escrever uma consulta onde selecionamos funcionários que recebem mais de 100K e não trabalham como diretor:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
Aqui usamos especificamente !=
o operador em vez do símbolo NOT
.
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programador | 100.000 | 25 | 30/06/2012 |
3.3 ENTRE: intervalo de valores
Também no SQL existe um operador especial BETWEEN
com o qual você pode verificar se uma variável está entre dois valores. Este operador é usado dentro de expressões booleanas. A forma geral de tal operador é:
variable BETWEEN bottom line AND top_bound
Nesse caso, ao contrário da linguagem Java, os limites inferior e superior estão incluídos no intervalo permitido.
Vamos escrever um exemplo onde selecionamos todos os funcionários com salário de 40K a 100K. A solicitação ficará assim:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programador | 100.000 | 25 | 30/06/2012 |
2 | Petrov Petr | Programador | 80.000 | 23 | 12/08/2013 |
3 | Ivanov Sergei | Testador | 40.000 | trinta | 2014-01-01 |
5 | Kirienko Anastácia | Gerente | 40.000 | 25 | 2015-10-10 |
O operador BETWEEN
suporta não apenas tipos numéricos, mas também datas e até mesmo tipos de string . No caso de trabalhar com strings, utiliza-se a ordem lexicográfica: aaba vem antes de aabb
3.4 IN: lista de valores
Além disso, o SQL possui um operador especial IN
com o qual você pode verificar se uma variável está contida na lista especificada. Este operador é usado dentro de expressões booleanas. A forma geral de tal operador é:
variable IN (value 1 , value 2 , ... value N)
Vamos escrever uma consulta na qual selecionamos funcionários com 20, 25 ou 30 anos. A solicitação ficará assim:
SELECT * FROM employee WHERE age IN (20, 25, 30)
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programador | 100.000 | 25 | 30/06/2012 |
3 | Ivanov Sergei | Testador | 40.000 | trinta | 2014-01-01 |
5 | Kirienko Anastácia | Gerente | 40.000 | 25 | 2015-10-10 |
E agora vamos escrever uma consulta, onde, ao contrário, selecionamos funcionários com idade de not
20, 25 ou 30 anos. A consulta ficará assim:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
2 | Petrov Petr | Programador | 80.000 | 23 | 12/08/2013 |
4 | Rabinovich Moisha | Diretor | 200.000 | 35 | 2015-05-12 |
6 | Vaska | gato | 1.000 | 3 | 2018-01-01 |
Tudo funcionou como esperado. Beleza.
3.5 LIKE: padrão de string
E, finalmente, outro operador importante e muito usado - LIKE
. É usado ao comparar strings. Ele pode ser usado para definir um padrão de string. Este operador é usado dentro de expressões booleanas. A forma geral de tal operador é:
variable LIKE 'sample'
Caracteres especiais podem ser usados no padrão: %
e _
.
- Sublinhado significa qualquer caractere, sempre 1 pc.
- Porcentagem significa qualquer caractere e qualquer número de vezes (incluindo 0 vezes).
Vamos escrever uma consulta que selecionará todas as pessoas cujo sobrenome começa com a letra "I". A solicitação ficará assim:
SELECT * FROM employee WHERE name LIKE 'I%'
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programador | 100.000 | 25 | 30/06/2012 |
3 | Ivanov Sergei | Testador | 40.000 | trinta | 2014-01-01 |
Agora vamos complicar a tarefa - o nome deve conter "o" e o nome deve terminar com "a". A solicitação ficará assim:
SELECT * FROM employee WHERE name LIKE '%o%a'
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
4 | Rabinovich Moisha | Diretor | 200.000 | 35 | 2015-05-12 |
Ok, vamos tornar isso um pouco mais difícil. Vamos filtrar todos os funcionários cuja idade começa com o número "3". A solicitação ficará assim:
SELECT * FROM employee WHERE age LIKE '3%'
E obtemos o seguinte resultado da consulta:
eu ia | nome | ocupação | salário | idade | data de afiliação |
---|---|---|---|---|---|
3 | Ivanov Sergei | Testador | 40.000 | trinta | 2014-01-01 |
4 | Rabinovich Moisha | Diretor | 200.000 | 35 | 2015-05-12 |
6 | Vaska | gato | 1.000 | 3 | 2018-01-01 |
A propósito, nossa coluna de idadeint
é do tipo , portanto LIKE
não funciona apenas com strings. O que não pode deixar de se alegrar.
GO TO FULL VERSION