SQL — BETWEEN

Zpět na blog

SQL — BETWEEN

SQL BETWEEN NOT DISTINCT ORDER BY

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


Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

Power BI - Základy

I business uživatel může být datový analytik. Zjednodušte si práci s daty díky Power BI.

Zobrazit kurz

SQL pro analytiky 2 - pokročilí

Naučte se vytvářet složité dotazy, databázové objekty a používat pokročilé funkce jazyka SQL.

Zobrazit kurz

Vizualizace pro analytiky

Matplotlib, Pandas a Seaborn. Naučte se vizualizovat a prezentovat data v Pythonu.

Zobrazit kurz

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

Copyright © 2018-2024, Colorbee, s.r.o.

Designed by grafikli.cz in Prague.