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

SQL-UND-Operator für Anfänger

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.