sql >> Database teknologi >  >> RDS >> Database

SQL MELLEM Operatør for begyndere

I SQL er BETWEEN operator giver dig mulighed for at kontrollere for værdier, der er inden for et givet område.

BETWEEN operatoren angiver et område, der skal testes, og det returnerer TRUE når operanden er inden for rækkevidden af ​​sammenligninger.

Kildetabel

Følgende tabel bruges til eksemplerne på denne side.

SELECT * FROM Pets;

Resultat:

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

Eksempel

Her er et simpelt eksempel til at demonstrere BETWEEN operatør.

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

Resultat:

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

I dette eksempel returnerede vi alle rækker, hvor DOB kolonne var mellem 2018-10-01 og 2020-09-17 .

I dette tilfælde matchede fire rækker dette kriterium, og derfor blev fire rækker returneret.

BETWEEN er inklusive

BETWEEN operatør. er inkluderende. Det vil sige, at det inkluderer værdierne i hver ende af området. Hvis du ser på resultaterne i det foregående eksempel, vil du se, at der er værdier i begge ender, som nøjagtigt matcher de datoer, vi har angivet.

Det er det samme som at bruge operatoren større end eller lig med (>= ) kombineret med operatoren mindre end eller lig med (<= ).

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

Resultat:

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

For at gøre det til et eksklusivt udvalg skal du bruge større end (> ) operator og mindre end (< ) operatør.

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

Resultat:

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

Hvis du skal bruge BETWEEN operatør, skal du indsnævre intervallet i overensstemmelse hermed.

Sådan:

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

Resultat:

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

Brug af numeriske værdier

De tidligere eksempler bruger datoer, men du er ikke begrænset til kun datoer. Her er et eksempel, der bruger numeriske værdier.

SELECT * FROM Pets 
WHERE OwnerId BETWEEN 2 AND 3;

Resultat:

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

Brug af strengværdier

Vi kunne tage det et skridt videre og bruge BETWEEN for at sammenligne to strengkolonner.

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

Resultat:

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

Du skal dog være forsigtig. Du tror måske, at vi bare kunne bruge begyndelsesbogstavet sådan her:

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

Men det vil resultere i dette:

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

Den inkluderede ikke Wag ligesom den forrige forespørgsel gjorde. Det er fordi BETWEEN ser på hele strengen. I så fald Wag er større end W , og det er derfor ikke inkluderet i resultaterne.


  1. Find ud af datatypen for de kolonner, der returneres i et resultatsæt i SQL Server

  2. MariaDB Server Database Encryption Basics

  3. WHERE-klausul vs ON ved brug af JOIN

  4. Gendan din WordPress-database med WP-CLI