Jak použít operátor BETWEEN v MySQL (s příklady pro čísla, data a řetězce)

1. Úvod

Jedním z klíčových prvků pro efektivní spouštění dotazů v databázích MySQL je operátor BETWEEN. Tento operátor je mimořádně užitečný při kontrole, zda data spadají do konkrétního rozsahu. Lze jej použít na čísla, data i řetězce, což z něj činí výkonný nástroj pro filtrování a získávání dat efektivně. V tomto článku vysvětlíme, jak používat MySQL operátor BETWEEN, uvedeme praktické příklady a zdůrazníme důležité body, na které je třeba myslet.

2. Základní syntaxe operátoru BETWEEN

Co je operátor BETWEEN?

Operátor BETWEEN se používá ve WHERE klauzuli k ověření, zda hodnota sloupce spadá do zadaného rozsahu. Jeho základní syntaxe je následující:

SELECT column_name
FROM table_name
WHERE column_name BETWEEN start_value AND end_value;

Například pokud tabulka ukládá věk zaměstnanců, můžete tento operátor použít k vytažení jen těch, kteří spadají do konkrétního věkového rozmezí.

Negativní forma: NOT BETWEEN

Pokud potřebujete hledat hodnoty mimo zadaný rozsah, můžete použít negativní formu NOT BETWEEN:

SELECT column_name
FROM table_name
WHERE column_name NOT BETWEEN start_value AND end_value;

3. Filtrování číselných rozsahů

Použití BETWEEN s čísly

Operátor BETWEEN je velmi praktický při filtrování číselných rozsahů. Například pokud chcete vybrat zaměstnance s platem mezi 50 000 a 100 000, můžete dotaz napsat takto:

SELECT employee_id, name, salary
FROM employees
WHERE salary BETWEEN 50000 AND 100000;

Ukázková data:

employee_id

name

mzda

1

Sato

45000

2

Suzuki

55000

3

Takahashi

75000

4

Tanaka

120000

Výsledek:

ID zaměstnance

name

mzda

2

Suzuki

55000

3

Takahashi

75000

V tomto dotazu jsou vybráni jen zaměstnanci, jejichž plat spadá mezi 50 000 a 100 000.

Porovnávací operátory vs. BETWEEN

Stejnou podmínku lze vyjádřit i pomocí porovnávacích operátorů, například takto:

SELECT employee_id, name, salary
FROM employees
WHERE salary >= 50000 AND salary <= 100000;

Použití BETWEEN činí dotaz stručnějším a čitelnějším. To je zvláště užitečné při práci s více podmínkami rozsahů.

4. Filtrování datových rozsahů

Použití BETWEEN s daty

Operátor BETWEEN lze použít i na datové rozsahy. Například pro získání objednávek vytvořených mezi 1. lednem 2024 a 31. prosincem 2024 můžete napsat:

SELECT order_id, customer_id, order_date
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';

Ukázková data:

order_id

customer_id

order_date

1

101

2024-01-15

2

102

2024-05-30

3

103

2025-03-01

Výsledek:

order_id

customer_id

order_date

1

101

2024-01-15

2

102

2024-05-30

Jak je vidět výše, operátor BETWEEN vybere data v zadaném datovém rozmezí.

Práce s časovými údaji

Pokud sloupec s datem obsahuje i časové hodnoty, musíte být opatrní. Například pokud je sloupec order_date typu DATETIME, použití BETWEEN zahrne hodnoty od půlnoci (00:00:00) počátečního data až po půlnoc následujícího dne po koncovém datu. Aby byl zachycen celý den, je nutné explicitně uvést časovou složku:

WHERE order_date BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59';

5. Filtrování řetězcových rozsahů

Použití BETWEEN s řetězci

Operátor BETWEEN lze použít i na řetězcová data. Například pokud chcete vyhledat produkty, jejichž názvy spadají abecedně mezi „A“ a „M“, dotaz bude vypadat takto:

SELECT product_id, product_name
FROM products
WHERE product_name BETWEEN 'A' AND 'M';

