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

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

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

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

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

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

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

SELECT * FROM Owners;

Резултат:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Simpson    | (489) 591-0408 | NULL              |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Пример

Ако искаме да върнем списък с всички собственици, които нямат OwnerId от 3 , можем да направим това:

SELECT *
FROM Owners
WHERE OwnerId != 3;

Резултат:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

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

Стрингове

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

SELECT *
FROM Owners
WHERE FirstName != 'Homer';

Резултат:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Simpson    | (489) 591-0408 | NULL              |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

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

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

Като това:

SELECT * FROM Owners 
WHERE OwnerId != 1 AND OwnerId != 3;

Резултат:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

След като започнете да използвате повече условия, трябва да използвате скоби, за да заобиколите условията, които искате да бъдат оценени първо. Ако не направите това, може да откриете, че получавате неочаквани резултати, поради условията, които се оценяват в ред, който не сте възнамерявали.

Отхвърляне на условието

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

SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';

Резултат:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
+-----------+-------------+------------+----------------+-------------------+

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

SELECT *
FROM Owners
WHERE FirstName = 'Homer';

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

SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';

NULL стойности

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

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

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

SELECT * FROM Owners 
WHERE Email != NULL;

Резултат:

(0 rows affected)

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

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

SELECT * FROM Owners 
WHERE Email IS NOT NULL;

Резултат:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

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

Ако се интересувате, вижте 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. Сравнете четири водещи IDE инструмента за база данни

  2. Как да изчислим квадрат в SQL

  3. Формат на датата на SQL:Как да се справяте с него по интелигентен начин

  4. Хостинг пакет на Chocolatey

  5. Част 3 – Клиенти, разговори и срещи