sql >> Databáze >  >> RDS >> Database

SQL BETWEEN Operátor pro začátečníky

V SQL, BETWEEN operátor umožňuje kontrolovat hodnoty, které jsou v daném rozsahu.

BETWEEN operátor určuje rozsah, který se má testovat, a vrací TRUE když je operand v rozsahu srovnání.

Tabulka zdrojů

Následující tabulka je použita pro příklady na této stránce.

SELECT * FROM Pets;

Výsledek:

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

Příklad

Zde je jednoduchý příklad pro demonstraci BETWEEN operátor.

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

Výsledek:

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

V tomto příkladu jsme vrátili všechny řádky s DOB byl mezi 2018-10-01 a 2020-09-17 .

V tomto případě tomuto kritériu odpovídaly čtyři řádky, a proto byly vráceny čtyři řádky.

BETWEEN je včetně

BETWEEN operátor. je inkluzivní. To znamená, že zahrnuje hodnoty na každém konci rozsahu. Pokud se podíváte na výsledky v předchozím příkladu, uvidíte, že na obou koncích jsou hodnoty, které přesně odpovídají datům, která jsme poskytli.

Je to stejné jako použití operátoru větší než nebo rovno (>= ) v kombinaci s operátorem menší nebo rovno (<= ).

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

Výsledek:

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

Chcete-li z toho udělat exkluzivní rozsah, použijte větší než (> ) operátor a menší než (< ) operátor.

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

Výsledek:

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

Pokud musíte použít BETWEEN operátora, budete muset odpovídajícím způsobem zúžit rozsah.

Takhle:

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

Výsledek:

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

Použití číselných hodnot

Předchozí příklady používají data, ale nejste omezeni pouze na data. Zde je příklad, který používá číselné hodnoty.

SELECT * FROM Pets 
WHERE OwnerId BETWEEN 2 AND 3;

Výsledek:

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

Použití řetězcových hodnot

Mohli bychom to udělat o krok dále a použít BETWEEN porovnat dva sloupce řetězce.

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

Výsledek:

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

Musíte však být opatrní. Možná si myslíte, že bychom mohli použít jen počáteční písmeno, například takto:

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

Ale to bude mít za následek toto:

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

Nezahrnovalo Wag stejně jako předchozí dotaz. Je to proto, že BETWEEN dívá se na celý řetězec. V takovém případě Wag je větší než W , a proto není zahrnut ve výsledcích.


  1. T-SQL:Zaokrouhlete na nejbližší 15minutový interval

  2. Replikace MySQL:Chybné transakce v replikaci založené na GTID

  3. 3 způsoby, jak zjistit, zda je sloupec vypočítaným sloupcem na serveru SQL

  4. Fulltextové vyhledávání v MySQL:Hodný, zlý a ošklivý