Database
 sql >> база данни >  >> RDS >> Database

SQL BETWEEN оператор за начинаещи

В SQL, BETWEEN Операторът ви позволява да проверявате за стойности, които са в даден диапазон.

BETWEEN операторът посочва диапазон за тестване и връща TRUE когато операндът е в обхвата на сравнения.

Изходна таблица

Следната таблица се използва за примерите на тази страница.

SELECT * FROM Pets;

Резултат:

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

Пример

Ето един прост пример за демонстрация на BETWEEN оператор.

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

Резултат:

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

В този пример върнахме всички редове, където DOB колоната беше между 2018-10-01 и 2020-09-17 .

В този случай четири реда отговарят на този критерий и следователно четири реда бяха върнати.

BETWEEN е включващо

BETWEEN оператор. е включващо. Тоест включва стойностите във всеки край на диапазона. Ако погледнете резултатите в предишния пример, ще видите, че в двата края има стойности, които съвпадат точно с датите, които предоставихме.

Това е същото като използването на оператора по-голямо или равно на (>= ) в комбинация с оператора по-малко или равно на (<= ).

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

Резултат:

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

За да го направите изключителен диапазон, използвайте по-голямото от (> ) оператор и по-малко от (< ) оператор.

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

Резултат:

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

Ако трябва да използвате BETWEEN оператор, ще трябва съответно да стесните обхвата.

Като това:

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

Резултат:

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

Използване на числови стойности

Предишните примери използват дати, но не сте ограничени само до дати. Ето пример, който използва числови стойности.

SELECT * FROM Pets 
WHERE OwnerId BETWEEN 2 AND 3;

Резултат:

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

Използване на низови стойности

Бихме могли да направим крачка по-далеч и да използваме BETWEEN за да сравните две колони с низове.

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

Резултат:

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

Все пак трябва да внимавате. Може да си помислите, че можем просто да използваме началната буква, както следва:

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

Но това ще доведе до това:

+---------+-------------+-----------+-----------+------------+
| 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 както направи предишната заявка. Това е така, защото BETWEEN разглежда целия низ. В този случай Wag е по-голямо от W , и затова не е включено в резултатите.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Основи на табличните изрази, част 10 – Изгледи, SELECT * и промени в DDL

  2. Мониторинг на синхронизация на реплики на групата наличност

  3. Доставяне на коледни подаръци:Модел на данни на Дядо Коледа

  4. Как да пуснете таблица в SQL

  5. RowGen v3 Автоматизира генерирането на тестови данни за база данни