Database
 sql >> Baza danych >  >> RDS >> Database

Operator SQL NOT dla początkujących

W SQL NOT operator neguje dane wejściowe typu Boolean (odwraca wartość dowolnego wyrażenia Boolean). Dlatego zwraca TRUE gdy wyrażenie to FALSE .

Tabela źródłowa

Poniższa tabela jest używana jako przykłady na tej stronie.

SELECT * FROM Pets;

Wynik:

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

Przykład 1

Oto prosty przykład demonstrujący NOT operatora.

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

Wynik:

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

W tym przypadku użyliśmy NOT operator do zanegowania wyniku LIKE operator. Nasze zapytanie zwraca wszystkie zwierzęta, które nie zaczynają się na literę F.

Przykład 2 – Używanie NOT z operatorami porównania

Jeśli używasz NOT operatora, aby zanegować operator porównania, będziesz musiał nieznacznie zmodyfikować składnię w stosunku do tej użytej w poprzednim przykładzie.

Na przykład, jeśli chcesz go użyć do zanegowania operatora równości (= ), użyj następującej składni:

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

Wynik:

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

Spowoduje to zwrócenie wszystkich zwierząt, których imię nie brzmi Fluffy.

W tym przykładzie wstawiamy NOT operator przed nazwą kolumny. Gdybyśmy tego nie zrobili, otrzymalibyśmy błąd, który wygląda mniej więcej tak:

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

Wynik:

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

Mogliśmy również osiągnąć ten sam wynik, używając operatora nierównego (albo <> lub != w zależności od systemu DBMS).

Na przykład to:

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

Albo to:

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

Przykład 3 – ta sama składnia z operatorami logicznymi

Jak się okazuje, możemy również użyć tej składni podczas korzystania z operatorów logicznych, takich jak LIKE operatora, którego użyliśmy w pierwszym przykładzie.

Dlatego możemy przepisać pierwszy przykład do tego:

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

Wynik:

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

Jeśli nie jesteś pewien, jaka jest różnica, przenieśliśmy NOT operator po PetName kolumna, do przed nim.

Oto dwa stwierdzenia razem:

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

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

Przykład 4 – Negowanie wielu warunków

NOT operator neguje tylko jeden warunek. Jeśli masz wiele warunków, które musisz zanegować, użyj oddzielnego NOT operator dla każdego warunku,

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

Wynik:

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

Przykład 5 – Pierwszeństwo

Podczas korzystania z warunków złożonych, w których masz wiele operatorów, NOT operator jest oceniany przed dowolnymi operatorami logicznymi, ale po dowolnym. operatory porównania,

Gdy dwa operatory w wyrażeniu mają ten sam poziom pierwszeństwa, są oceniane od lewej do prawej na podstawie ich pozycji w wyrażeniu. Możesz jednak użyć nawiasów, aby określić kolejność, w jakiej chcesz oceniać każdy warunek.

Oto przykład.

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

Wynik:

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

Nie użyliśmy tutaj żadnych nawiasów, a wszystkie warunki zostały zanegowane za pomocą NOT operator, a więc AND operator miał pierwszeństwo przed OR operator.

Możemy jednak użyć nawiasów, aby określić, że OR warunek powinien być oceniany przed AND stan.

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

Wynik:

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

W tym przypadku otrzymujemy inny wynik.

Przykład 6 – Zanegowanie operatora BETWEEN

Oto kolejny przykład, tym razem z użyciem NOT operator do zanegowania wyniku BETWEEN operatora.

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

Wynik:

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

W tym przykładzie zwróciliśmy wszystkie wiersze, w których DOB kolumna nie między 2018-10-01 i 2020-09-17 .

W tym przypadku dwa wiersze spełniały to kryterium, a zatem zostały zwrócone dwa wiersze.

Jest to odwrotny wynik następującego zapytania:

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

Wynik:

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

W tym przykładzie zwróciliśmy wszystkie wiersze, w których DOB kolumna jest między 2018-10-01 i 2020-09-17 .

W tym przypadku cztery wiersze spełniały te kryteria, a zatem zostały zwrócone cztery wiersze.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nowa flaga śledzenia w celu naprawienia zmiennej wydajności tabeli

  2. Typowe wyrażenia tabelowe:kiedy i jak ich używać

  3. Mity dotyczące wydajności:Obcięcie nie może zostać wycofane

  4. ) Operator dla początkujących

  5. Zintegrowany model danych transportowych