MySQL Zástupné znaky: Líbí se mi, NElíbí se mi, Escape, (%), (_)

⚡ Chytré shrnutí

MySQL Zástupné znaky umožňují vyhledávání na základě vzorů spárováním operátorů LIKE a NOT LIKE se speciálními znaky. Zde jsou vysvětleny zástupné znaky procent a podtržítko, klíčové slovo ESCAPE, praktické dotazy v databázi myflixdb a aspekty výkonu.

  • 🔍 Základní definice: Zástupné znaky jsou zástupné znaky, které LIKE a NOT LIKE používají k porovnání textových vzorů namísto přesných hodnot.
  • 📊 Procentní zástupný znak: Symbol % odpovídá nule nebo více znakům, takže '%code%' vrací každý název filmu, který obsahuje slovo code.
  • 🔡 Podtržítko (zástupný znak): Symbol _ odpovídá přesně jednomu znaku, takže '200_' vrátí tituly vydané mezi lety 2000 a 2009.
  • 🚫 Pravidlo negace: Funkce NOT LIKE invertuje porovnání a vrací všechny řádky, které nesplňují zadaný vzor.
  • 🛡️ Manipulace s únikem: Klíčové slovo ESCAPE označuje doslovný znak % nebo _ uvnitř vyhledávacího řetězce, takže je považován za data.
  • Statistiky výkonu: Úvodní znak % blokuje použití indexu a vynucuje prohledávání celé tabulky, proto ukotvujte vzory vlevo, kdykoli je to možné.
  • 🧩 Výběr metody: LIKE pokrývá jednoduché porovnávání prefixů a suffixů, zatímco REGEXP se stará o třídy znaků a alternaci.

Jaké jsou MySQL zástupné znaky?

MySQL Zástupné znaky jsou speciální znaky, které vám pomohou vyhledat data odpovídající složitému vzoru namísto přesné hodnoty. Zástupné znaky se vždy používají ve spojení s porovnávacím operátorem LIKE nebo s porovnávacím operátorem NOT LIKE.

MySQL podporuje dva zástupné znaky a každý z nich odpovídá na jinou otázku týkající se vašich dat.

Zástupný znak Význam Příklad vzoru Zápasy
% Nula (0) nebo více znaků '%kód%' Code Jméno Black, Da Vinci Code
_ Přesně jeden znak '200_' 2005, 2008

Nyní, když jsou tyto dva znaky definovány, další část vysvětluje, proč stojí za to se je naučit.

Proč používat zástupné znaky v MySQL?

Pokud znáte SQL, možná si myslíte, že pomocí příkazu SELECT a klauzule WHERE můžete vyhledávat jakákoli složitá data. Proč tedy vůbec používat zástupné znaky?

Než na tuto otázku odpovíme, podívejme se na příklad. Předpokládejme, že marketingové oddělení videotéky Myflix provádí propagační akce ve městě Texas a chce získat zpětnou vazbu o počtu registrovaných členů z Texasu. Požadované informace získáte pomocí následujícího příkazu SELECT spolu s klauzulí WHERE.

SELECT * FROM members
WHERE postal_address = 'Austin, TX'
   OR postal_address = 'Dallas, TX'
   OR postal_address = 'Iola, TX'
   OR postal_address = 'Houston, TX';

Jak můžete vidět z výše uvedeného dotazu, „klauzule WHERE„“ se stává dlouhým a křehkým: každé nové město musí být přidáno ručně a jediná chybně napsaná adresa je tiše vyloučena. Použití zástupných znaků zjednodušuje dotaz, protože jeden vzor pokrývá všechna města ve státě.

SELECT * FROM members
WHERE postal_address LIKE '%TX';

Stručně řečeno, zástupné znaky vám umožňují vytvářet výkonné vyhledávací funkce v datově řízených aplikacích s mnohem menším množstvím SQL. Následující část postupně rozebírá jednotlivé zástupné znaky.

Druhy MySQL Zástupné znaky

% – Zástupný znak procenta

Znak procent (%) se používá k určení vzoru nula (0) nebo více znaků. Má následující základní syntaxi.

SELECT * FROM table_name
WHERE fieldname LIKE 'xxx%';

ZDE:

  • "příkaz SELECT„ je standardní příkaz SQL SELECT.
  • „KDE“ je klíčové slovo používané k použití filtru.
  • „LIKE“ je operátor porovnání, který se používá ve spojení se zástupnými znaky.
  • „xxx“ je libovolný zadaný vzor, ​​například jeden nebo více znaků, a „%“ odpovídá libovolnému počtu znaků počínaje nulou (0).

