sql >> Databasteknik >  >> RDS >> Database

SQL MELLAN Operatör för nybörjare

I SQL, BETWEEN operatorn låter dig söka efter värden som ligger inom ett givet intervall.

BETWEEN operatorn anger ett intervall som ska testas och returnerar TRUE när operanden är inom intervallet för jämförelser.

Källtabell

Följande tabell används för exemplen på den här sidan.

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)

Exempel

Här är ett enkelt exempel för att demonstrera 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 det här exemplet returnerade vi alla rader där DOB kolumnen var mellan 2018-10-01 och 2020-09-17 .

I det här fallet matchade fyra rader det kriteriet, och därför returnerades fyra rader.

BETWEEN är inklusive

BETWEEN operatör. är inkluderande. Det vill säga, det inkluderar värdena i varje ände av intervallet. Om du tittar på resultaten i föregående exempel ser du att det finns värden i båda ändarna som exakt matchar datumen vi angav.

Det är samma sak som att använda operatorn större än eller lika med (>= ) kombinerat med operatorn mindre än eller lika 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 |
+---------+-------------+-----------+-----------+------------+

För att göra det till ett exklusivt sortiment, använd större än (> ) operator och mindre än (< ) 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 |
+---------+-------------+-----------+-----------+------------+

Om du måste använda BETWEEN operatör måste du begränsa intervallet i enlighet därmed.

Så här:

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

Använda numeriska värden

De tidigare exemplen använder datum, men du är inte begränsad till bara datum. Här är ett exempel som använder numeriska värden.

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

Använda strängvärden

Vi kan ta det ett steg längre och använda BETWEEN för att jämföra två strängkolumner.

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 måste dock vara försiktig. Du kanske tror att vi bara kan använda initialbokstaven, så här:

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

Men det kommer att resultera i detta:

+---------+-------------+-----------+-----------+------------+
| 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 inkluderade inte Wag som föregående fråga gjorde. Det beror på att BETWEEN tittar på hela strängen. I så fall Wag är större än W , så det ingår inte i resultaten.


  1. Gå med mig för en Microsoft Access med SQL Server Academy-session

  2. Räkna förekomsten av DISTINCT-värden

  3. Laddar .sql-filer från PHP

  4. Så här löser du ORA-02014:kan inte välja FÖR UPPDATERING från vy med DISTINCT, GROUP BY