No SQL, um operador é um caractere especial ou palavra-chave que especifica uma ação que é executada em uma ou mais expressões.
Os operadores SQL são parte integrante do SQL e nos permitem escrever consultas que retornam resultados relevantes.
Neste artigo, apresento 12 dos operadores SQL mais usados ao escrever consultas SQL.
Os Iguais (=
) Operador
O operador Equals (
=
) é provavelmente o operador mais usado em SQL. Ele compara a igualdade de duas expressões. Mesmo que você não esteja mais do que vagamente familiarizado com o SQL, provavelmente conhecerá esse operador. Imagine que temos um banco de dados para um hotel para animais de estimação e queremos obter informações sobre todos os animais de estimação chamados Fluffy.
Nesse caso, poderíamos fazer assim:
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy';
Resultado:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
Nossa consulta usa o operador Equals (
=
) para comparar a igualdade do valor do PetName
coluna e a string Fluffy
. No nosso caso, podemos ver que o pet hotel atualmente possui dois pets chamados Fluffy.
O maior que (>
) Operador
O operador Maior que (
>
) compara duas expressões e retorna TRUE
se o operando esquerdo tiver um valor maior que o operando direito; caso contrário, o resultado é FALSE
. SELECT PetName, DOB
FROM Pets
WHERE DOB > '2020-01-01';
Resultado:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fluffy | 2020-11-20 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | +-----------+------------+
Neste caso, está comparando o valor do
DOB
coluna e a data 2020-01-01
para ver se o DOB
coluna é maior. O menor que (<
) Operador
O operador Menor que (
<
) faz o contrário. Ele compara duas expressões e retorna TRUE
se o operando esquerdo tiver valor inferior ao operando direito; caso contrário, o resultado é FALSE
. SELECT PetName, DOB
FROM Pets
WHERE DOB < '2020-01-01';
Resultado:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | +-----------+------------+
O maior ou igual a (>=
) Operador
O operador Maior ou igual a (
>=
) compara duas expressões e retorna TRUE
se o operando esquerdo tiver valor maior ou igual ao operando direito; caso contrário, retorna FALSE
. SELECT PetName, DOB
FROM Pets
WHERE DOB >= '2020-09-17';
Resultado:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fluffy | 2020-11-20 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | +-----------+------------+
Observe que ele retornou
2020-09-17
e todas as datas maiores que isso. Se tivéssemos usado o operador Greater Than (>
), apenas as duas primeiras linhas teriam sido retornadas. O menor ou igual a (<=
) Operador
O operador Menor ou igual a (
<=
) compara duas expressões e retorna TRUE
se o operando esquerdo tiver valor menor ou igual ao operando direito; caso contrário, o resultado é FALSE
. SELECT PetName, DOB
FROM Pets
WHERE DOB <= '2020-09-17';
Resultado:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Fluffy | 2020-09-17 | +-----------+------------+
Observe que ele retornou
2020-09-17
e todas as datas inferiores a isso. Se tivéssemos usado o operador Menor que (<
), apenas as três primeiras linhas teriam sido retornadas. O AND
Operador
O
AND
operador combina duas expressões booleanas e retorna TRUE
quando ambas as expressões são TRUE
. Aqui está um exemplo.
SELECT PetId, DOB
FROM Pets
WHERE PetName = 'Fluffy'
AND DOB > '2020-01-01';
Resultado:
+---------+------------+ | PetId | DOB | |---------+------------| | 1 | 2020-11-20 | | 6 | 2020-09-17 | +---------+------------+
Nesse caso, só obtemos detalhes dos animais de estimação cujo nome é Fofo e sua data de nascimento está entre as duas datas.
O OR
Operador
O
OR
operador combina duas expressões booleanas e retorna TRUE
quando uma das condições for TRUE
. Aqui está um exemplo.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Bark';
Resultado:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | +---------+-----------+------------+
Isso é basicamente o oposto do
AND
operador. Se tivéssemos usado AND
, nenhuma linha teria sido retornada, pois não podemos ter dois valores diferentes em uma coluna ao mesmo tempo. O BETWEEN
Operador
O
BETWEEN
operador nos permite especificar um intervalo para testar. Por exemplo, podemos usá-lo para devolver animais de estimação que nasceram entre duas datas. SELECT
PetName,
DOB
FROM Pets
WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';
Resultado:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | +-----------+------------+
O NOT
Operador
O
NOT
O operador nega uma entrada booleana (inverte o valor de qualquer expressão booleana). Portanto, retorna TRUE
quando a expressão é FALSE
. Veja o que acontece quando adicionamos o
NOT
operador para o nosso exemplo anterior. SELECT
PetName,
DOB
FROM Pets
WHERE DOB NOT BETWEEN '2018-01-01' AND '2020-01-01';
Resultado:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fluffy | 2020-11-20 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | +-----------+------------+
Desta vez, pegamos todos os outros animais de estimação – os animais que não eram nascidos entre essas datas.
No MariaDB,
NOT
está limitado a negar o IN
, BETWEEN
, e EXISTS
cláusulas. A maioria dos outros SGBDs permite NOT
para negar qualquer expressão. O IN
Operador
O
IN
O operador determina se um valor especificado corresponde a qualquer valor em uma subconsulta ou lista. Aqui está um exemplo.
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');
Resultado:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 4 | Wag | 2020-03-15 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | +---------+-----------+------------+
Poderíamos obter o mesmo resultado usando dois
OR
operadores:SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR PetName = 'Bark'
OR PetName = 'Wag';
No entanto, o
IN
operador é uma maneira mais concisa de fazê-lo. O IN
O operador é especialmente benéfico quando você tem uma longa lista de valores para comparar. O
IN
operador quase sempre executa mais rápido que vários OR
operadores, especialmente em conjuntos de dados maiores. Outro benefício do
IN
operador, é que ele pode conter outro SELECT
Lista. Isso é conhecido como uma subconsulta . Uma subconsulta é uma consulta aninhada dentro de outra consulta (ou mesmo outra subconsulta). Aqui está um exemplo.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Resultado:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
Este exemplo nos mostra quantos tipos de animais de estimação existem em nosso hotel para animais de estimação.
Poderíamos usar o
NOT
operador para inverter isso e ver quantos tipos de animais de estimação não em nosso hotel para animais de estimação. SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );
Resultado:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
Portanto, nosso banco de dados contém um tipo de animal de estimação de
Rabbit
, mas atualmente não temos coelhos como animais de estimação. O +
e ||
Operadores de concatenação de string
O
+
e ||
Os operadores de concatenação de strings permitem concatenar strings. A concatenação de strings é a operação de unir strings de caracteres de ponta a ponta. A razão pela qual listei dois operadores que fazem a mesma coisa é porque, o
+
é suportado no SQL Server e o ||
O operador é suportado em DB2, Oracle, PostgreSQL, SQLite. Aqui está um exemplo que funciona no SQL Server.
SELECT
FirstName,
LastName,
FirstName + LastName
FROM Owners;
Resultado:
+-------------+------------+--------------------+ | FirstName | LastName | (No column name) | |-------------+------------+--------------------| | Homer | Connery | HomerConnery | | Bart | Pitt | BartPitt | | Nancy | Simpson | NancySimpson | | Boris | Trump | BorisTrump | +-------------+------------+--------------------+
Nesse caso, os proprietários têm seu nome e sobrenome armazenados em colunas diferentes. Em nosso
SELECT
list, primeiro os recuperamos individualmente, mas também os recuperamos novamente, usando um operador de concatenação para juntá-los. No entanto, existem alguns problemas com nossos resultados.
- Não há espaço entre o nome e o sobrenome.
- Não há nome de coluna.
Felizmente, isso é fácil de corrigir.
Podemos usar a mesma operação de concatenação para incluir espaço entre o nome e o sobrenome.
E podemos usar um alias de coluna para o resultado concatenado para fornecer um nome de coluna no conjunto de resultados.
SELECT
FirstName,
LastName,
FirstName + ' ' + LastName AS FullName
FROM Owners;
Resultado:
+-------------+------------+---------------+ | FirstName | LastName | FullName | |-------------+------------+---------------| | Homer | Connery | Homer Connery | | Bart | Pitt | Bart Pitt | | Nancy | Simpson | Nancy Simpson | | Boris | Trump | Boris Trump | +-------------+------------+---------------+
Se você estiver usando DB2, Oracle, PostgreSQL, SQLite, troque o
+
para ||
e deve funcionar bem. Se você estiver usando MySQL ou MariaDB, você precisará usar o
CONCAT()
função para concatenar strings. O LIKE
Operador
O
LIKE
operador permite que você faça a correspondência de padrões. Ele determina se uma cadeia de caracteres específica corresponde a um padrão especificado. Um padrão pode incluir caracteres regulares e caracteres curinga. SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com';
Resultado:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | +-------------+------------+-------------------+
Neste exemplo, usei o
LIKE
operador em conjunto com o %
operador curinga para retornar proprietários cujos endereços de e-mail terminam em .com
. Operador de bônus! O %
Operador curinga
O
%
operador curinga corresponde a qualquer cadeia de zero ou mais caracteres. Ele pode ser usado como prefixo ou sufixo, e também pode ser usado no meio de uma string. Ele tende a ser mais comumente usado como sufixo e tem uso limitado no meio de padrões, embora existam alguns casos de uso válidos para usá-lo no meio de um padrão, como o seguinte:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';
Resultado:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | +-------------+------------+------------------+
Nesse caso, não sabíamos o endereço de e-mail do bart, mas sabíamos que começava com
[email protected]
e terminou em .com
. Portanto, pudemos usar LIKE
em conjunto com o %
operador curinga para preencher o resto. Lembre-se de que essa técnica pode retornar muitas linhas irrelevantes, dependendo dos dados e de como você constrói sua instrução SQL.
Esteja ciente também de que as consultas que contêm o
LIKE
A cláusula pode ser executada muito mais lentamente do que outras consultas, e você provavelmente deve evitar usar o LIKE
cláusula a menos que você realmente precise dela. Usando o %
operador como um prefixo pode ser particularmente lento. Isso não quer dizer que você não deve usá-lo em tudo. O
LIKE
O operador é parte integrante do SQL e você encontrará muitos cenários em que será a única opção (ou pelo menos a melhor opção). Mais operadores SQL
Veja minha lista completa de operadores SQL para vários outros operadores que não estão incluídos aqui.