Abychom výše uvedené tvrzení plně pochopili, podívejme se na praktický příklad. Předpokládejme, že chceme najít všechny filmy, které obsahují slovo „kód“ jako součást názvu. Použili bychom zástupný znak procenta na obou stranách slova „kód“ k provedení porovnávání se vzorem kdekoli v názvu.

SELECT * FROM movies
WHERE title LIKE '%code%';

Spuštění výše uvedeného skriptu v MySQL Workbench Porovnání s databází myflixdb nám dává níže uvedené výsledky.

movie_id titul ředitel rok_vydáno category_id
4 Code Jméno Černá Edgar Jimz 2010 NULL
7 Davinci Code NULL NULL 6

Všimněte si, že klíčové slovo „kód“ se vrátí bez ohledu na to, zda se objeví na začátku nebo na konci názvu. Je to proto, že vzor umožňuje libovolný počet znaků před slovem „kód“ a libovolný počet znaků za ním.

Nyní upravme skript tak, aby se zástupný znak procenta zobrazoval pouze na začátku vyhledávacích kritérií.

SELECT * FROM movies
WHERE title LIKE '%code';

Spuštění výše uvedeného skriptu v MySQL Workbench s databází myflixdb nám dává níže uvedené výsledky.

movie_id titul ředitel rok_vydáno category_id
7 Davinci Code NULL NULL 6

Všimněte si, že byl vrácen pouze jeden záznam. Vzor odpovídá libovolnému počtu znaků na začátku názvu, ale vyžaduje, aby název konec s „kódem“.

Nyní místo toho posuňme zástupný znak procenta na konec vzoru. Upravený skript je uveden níže.

SELECT * FROM movies
WHERE title LIKE 'code%';

Spuštění výše uvedeného skriptu v MySQL Workbench s databází myflixdb nám dává níže uvedené výsledky.

movie_id titul ředitel rok_vydáno category_id
4 Code Jméno Černá Edgar Jimz 2010 NULL

Vrátí se pouze jeden záznam, protože tento vzor odpovídá každému názvu, který začíná s textem „kód“ následovaným libovolným počtem znaků. Pozice symbolu % proto určuje význam vyhledávání.

💡 Tip: Vzor jako 'code%' může stále používat index v názvu sloupce, zatímco '%code%' nikoli. Úvodní zástupný znak procenta vynucuje MySQL prohledávat každý řádek, takže zástupný znak ponechte vpravo, kdykoli to vyhledávání dovolí.

_ – Zástupný znak podtržítka

Zástupný znak podtržítka se používá odpovídat přesně jednomu znakuPředpokládejme, že chceme najít všechny filmy vydané v letech 200x, kde x je přesně jeden znak, který může být libovolnou hodnotou. Následující skript vybere všechny filmy vydané v roce „200x“.

SELECT * FROM movies
WHERE year_released LIKE '200_';

Spuštění výše uvedeného skriptu v MySQL Workbench s databází myflixdb nám dává níže uvedené výsledky.

movie_id titul ředitel rok_vydáno category_id
2 Zapomínání na Sarah Marshal Nicholas Stoller 2008 2
9 Honey mooneRS Jhon Shultz 2005 8

Všimněte si, že se vrátí pouze filmy, jejichž hodnota argumentu year_released je 200 následovaná libovolným jedním znakem. Na rozdíl od zástupného znaku procenta podtržítko rezervuje místo pro jeden znak a ne pro více.

NENÍ JAKO u zástupných znaků

Logický operátor NOT lze použít společně se zástupnými znaky k vrácení řádků, které ne odpovídat zadanému vzoru.

Předpokládejme, že chceme filmy, které nebyly vydány v letech 200x. Zkombinujeme logický operátor NOT se zástupným znakem podtržítka, jak je znázorněno níže.

SELECT * FROM movies
WHERE year_released NOT LIKE '200_';
movie_id titul ředitel rok_vydáno category_id
1 Piráti z Karibiku 4 Rob Marshall 2011 1
4 Code Jméno Černá Edgar Jimz 2010 NULL
8 Podsvětí-Awakenobyv Michael Eal 2012 6

