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


