Database
 sql >> Base de Dados >  >> RDS >> Database

Operador SQL diferente de () para iniciantes


Em SQL, o operador diferente de (<> ) compara a não igualdade de duas expressões. Ou seja, ele testa se uma expressão não igual a outra expressão.

Se um ou ambos os operandos forem NULL , NULL é devolvido.

SQL também tem outro operador diferente de (!= ), que faz a mesma coisa. Qual deles você usa pode depender do seu DBMS, qual você se sente mais confortável em usar e talvez também se sua organização possui convenções de codificação que determinam qual deve ser usado.

Tabela de origem


Imagine que nosso banco de dados contém a tabela a seguir. Esta é a tabela que usaremos para os exemplos nesta página.
SELECT * FROM Pets;

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Exemplo


Se quiséssemos pegar todos os animais de estimação que não tem um certo dono, poderíamos fazer isso:
SELECT *
FROM Pets
WHERE OwnerId <> 3;

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Nossa consulta usa o operador diferente de (<> ) para testar se o OwnerId coluna não é igual a 3 . A consulta retorna todos os animais de estimação que não possuem o proprietário número 3 como proprietário.

Cordas


Ao comparar com um valor de string, use aspas ao redor da string. Por exemplo, se quisermos obter informações sobre todos os animais de estimação que não são chamados de Fluffy, podemos fazer o seguinte:
SELECT *
FROM Pets
WHERE PetName <> 'Fluffy';

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Várias Condições


Se você tiver várias condições, poderá usar vários operadores (sejam os mesmos operadores ou diferentes).

Assim:
SELECT * FROM Pets 
WHERE OwnerId <> 1 AND OwnerId <> 3;

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Negando a condição


Se você usar o NOT operador para negar a condição fornecida pelo operador diferente de, você acabará obtendo os resultados do igual a (= ) operador:
SELECT *
FROM Pets
WHERE NOT PetName <> 'Fluffy';

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Nesse caso, é melhor usar o igual a (= ) operador, assim:
SELECT *
FROM Pets
WHERE PetName = 'Fluffy';

Claro, isso em si poderia ser negado com o NOT operador, que nos daria o mesmo resultado que igual a (<> ) operador nos dá:
SELECT *
FROM Pets
WHERE NOT PetName = 'Fluffy';

Valores NULOS


Você deve ter notado que nossa tabela de amostra original contém algumas NULL valores na coluna DOB.

Uma coluna contendo NULL significa que não tem valor. Isso é diferente de 0 ou false , ou até mesmo uma string vazia.

Você não pode usar o operador diferente de para comparar com NULL . Na verdade, isso pode depender do seu DBMS e de sua configuração. Mas, por enquanto, vamos ver o que acontece se eu tentar comparar a coluna DOB com NULL .
SELECT * FROM Pets 
WHERE DOB <> NULL;

Resultado:
(0 rows affected)

A maneira de testar não NULL valores é usar IS NOT NULL .

Portanto, precisaríamos reescrever a afirmação acima da seguinte forma.
SELECT * FROM Pets 
WHERE DOB IS NOT NULL;

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Agora temos apenas as linhas que não são NULL no DOB coluna.

Se estiver interessado, consulte SQL Server ANSI_NULLS Explained para ver como você pode alterar o modo NULL os valores são tratados no SQL Server.