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

SQL NOT оператор за начинаещи

В SQL, NOT Операторът отрича булев вход (той обръща стойността на всеки булев израз). Следователно връща TRUE когато изразът е FALSE .

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

Следната таблица се използва за примерите на тази страница.

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)

Пример 1

Ето един прост пример за демонстрация на NOT оператор.

SELECT * FROM Pets 
WHERE PetName NOT LIKE 'F%';

Резултат:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 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       |
+---------+-------------+-----------+-----------+------------+

В този случай използвахме NOT оператор за отричане на резултата от LIKE оператор. Нашата заявка връща всички домашни любимци, които не започват с буквата F.

Пример 2 – Използване на NOT с оператори за сравнение

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

Например, ако искате да го използвате, за да отричате оператора за равенство (= ), използвайте следния синтаксис:

SELECT * FROM Pets 
WHERE NOT 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       |
+---------+-------------+-----------+-----------+------------+

Това връща всички домашни любимци, чието име не е Fluffy.

В този пример поставяме NOT оператор пред името на колоната. Ако не го бяхме направили, щяхме да получим грешка, която е нещо подобно:

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

Резултат:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '='.

Можехме също да постигнем същия резултат, като използваме оператора не е равно на (или <> или != в зависимост от вашата СУБД).

Например това:

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

Или това:

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

Пример 3 – Същият синтаксис с логически оператори

Както се оказва, можем също да използваме този синтаксис, когато използваме логически оператори, като LIKE оператор, който използвахме в първия пример.

Следователно бихме могли да пренапишем първия пример на това:

SELECT * FROM Pets 
WHERE NOT PetName LIKE 'F%';

Резултат:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 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       |
+---------+-------------+-----------+-----------+------------+

В случай, че не сте сигурни каква е разликата, преместихме NOT оператор от след PetName колона до преди.

Ето двете твърдения заедно:

SELECT * FROM Pets 
WHERE PetName NOT LIKE 'F%';

SELECT * FROM Pets 
WHERE NOT PetName LIKE 'F%';

Пример 4 – Отричане на множество условия

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

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

Резултат:

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

Пример 5 – Приоритет

Когато използвате съставни условия, когато имате няколко оператора, NOT операторът се оценява преди всички логически оператори, но след всеки. оператори за сравнение,

Когато два оператора в израза имат едно и също ниво на приоритет, те се оценяват отляво надясно въз основа на тяхната позиция в израза. Въпреки това, можете да използвате скоби, за да посочите реда, в който искате да бъде оценено всяко условие.

Ето един пример.

SELECT * FROM Pets 
WHERE 
    NOT PetName = 'Fluffy'
    OR NOT PetName = 'Wag'
    AND NOT DOB > '2020-01-01';

Резултат:

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

Тук не използвахме никакви скоби и всички условия бяха отхвърлени с NOT оператор и така AND операторът имаше предимство пред OR оператор.

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

SELECT * FROM Pets 
WHERE 
    (NOT PetName = 'Fluffy'
    OR NOT PetName = 'Wag')
    AND NOT DOB > '2020-01-01';

Резултат:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
+---------+-------------+-----------+-----------+------------+

В този случай получаваме различен резултат.

Пример 6 – Отричайте оператора BETWEEN

Ето още един пример, този път с помощта на NOT оператор за отричане на резултата от BETWEEN оператор.

SELECT * FROM Pets 
WHERE DOB NOT BETWEEN '2018-10-01' AND '2020-09-17';

Резултат:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

В този пример върнахме всички редове, където DOB колоната е не между 2018-10-01 и 2020-09-17 .

В този случай два реда отговарят на този критерий и следователно бяха върнати два реда.

Това е обратният резултат от следната заявка:

SELECT * FROM Pets 
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17';

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

В този пример върнахме всички редове, където DOB колона е между 2018-10-01 и 2020-09-17 .

В този случай четири реда отговарят на този критерий и следователно четири реда бяха върнати.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Views:Как да работим с Views в SQL?

  2. RMAN не работи с RMAN-06900 RMAN-06901 ORA-04031

  3. Предизвикателството е включено! Покана от общността за създаване на най-бързия генератор на серии от числа

  4. Значението на избора на правилния размер на Azure VM

  5. T-SQL срещу SQL