Vrátí se pouze filmy, které nedodržují vzor 200x, protože NOT invertuje výsledek porovnání se zástupnými znaky. Všimněte si, že řádky obsahující NULL Hodnoty se nikdy nevrací pomocí funkce LIKE nebo NOT LIKE, protože NULL je neznámá, nikoli nerovná se.

Klíčové slovo ESCAPE

Klíčové slovo ESCAPE se používá k znaky escape pro porovnávání vzorů například procento (%) a podtržítko (_), pokud tvoří součást samotných dat.

Předpokládejme, že chceme vyhledat literální řetězec „67 %“. Deklarujeme escape znak a umístíme ho bezprostředně před znak, který má být přečten jako data.

LIKE '67#%%' ESCAPE '#';

Pokud chceme najít film „67% vina“, můžeme použít níže uvedený scénář.

SELECT * FROM movies
WHERE title LIKE '67#%%' ESCAPE '#';

Všimněte si dvojitého znaku „%%“ v klauzuli LIKE. Prvnímu znaku předchází escape znak (#) a proto je považován za součást hledaného řetězce. Druhý znak si zachovává význam zástupného znaku a odpovídá libovolnému počtu následujících znaků.

Jako řídicí znak může sloužit libovolný znak, takže stejný dotaz funguje i se znaménkem rovnosti.

SELECT * FROM movies
WHERE title LIKE '67=%%' ESCAPE '=';

Zástupné znaky velmi dobře pokrývají jednoduché vzory, ale některá vyhledávání vyžadují výraznější pravidla. Níže uvedené srovnání ukazuje, kde leží limit.

MySQL Zástupné znaky vs. REGEXP: který z nich byste měli použít?

MySQL podporuje pouze dva zástupné znaky. Seznamy znaků, jako například [ac], které některé jiné databázové stroje akceptují v rámci LIKE, nejsou podporovány. Pokud vyhledávání vyžaduje rozsahy znaků, střídání nebo ukotvení, Operátor REGEXP je správná volba.

Kritérium LIKE se zástupnými znaky REGELEXP
Síla vzoru Pouze dva symboly: % a _ Třídy znaků, rozsahy, střídání, opakování
Typické použití Vyhledávání předpon, přípon nebo „obsahuje“ Validace, komplexní párování, více alternativ
Využití indexu Možné, pokud vzor nezačíná znakem %. Nikdy nepoužívá index
čitelnost Jednoduché pro začátečníky Strmější křivka učení

Zpravidla se nejprve používá operátor LIKE: je snadněji čitelný a je to jediný z těchto dvou operátorů, který může těžit z indexu. Pokud jeden vzor musí vyjadřovat několik alternativ, například porovnání všech názvů začínajících číslicí, přejděte na REGEXP. Oba operátory jsou porovnávání pouze pro čtení, takže ani jeden z nich nemění řádky vrácené funkcí INSERT or UPDATE příkazy; filtrují pouze to, co vybere klauzule WHERE.

Nejčastější dotazy

Ne, ve výchozím nastavení ne. Funkce LIKE se řídí řazením sloupce a standardním MySQL Řazení nerozlišuje velká a malá písmena, takže 'code%' odpovídá i „Code„. Pokud je vyžadováno rozlišování velkých a malých písmen, přidejte před sloupec klíčové slovo BINARY.

Ano. MySQL převede hodnotu na řetězec před jejím porovnáním, a proto funguje year_released LIKE '200_'. Převod zabraňuje použití indexu v daném sloupci, takže u velkých tabulek filtrujte s rozsahy, například MEZI ROKY 2000 A 2009.

Ne. Seznam znaků v závorkách akceptovaný některými jinými vyhledávači není platný uvnitř MySQL Vzor LIKE. Použijte Operátor REGEXP místo toho například title REGEXP '^[ac]', aby odpovídal rozsahu počátečních znaků.

Ano. Asistenti umělé inteligence překládají požadavky v prostém jazyce do vzorů LIKE, které můžete spustit v klientovi, jako je například MySQL WorkbenchVždy si prohlédněte vygenerovaný vzor, ​​protože posunutím jednoho symbolu % se změní, které řádky se vrátí.

Poradci pro dotazy s umělou inteligencí čtou výstup příkazu EXPLAIN a označují úvodní zástupné znaky, které přeskakují indexy. Poté navrhují alternativy, jako je fulltextové vyhledávání, prefixový vzor nebo… REGELEXP, které je stále třeba ověřit s ohledem na vaše vlastní datové objemy.

Shrňte tento příspěvek takto: