Database
 sql >> Datenbank >  >> RDS >> Database

SQL NOT-Operator für Anfänger

In SQL ist das NOT -Operator negiert eine boolesche Eingabe (er kehrt den Wert eines beliebigen booleschen Ausdrucks um). Daher gibt es TRUE zurück wenn der Ausdruck FALSE ist .

Quelltabelle

Die folgende Tabelle wird für die Beispiele auf dieser Seite verwendet.

SELECT * FROM Pets;

Ergebnis:

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

Beispiel 1

Hier ist ein einfaches Beispiel, um NOT zu demonstrieren Betreiber.

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

Ergebnis:

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

In diesem Fall haben wir den NOT verwendet Operator, um das Ergebnis von LIKE zu negieren Operator. Unsere Abfrage gibt alle Haustiere zurück, die nicht mit dem Buchstaben F beginnen.

Beispiel 2 – Verwendung von NOT mit Vergleichsoperatoren

Wenn Sie NOT verwenden -Operator verwenden, um einen Vergleichsoperator zu negieren, müssen Sie Ihre Syntax geringfügig von der im vorherigen Beispiel verwendeten ändern.

Wenn Sie ihn beispielsweise verwenden möchten, um den Gleichheitsoperator zu negieren (= ), verwenden Sie die folgende Syntax:

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

Ergebnis:

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

Dies gibt alle Haustiere zurück, deren Name nicht Fluffy ist.

In diesem Beispiel setzen wir den NOT Operator vor dem Spaltennamen. Wenn wir das nicht getan hätten, hätten wir eine Fehlermeldung erhalten, die ungefähr so ​​lautet:

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

Ergebnis:

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

Wir hätten dasselbe Ergebnis auch erzielen können, indem wir den Ungleich-Operator verwendet hätten (entweder <> oder != abhängig von Ihrem DBMS).

Zum Beispiel dies:

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

Oder dies:

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

Beispiel 3 – Gleiche Syntax mit logischen Operatoren

Wie sich herausstellt, können wir diese Syntax auch verwenden, wenn wir logische Operatoren wie LIKE verwenden Operator, den wir im ersten Beispiel verwendet haben.

Daher könnten wir das erste Beispiel folgendermaßen umschreiben:

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

Ergebnis:

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

Falls Sie sich nicht sicher sind, was der Unterschied ist, haben wir den NOT verschoben Operator von nach dem PetName Spalte, bis davor.

Hier sind die beiden Anweisungen zusammen:

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

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

Beispiel 4 – Negation mehrerer Bedingungen

Das NOT Operator negiert nur eine einzige Bedingung. Wenn Sie mehrere Bedingungen haben, die Sie negieren müssen, verwenden Sie ein separates NOT Operator für jede Bedingung,

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

Ergebnis:

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

Beispiel 5 – Vorrang

Wenn Sie zusammengesetzte Bedingungen verwenden, bei denen Sie mehrere Operatoren haben, wird NOT Operator wird vor allen logischen Operatoren ausgewertet, aber nach allen. Vergleichsoperatoren,

Wenn zwei Operatoren in einem Ausdruck die gleiche Prioritätsstufe haben, werden sie basierend auf ihrer Position im Ausdruck von links nach rechts ausgewertet. Sie können jedoch Klammern verwenden, um die Reihenfolge anzugeben, in der die einzelnen Bedingungen ausgewertet werden sollen.

Hier ist ein Beispiel.

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

Ergebnis:

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

Wir haben hier keine Klammern verwendet und alle Bedingungen wurden mit dem NOT negiert Operator, also das AND Operator hatte Vorrang vor dem OR Operator.

Wir können jedoch Klammern verwenden, um anzugeben, dass das OR Bedingung sollte vor dem AND ausgewertet werden Zustand.

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

Ergebnis:

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

In diesem Fall erhalten wir ein anderes Ergebnis.

Beispiel 6 – Negiere den BETWEEN-Operator

Hier ist ein weiteres Beispiel, diesmal mit NOT Operator, um das Ergebnis von BETWEEN zu negieren Betreiber.

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

Ergebnis:

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

In diesem Beispiel haben wir alle Zeilen zurückgegeben, in denen DOB Spalte ist nicht zwischen 2018-10-01 und 2020-09-17 .

In diesem Fall stimmten zwei Zeilen mit diesen Kriterien überein und daher wurden zwei Zeilen zurückgegeben.

Dies ist das entgegengesetzte Ergebnis der folgenden Abfrage:

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

Ergebnis:

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

In diesem Beispiel haben wir alle Zeilen zurückgegeben, in denen DOB Spalte ist zwischen 2018-10-01 und 2020-09-17 .

In diesem Fall stimmten vier Zeilen mit diesen Kriterien überein und daher wurden vier Zeilen zurückgegeben.