In SQL das AND
-Operator können Sie beim Filtern Ihrer Abfragen nach mehreren Bedingungen suchen.
Das AND
Operator kombiniert zwei boolesche Ausdrücke und gibt TRUE
zurück wenn beide Ausdrücke TRUE
sind .
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
Hier ist ein einfaches Beispiel, um das AND
zu demonstrieren Betreiber.
SELECT * FROM Pets
WHERE PetName = 'Fluffy' AND DOB > '2020-11-01';
Ergebnis:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | +---------+-------------+-----------+-----------+------------+
Wie erwartet wurden nur die Zeilen zurückgegeben, in denen sowohl der PetName
Spalte war Fluffy
und das DOB
Spalte war größer als 2020-11-01
.
In diesem Fall entsprach nur eine Zeile diesem Kriterium und daher wurde nur eine Zeile zurückgegeben.
Kombiniert mit anderen Operatoren
Ihre Filterkriterien können Ausdrücke kombinieren, die zusätzlich zu AND
andere Operatoren verwenden Operator.
Hier ist ein Beispiel, das das OR
enthält Betreiber.
SELECT * FROM Pets
WHERE (PetName = 'Fluffy' OR PetName = 'Tweet')
AND DOB >= '2020-11-20';
Ergebnis:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Beachten Sie, dass ich das OR
eingeschlossen habe Bedingung mit Klammern. Ich habe das getan, um die Reihenfolge festzulegen, in der jeder Ausdruck ausgewertet werden soll.,
Standardmäßig AND
Operatoren werden vor OR
ausgewertet Betreiber. SQL hat eine definierte Rangfolge der Operatoren in einem Ausdruck, und dies schreibt vor, dass AND
Operator wird vor dem OR
ausgewertet Operator.
Sie können jedoch Klammern verwenden, um die definierte Rangfolge der Operatoren in einem Ausdruck zu überschreiben. Alles in Klammern wird ausgewertet, um einen einzelnen Wert zurückzugeben. Dieser Wert kann von jedem Operator außerhalb dieser Klammern verwendet werden.
Mit anderen Worten, Sie können Klammern verwenden, um die Reihenfolge anzugeben, in der jeder logische Operator in einem Ausdruck ausgewertet werden soll.
Um dieses Problem zu demonstrieren, werfen Sie einen Blick auf die Ergebnisse, wenn wir die Klammern entfernen.
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'
AND DOB >= '2020-11-20';
Ergebnis:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Jetzt erhalten wir ein anderes Ergebnis.
Dies liegt daran, dass die Abfrage jetzt PetName = 'Tweet' AND DOB >= '2020-11-20'
prüft zuerst, überprüft dann das OR
Ausdruck PetName = 'Fluffy'
.
Es ist, als ob wir das AND
in Klammern setzen würden Ausdruck, etwa so:
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR (PetName = 'Tweet'
AND DOB >= '2020-11-20');
Um die Dinge jedoch noch mehr zu verwirren, könnten wir unsere Abfrage so umstellen, dass wir keine Klammern verwenden, und dennoch dasselbe Ergebnis wie unser erstes Beispiel mit Klammern erhalten.
So:
SELECT * FROM Pets
WHERE DOB >= '2020-11-20'
AND PetName = 'Fluffy' OR PetName = 'Tweet';
Ergebnis:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
In diesem Fall das AND
expression wurde wie erwartet zuerst ausgewertet. Die Reihenfolge der Ausdrücke stimmte zufällig so überein, dass DOB >= '2020-11-20' AND PetName = 'Fluffy'
wurde zuerst bewertet, also haben wir das andere Haustier namens Fluffy aufgrund seines DOB
ausgeschlossen außerhalb dieses Bereichs fallen. Erst danach kam das OR
Ausdruck, der als alternative Bedingung zu unserem bestehenden AND
ausgewertet wird Ergebnis.
Daher wird dringend empfohlen, bei der Verwendung mehrerer Operatoren Klammern zu verwenden. Dadurch wird sichergestellt, dass die Abfrage genau so ausgewertet wird, wie Sie es beabsichtigt haben.