Database
 sql >> база данни >  >> RDS >> Database

SQL не е равен на () оператор за начинаещи

В SQL операторът не е равен на (<> ) сравнява неравенството на два израза. Тоест, тества дали един израз не равно на друг израз.

Ако единият или и двата операнда са NULL , NULL се връща.

SQL също има друг оператор, който не е равен на (!= ), което прави същото. Коя от тях ще използвате може да зависи от вашата СУБД, коя ви е най-удобно да използвате и може би също така дали вашата организация има някакви конвенции за кодиране, които диктуват коя трябва да се използва.

Изходна таблица

Представете си, че нашата база данни съдържа следната таблица. Това е таблицата, която ще използваме за примерите на тази страница.

SELECT * FROM Pets;

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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)

Пример

Ако искахме да вземем всички домашни любимци, които не имаме определен собственик, бихме могли да направим това:

SELECT *
FROM Pets
WHERE OwnerId <> 3;

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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       |
+---------+-------------+-----------+-----------+------------+

Нашата заявка използва оператора не е равно на (<> ), за да проверите дали OwnerId колоната не е равна на 3 . Заявката връща всички домашни любимци, които нямат собственик номер 3 като собственик.

Стрингове

Когато сравнявате със стойност на низ, използвайте кавички около низа. Например, ако искаме да получим информация за всички домашни любимци, които не се казват Fluffy, можем да направим следното:

SELECT *
FROM Pets
WHERE PetName <> 'Fluffy';

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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       |
+---------+-------------+-----------+-----------+------------+

Множество условия

Ако имате няколко условия, можете да използвате множество оператори (независимо дали и двата едни и същи или различни).

Като това:

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

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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       |
+---------+-------------+-----------+-----------+------------+

Отрицание на условието

Ако използвате NOT оператор за отхвърляне на условието, предоставено от оператора не е равно на, в крайна сметка ще получите резултатите от равно на (= ) оператор:

SELECT *
FROM Pets
WHERE NOT PetName <> 'Fluffy';

Резултат:

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

В този случай е по-добре просто да използвате равно на (= ) оператор, като този:

SELECT *
FROM Pets
WHERE PetName = 'Fluffy';

Разбира се, самото това може да бъде отречено с NOT оператор, който след това ще ни даде същия резултат като равен на (<> ) операторът ни дава:

SELECT *
FROM Pets
WHERE NOT PetName = 'Fluffy';

NULL стойности

Може да сте забелязали, че нашата оригинална примерна таблица съдържа няколко NULL стойности в колоната DOB.

Колона, съдържаща NULL означава, че няма стойност. Това е различно от 0 или false или дори празен низ.

Не можете да използвате оператора not equal to за сравнение с NULL . Всъщност това може да зависи от вашата СУБД и нейната конфигурация. Но засега нека да разгледаме какво се случва, ако се опитам да сравня колоната DOB с NULL .

SELECT * FROM Pets 
WHERE DOB <> NULL;

Резултат:

(0 rows affected)

Начинът за тестване за не-NULL стойности е да използвате IS NOT NULL .

Следователно ще трябва да пренапишем горното изявление, както следва.

SELECT * FROM Pets 
WHERE DOB IS NOT NULL;

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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 |
+---------+-------------+-----------+-----------+------------+

Сега получаваме само онези редове, които не са NULL в DOB колона.

Ако се интересувате, вижте SQL Server ANSI_NULLS Explained за да видите как можете да промените начина NULL стойностите се третират в SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматична настройка на Azure SQL база данни

  2. Обяснение на псевдонима на SQL

  3. AWS Database Migration Service DMS

  4. Генериране на набор или последователност без цикли – част 2

  5. Проектиране на база данни за многоезични приложения