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

Operator SQL BETWEEN dla początkujących

W SQL BETWEEN Operator umożliwia sprawdzenie wartości mieszczących się w danym zakresie.

BETWEEN operator określa zakres do przetestowania i zwraca TRUE gdy operand znajduje się w zakresie porównań.

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

Oto prosty przykład demonstrujący BETWEEN operatora.

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 była 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.

BETWEEN obejmuje

BETWEEN operator. jest inkluzywny. Oznacza to, że zawiera wartości na każdym końcu zakresu. Jeśli spojrzysz na wyniki w poprzednim przykładzie, zobaczysz, że na obu końcach znajdują się wartości, które dokładnie pasują do podanych przez nas dat.

To to samo, co użycie operatora większe lub równe (>= ) w połączeniu z operatorem mniejszym lub równym (<= ).

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

Aby uczynić go zakresem wyłącznym, użyj większej niż (> ) operator i mniej niż (< ).

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

Wynik:

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

Jeśli musisz użyć BETWEEN operatora, musisz odpowiednio zawęzić zakres.

Tak:

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

Wynik:

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

Korzystanie z wartości liczbowych

W poprzednich przykładach użyto dat, ale nie ograniczasz się tylko do dat. Oto przykład wykorzystujący wartości liczbowe.

SELECT * FROM Pets 
WHERE OwnerId BETWEEN 2 AND 3;

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

Korzystanie z wartości ciągów

Możemy pójść o krok dalej i użyć BETWEEN aby porównać dwie kolumny ciągów.

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

Wynik:

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

Musisz jednak być ostrożny. Możesz pomyśleć, że moglibyśmy użyć pierwszej litery, takiej jak ta:

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

Ale to spowoduje to:

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

Nie zawierał Wag tak jak poprzednie zapytanie. To dlatego, że BETWEEN patrzy na cały ciąg. W takim przypadku Wag jest większe niż W , więc nie jest uwzględniany w wynikach.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzystanie z danych ODBC w RapidMiner

  2. Statystyki zbudowane na zamówienie

  3. Eksploracja interfejsów API modułów w Javie 9

  4. Minimalne logowanie za pomocą INSERT…SELECT do pustych tabel klastrowych

  5. Biblioteczny model danych