SQL — BETWEEN

SQL operátor BETWEEN porovnává, zda-li je výraz v rozmezí hodnot lowhigh.

Poznámka: Pokud nemáte na svém počítač nainstalovaný žádný SQL server - jako např. PostgreSQL, MySQL, MS SQL Server, apod. - můžete využít SQL Online, které je on-line a zdarma. Pro vytvoření dat použijte vzorek z datové sady titanic.

CREATE TABLE "titanic" (
    "pclass" INTEGER,
    "class" VARCHAR(10),
    "who" VARCHAR(10),
    "age" DECIMAL(5,2)
);

INSERT INTO "titanic" VALUES(2,'Second','man',36.5);
INSERT INTO "titanic" VALUES(3,'Third','child',9.0);
INSERT INTO "titanic" VALUES(2,'Second','man',51.0);
INSERT INTO "titanic" VALUES(2,'Second','woman',30.0);
INSERT INTO "titanic" VALUES(1,'First','man',33.0);
INSERT INTO "titanic" VALUES(1,'First','man',58.0);
INSERT INTO "titanic" VALUES(2,'Second','woman',30.0);
INSERT INTO "titanic" VALUES(1,'First','man',22.0);
INSERT INTO "titanic" VALUES(3,'Third','child',11.0);
INSERT INTO "titanic" VALUES(3,'Third','child',0.42);
INSERT INTO "titanic" VALUES(3,'Third','child',1.0);
INSERT INTO "titanic" VALUES(3,'Third','man',24.0);
INSERT INTO "titanic" VALUES(3,'Third','man',NULL);
INSERT INTO "titanic" VALUES(1,'First','man',70.0);
INSERT INTO "titanic" VALUES(3,'Third','man',34.0);
INSERT INTO "titanic" VALUES(1,'First','man',30.0);
INSERT INTO "titanic" VALUES(3,'Third','child',11.0);
INSERT INTO "titanic" VALUES(2,'Second','man',32.0);
INSERT INTO "titanic" VALUES(3,'Third','man',NULL);
INSERT INTO "titanic" VALUES(3,'Third','woman',NULL);

Věk je mezi 30 - 34

Hledáme pasažéry, kterým bylo mezi 30 až 34 lety, včetně okrajových hodnot.

SELECT *
    FROM titanic
    WHERE age BETWEEN 30 AND 34
;
pclass  class   who     age
---------------------------
2       Second  woman   30
1       First   man     33
2       Second  woman   30
3       Third   man     34
1       First   man     30
2       Second  man     32

Stejný příklad bez použití BETWEEN

Výše uvedený SQL příkaz by se dal i přepsat následovně. Nevýhodou je trochu horší čitelnost ve srovnání s BETWEEN.

SELECT *
    FROM titanic
    WHERE age >= 30
      AND age <= 34  
;
pclass  class   who     age
---------------------------
2       Second  woman   30
1       First   man     33
2       Second  woman   30
3       Third   man     34
1       First   man     30
2       Second  man     32

Alternativní zápis podmínky

Nebo také takto, ale BETWEEN stále vyhrává, protože je nejčitelnější.

SELECT *
    FROM titanic
    WHERE 30 <= age 
      AND age <= 34 
;
pclass  class   who     age
---------------------------
2       Second  woman   30
1       First   man     33
2       Second  woman   30
3       Third   man     34
1       First   man     30
2       Second  man     32

Věk není mezi 30 - 34

Podmínku můžeme snadno negovat pomocí NOT. Všimněte si, že výsledek neobsahuje záznamy, které mají ve sloupci age hodnotu NULL.

SELECT *
    FROM titanic
    WHERE age NOT BETWEEN 30 AND 34
;
pclass  class   who     age
----------------------------
2       Second  man     36.5
3       Third   child   9
2       Second  man     51
1       First   man     58
1       First   man     22
3       Third   child   11
3       Third   child   0.42
3       Third   child   1
3       Third   man     24
1       First   man     70
3       Third   child   11

Ověření vrácených hodnot pomocí DISTINCT

Pomocí DISTINCT můžeme ověřit, že se ve vrácených hodnotách nenachází 30, 31, 32, 33 a 34. Hodnoty si seřadíme pomocí ORDER BY, pro lepší čitelnost.

SELECT DISTINCT AGE
    FROM titanic
    WHERE age NOT BETWEEN 30 AND 34
    ORDER BY age
;
age
----
0.42
1
9
11
22
24
36.5
51
58
70

Příklady

Příklad 1

Kolika pasažérům bylo mezi 50 - 70 lety a cestovali v první třídě?

SELECT COUNT(*) AS "počet"
    FROM titanic
    WHERE age BETWEEN 50 AND 70
        AND pclass = 1
;
počet
-----
2

Příklad 2

Titanic se potopil v roce 1912. Kterým pasažérům by dnes bylo mezi 144,5 - 160 lety?

SELECT *
    FROM titanic
    WHERE age + (2020 - 1912) BETWEEN 144.5 AND 160
;
pclass  class   who age
------------------------
2       Second  man 36.5
2       Second  man 51

Použité funkce a příkazy SQL

V tomto článku jsme použili následující funkce a příkazy SQL:

Funkce Info
BETWEEN porovnává, zda-li je výraz v rozmezí hodnot — dokumentace SQL
NOT Negace výrazu — dokumentace SQL.
DISTINCT Unikátní hodnoty (odstraní duplicity) — dokumentace SQL.
ORDER BY Seřadí výsledek — dokumentace SQL.

Jste z oboru a chcete něco zajímavého sdělit našemu publiku?

LovelyData

Nenechávejte si to pro sebe!

Určitě máte co říct a byla by škoda, kdyby o tom nikdo nevěděl. Protože naši čtenáři chtějí být informováni o všem, co vytváří budoucnost.

Kontaktujte nás a určitě se domluvíme.

Potěšte svoji emailovou schránku

Data, umělá inteligence, automatizace a ještě mnohem víc. Technologie, které mění náš svět. To vše zdarma ve vašem emailu. Spam neposíláme a odhlásit se můžete kdykoliv.

© Colorbee, s.r.o.

Design by grafikli.cz

Používáme cookies pro lepší uživatelský zážitek. Používáním webu s tím vyjadřujete souhlas a zároveň potvrzujete, že jste se seznámil/a s Prohlášením o ochraně osobních údajů.

Fotografie: lektoři, grafikli.cz, icons8.com