sql >> Database >  >> RDS >> Database

SQL TUSSEN-operator voor beginners

In SQL is de BETWEEN operator stelt u in staat om te controleren op waarden die binnen een bepaald bereik vallen.

De BETWEEN operator specificeert een bereik om te testen, en retourneert TRUE wanneer de operand binnen het vergelijkingsbereik valt.

Brontabel

De volgende tabel wordt gebruikt voor de voorbeelden op deze pagina.

SELECT * FROM Pets;

Resultaat:

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

Voorbeeld

Hier is een eenvoudig voorbeeld om de BETWEEN . te demonstreren telefoniste.

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

Resultaat:

+---------+-------------+-----------+-----------+------------+
| 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 dit voorbeeld hebben we alle rijen geretourneerd waar de DOB kolom was tussen 2018-10-01 en 2020-09-17 .

In dit geval kwamen vier rijen overeen met die criteria en daarom werden er vier rijen geretourneerd.

TUSSEN is inclusief

De BETWEEN exploitant. is inclusief. Dat wil zeggen, het bevat de waarden aan elk uiteinde van het bereik. Als u naar de resultaten in het vorige voorbeeld kijkt, ziet u dat er aan beide uiteinden waarden zijn die exact overeenkomen met de datums die we hebben opgegeven.

Het is hetzelfde als het gebruik van de operator groter dan of gelijk aan (>= ) gecombineerd met de operator kleiner dan of gelijk aan (<= ).

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

Resultaat:

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

Om er een exclusief bereik van te maken, gebruikt u de groter dan (> ) operator en kleiner dan (< ) operator.

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

Resultaat:

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

Als u de BETWEEN . moet gebruiken operator, moet u het bereik dienovereenkomstig verkleinen.

Zoals dit:

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

Resultaat:

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

Numerieke waarden gebruiken

De vorige voorbeelden gebruiken datums, maar u bent niet beperkt tot alleen datums. Hier is een voorbeeld dat numerieke waarden gebruikt.

SELECT * FROM Pets 
WHERE OwnerId BETWEEN 2 AND 3;

Resultaat:

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

Tekenreekswaarden gebruiken

We kunnen nog een stap verder gaan en BETWEEN . gebruiken om twee tekenreekskolommen te vergelijken.

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

Resultaat:

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

Je moet wel voorzichtig zijn. Je zou denken dat we gewoon de eerste letter kunnen gebruiken, zoals deze:

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

Maar dat resulteert in dit:

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

Het bevatte geen Wag zoals de vorige vraag deed. Dat komt omdat BETWEEN kijkt naar de hele snaar. In dat geval Wag is groter dan W , en is dus niet opgenomen in de resultaten.


  1. Oracle Database TLS1.2 / SSL-verbinding met JDBC thin en JKS

  2. MySQL:ALTER IGNORE TABLE geeft schending van integriteitsbeperking

  3. Hoe CHARSET() werkt in MariaDB

  4. De beste ETL-tools voor migratie naar PostgreSQL