Ukázková data:

product_id

product_name

1

Apple

2

Banana

3

Mango

4

Orange

Výsledek:

produkt_id

název produktu

1

Apple

2

Banana

3

Mango

Úvahy o abecedním pořadí

Při filtrování řetězců pomocí BETWEEN mějte na paměti, že hodnocení probíhá podle abecedního pořadí. Také v závislosti na nastavení kolace databáze může být uplatněna rozlišování velikosti písmen. Například 'a' a 'A' mohou být považovány za odlišné hodnoty. Vždy si ověřte nastavení kolace, když pracujete s řetězcovými rozsahy.

6. Důležité poznámky k operátoru BETWEEN

Pořadí hodnot v rozsahu

Buďte opatrní na pořadí hodnot v rozsahu. Pokud je počáteční hodnota větší než koncová hodnota, může dotaz vrátit neočekávané výsledky:

SELECT * 
FROM table_name 
WHERE column_name BETWEEN 100 AND 50;  -- Unintended result

Také si pamatujte, že BETWEEN je inkluzivní pro oba konce rozsahu, takže své hodnoty vybírejte opatrně.

Indexy a výkonnost dotazů

BETWEEN operátor obecně funguje stejně jako porovnávací operátory. Nicméně pro optimalizaci výkonu je nezbytné správné indexování. Například pokud vytvoříte index na sloupec s datem, dotazy používající BETWEEN na tomto sloupci budou prováděny efektivněji.

7. Praktické dotazy a příklady použití

Použití BETWEEN na více sloupcích

Můžete také kombinovat podmínky BETWEEN na více sloupcích. Například pokud chcete filtrovat produkty podle jak cenového, tak skladového rozsahu, můžete napsat:

SELECT product_name, price, stock
FROM products
WHERE price BETWEEN 1000 AND 5000
  AND stock BETWEEN 50 AND 200;

Tento dotaz vrátí produkty s cenou mezi 1000 a 5000 a se skladovými úrovněmi mezi 50 a 200.

Praktické použití NOT BETWEENžitím záporné formyNOT BETWEEN` můžete snadno získat data mimo konkrétní rozsah. Například pro nalezení zaměstnanců, jejichž platy jsou menší než 50 000 nebo větší než 100 000, můžete napsat:

SELECT employee_id, name, salary
FROM employees
WHERE salary NOT BETWEEN 50000 AND 100000;

Výsledek:

employee_id

name

mzda

1

Sato

45000

4

Tanaka

120000

Tento dotaz vrátí zaměstnance, jejichž platy nespadají do rozmezí 50 000 až 100 000. Použití NOT BETWEEN usnadňuje aplikaci opačné podmínky.

8. Vizuální příklady dotazů

Aby byly výsledky dotazů intuitivnější, mohou pomoci vizuální diagramy. Například můžete ilustrovat efekt BETWEEN následovně:

Price Range: [----- 1000 ---- 5000 -----]
Product A Price: 3000 (Inside Range)
Product B Price: 6000 (Outside Range)

Takové ilustrace usnadňují pochopení, zda hodnota spadá do rozsahu specifikovaného v dotazu.

9. Shrnutí

BETWEEN operátor je v MySQL výkonný nástroj pro vyhledávání v rozsazích. Lze jej použít na číselná, datumová i řetězcová data, což vám umožní psát dotazy, které jsou jak stručné, tak efektivní. Je však důležité pochopit jeho vlastnosti – například inkluzivitu hraničních hodnot a význam správného indexování – aby se předešlo neočekávaným výsledkům. Aplikací těchto znalostí můžete optimalizovat výkon dotazů a efektivněji získávat jen ta data, která potřebujete.

10. Odkazy

Pro podrobnější informace a pokročilé příklady použití můžete nahlédnout do oficiální dokumentace MySQL nebo specializovaných knih o databázích. Navíc experimentování s dotazy je jedním z nejlepších způsobů, jak prohloubit pochopení fungování operátoru BETWEEN.