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

SQL BETWEEN-Operator für Anfänger

In SQL der BETWEEN Mit dem Operator können Sie nach Werten suchen, die innerhalb eines bestimmten Bereichs liegen.

Der BETWEEN Der Operator gibt einen zu testenden Bereich an und gibt TRUE zurück wenn der Operand innerhalb des Vergleichsbereichs liegt.

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 den BETWEEN zu demonstrieren Betreiber.

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 war 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.

BETWEEN ist inklusive

Der BETWEEN Operator. ist inklusive. Das heißt, es enthält die Werte an jedem Ende des Bereichs. Wenn Sie sich die Ergebnisse im vorherigen Beispiel ansehen, werden Sie feststellen, dass an beiden Enden Werte vorhanden sind, die genau mit den von uns angegebenen Daten übereinstimmen.

Dies entspricht der Verwendung des Größer-gleich-Operators (>= ) kombiniert mit dem Kleiner-gleich-Operator (<= ).

SELECT * FROM Pets 
WHERE DOB >= '2018-10-01' AND DOB <= '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 |
+---------+-------------+-----------+-----------+------------+

Um daraus einen exklusiven Bereich zu machen, verwenden Sie das Größer-als-Zeichen (> ) Operator und kleiner als (< )-Operator.

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

Ergebnis:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
+---------+-------------+-----------+-----------+------------+

Wenn Sie den BETWEEN verwenden müssen müssen Sie den Bereich entsprechend einschränken.

So:

SELECT * FROM Pets 
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16';

Ergebnis:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
+---------+-------------+-----------+-----------+------------+

Numerische Werte verwenden

Die vorherigen Beispiele verwenden Datumsangaben, aber Sie sind nicht nur auf Datumsangaben beschränkt. Hier ist ein Beispiel, das numerische Werte verwendet.

SELECT * FROM Pets 
WHERE OwnerId BETWEEN 2 AND 3;

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 |
| 7       | 3           | 2         | Bark      | NULL       |
+---------+-------------+-----------+-----------+------------+

String-Werte verwenden

Wir könnten noch einen Schritt weiter gehen und BETWEEN verwenden um zwei String-Spalten zu vergleichen.

SELECT * FROM Pets 
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName;

Ergebnis:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 8       | 2           | 4         | Meow      | NULL       |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
+---------+-------------+-----------+-----------+------------+

Sie müssen jedoch vorsichtig sein. Sie könnten denken, dass wir einfach den Anfangsbuchstaben verwenden könnten, etwa so:

SELECT * FROM Pets 
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName;

Aber das führt zu folgendem:

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

Wag war nicht enthalten wie die vorherige Abfrage tat. Das liegt daran, dass BETWEEN betrachtet die ganze Saite. In diesem Fall Wag größer als W ist , und ist daher nicht in den Ergebnissen enthalten.