Začínáme s MySQL 13 – vestavěné funkce

Po předchozích dvou dílech věnovaných importu resp. exportu vám dnes povím něco o základních vestavěných funkcích, pomocí nichž si můžete podstatně zjednodušit práci.
Příkaz SELECT totiž umí pracovat s dost podstatnou věcičkou, a tou jsou funkce. Pomocí nich pak můžete mnohdy nádherně vytvořit konečný výstup, se kterým byste dlouho ztráceli čas u koncové aplikace. Nač taky – MySQL to vše umožní udělat rovnou. Navíc rychle a efektivně.

Funkce se v MySQL rozdělují do čtyř skupin: matematické, pro práci s řetězci (textem), logické a funkce pro práci s datumem a časem (těm se pro jejich rozsah budu věnovat v příštím díle). K čemu slouží jednotlivé typy funkcí, je myslím dost jasné, a tak se můžeme rovnou podívat na první skupinu funkcí – funkce matematické. Jen podotýkám, že zde nebudu popisovat veškeré funkce, ale pouze ty základní. Jejich kompletní výčet naleznete samozřejmě v manuálu, který je přiložen u distribuce.

Matematické funkce

Matematické funkce, jak již název napovídá, slouží k provádění různých matematických operací. Operace se provádějí za pomocí základních operátorů a u složitějších výrazů využijete některé základní funkce.

Mezi nejzákladnější operace patří sčítání, odčítání, násobení a dělení (jak jinak). Potřebujete-li tedy sečíst do výstupu dva sloupce, pak využijete operátor +:

SELECT (pole1 + pole2) AS vysledek FROM nazev_tabulky;

Tento zmíněný příklad vytvoří na výstupu pole vysledek, které bude obsahovat součet hodnot z polí pole1 a pole2. Obdobným způsobem můžete využít i ostatní operace:

SELECT (pole1 - pole2) AS vysledek FROM nazev_tabulky;
SELECT (pole1 *  pole2) AS vysledek FROM nazev_tabulky;
SELECT (pole1 /  pole2) AS vysledek FROM nazev_tabulky;

Dalším operátorem, který doplňuje předchozí operátory, je MOD (). Mnoho programátorů tento operátor zná z různých programovacích jazyků a ví, že vrací zbytek po celočíselném dělení. Použití je následující:

SELECT MOD(21, 5) AS vysledek;

(Upozornění: Mezi funkcí a závorkou s parametry nedělejte mezeru! MySQL zde neignoruje mezery.)

Celočíselný zbytek je 1 a tato hodnota se také zobrazí ve výstupním poli vysledek. Místo čísel můžete samozřejmě dosadit názvy příslušných sloupců. Další věc, která se vám jistě bude hodit, je součet všech hodnot ve sloupci. To realizuje za pomocí funkce SUM():

SELECT SUM(pole1) AS vysledek FROM nazev_tabulky;

Často se taktéž může hodit počet záznamů v tabulce. K tomu slouží funkce COUNT():

SELECT COUNT<) AS vysledek FROM nazev_tabulky;

S pomocí této funkce můžete kromě počtu záznamů zjistit i to, kolik je v některém sloupci neprázdných hodnot. Jedinou obměnou oproti předcházejícímu příkladu je, že do závorky místo hvězdičky uvedete název příslušného pole.

Může se rovněž stát, že budete chtít vypočítat průměr. Učiníte tak funkcí AVG():

SELECT AVG(pole1) AS vysledek FROM nazev_tabulky;

Takto formulovaný příkaz vypočítá průměr všech neprázdných hodnot v poli1.

Toto je tedy výčet těch nejzákladnějších a svým způsobem i nejprimitivnějších matematických funkcí, se kterými se můžete v MySQL setkat. Následující tabulka uvádí přehled některých dalších:

Název funkce Popis
ABS (x) Vrací absolutní hodnotu čísla x.
MAX (pole) Vrací maximální hodnotu z čísel uvedených v poli.
MIN (pole) Vrací minimální hodnotu z čísel uvedených v poli.
POWER (x, y) Umocní číslo x číslem y.
ROUND (x) Vrací zaokrouhlené číslo x.
ROUND (x, y) Vrací zaokrouhlené číslo x. Toto číslo je přitom zaokrouhleno na y desetinných míst.
SQRT (x) Vrací odmocninu z čísla x.
TRUNCATE (x, y) Vrací reálné číslo x, od kterého je odříznuto y desetinných míst.

Funkce pro práci s textovými řetězci

Další významnou skupinou, ne-li nejvýznamnější, jsou funkce, které pracují s textovými řetězci. Nejzákladnější operací zde bude spojování řetězců z více polí do jednoho výstupního. Při tom využijete funkci CONCAT():

SELECT CONCAT(pole1, pole2) AS vysledek FROM nazev_tabulky;

Rád bych podotknul, že tímto způsobem nemusíte spojovat pouze dva řetězce, ale může jich být i více. Podobnou funkcí je funkce SUBSTRING(). Ta vám umožní vybrat z textového řetězce pouze část. Tato funkce má celkem tři parametry. První udává textový řetězec, se kterým chcete pracovat , druhý udává pozici znaku, od kterého chcete začít "odsekávat", a poslední udává počet znaků, které chcete "odseknout". Následující příklad vrátí pouze první dva znaky:

SELECT SUBSTRING("Pavel", 1, 2) AS vysledek;

Kromě zmíněných funkcí CONCAT() a SUBSTRING() existují i další funkce, které stojí přinejmenším za stejnou pozornost. Velice zajímavé funkce jsou UCASE () a LCASE():

SELECT UCASE(pole1) AS vysledek FROM nazev_tabulky;
SELECT LCASE(pole2) AS vysledek FROM nazev_tabulky;

Zatímco první zmíněná funkce UCASE() převádí všechny znaky v řetězci na velká písmena, je funkce LCASE() pravým opakem. Dalšími funkcemi, které čas od času využijete, jsou funkce TRIM(), LTRIM() a RTRIM(). Tyto funkce slouží k odstranění mezer. Funkce LTRIM() přitom odstraňuje prázdné znaky vlevo před řetězcem. Opakem je RTRIM(), který je odstraňuje vpravo, a skloubením těchto dvou funkcí je TRIM(), který odstraní prázdné znaky nalevo i napravo.

SELECT  TRIM("    Pavel    ") AS vysledek;

Výsledný řetězec bude bez úvodních a závěrečných mezer. Zajímavou možností je rovněž možnost zjistit délku řetězce. Učiníte tak s pomocí funkce LENGTH():

SELECT LENGTH("Pavel") AS vysledek;

Výsledek je 5.

Uvedl jsem výčet nejzákladnějších funkcí pro práci s textovými řetězci. V následující tabulce naleznete ještě některé další:

Název funkce Popis
INSERT (puv_retezec, pocatek, poc_znaku, text) Tato funkce nahradí určitou část řetězce jiným textovým řetězcem.
INSTR (x, y) Zjistí pozici znaku y v řetězci x.
LEFT (x, y) Vrací prvních y znaků z řetězce x.
POSITION (x, y) Vrací pozici prvního výskytu řetězce x v řetězci y.
RIGHT (x, y) Vrací posledních y znaků z řetězce x.
STRCMP (x, y) Tato funkce vrací 1, pokud se řetězec x shoduje s řetězcem y. Při tomto porovnávání se rozlišuje i velikost písmen.

Logické funkce

Zajímavou skupinou funkcí v MySQL jsou logické funkce. Tyto funkce umožňují na vcelku primitivní úrovni vykonávat různé podmínky. Asi nejčastěji se setkáte s funkcemi IF(), IFNULL() a CASE. Nyní krátce popíši jednotlivé z nich.

Funkce IF() očekává 3 parametry. První je podmínka, která podle vyhodnocení vrátí buďto druhý parametr (pravda), nebo třetí parametr (nepravda). Pro lepší pochopení uvedu praktický příklad:

SELECT IF(pole1>pole2, "Pole1 je větší", "Pole2 je větší") AS vysledek FROM nazev_tabulky;

Jak je tedy patrné, pokud bude pole1 větší jak pole2, pak bude vrácen řetězec "Pole1 je větší" – v opačném případě "Pole2 je větší". Možná někoho z vás napadlo, že by to šlo řešit i přes klauzuli WHERE. To je sice pravda, ale ujišťuji vás, že tento způsob je podstatně rychlejší, a tudíž tolik nezatěžuje SQL server.

Další zajímavou funkcí je funkce IFNULL(). Ta obsahuje celkem dva parametry. První obsahuje podmínku, která v případě, že výsledek podmínky obsahuje prázdnou hodnotu, vrátí druhý parametr. Tato zdánlivě bezvýznamná podmínka může být velice užitečná, jak ostatně naznačuje následující příklad:

SELECT IFNULL((100/0), 0) AS vysledek;

Pokud byste v tomto případě nepoužili funkci IFNULL(), byla by vrácena prázdná hodnota, protože bylo děleno nulou.

Poslední funkcí, o které se chci dnes zmínit, je funkce CASE(). Tato funkce je vlastně ekvivalentem k funkci IF() pouze s tím rozdílem, že zde můžete porovnávat více než jen dvě hodnoty. Více napoví následující příklad:

SELECT CASE 1 WHEN pole1="Pavel" THEN 1 WHEN pole2="Pavel" THEN 2 WHEN pole3="Pavel" THEN 3 ELSE 0 END;

Krátce k vysvětlení. Pokud pole1 obsahuje řetězec "Pavel", pak je vrácena jednička. Neobsahuje-li pole1 tento řetězec, je vyhodnocována další podmínka, tj. jestli pole2 je rovno témuž řetězci. Takovýmto způsobem se testuje jedna podmínka za druhou do té doby, dokud není některá z nich splněna. Pokud není splněna ani jedna, pak je vrácena část, která je uvedena za ELSE.

Aby byl výklad o logických funkcích kompletní, je třeba se zmínit i o logických operátorech. S pomocí nich se totiž skládají výrazy, které – pokud všechny hodnoty splňují podmínku – vrací 1 neboli true (pravda). Nejčastěji se setkáte s operátory AND, OR a NOT.

Operátor AND je vyhodnocen jako pravda, jsou-li všechny hodnoty pravdivé. Pro ilustraci uvedu následující příklad:

SELECT 10 AND 20 AND 30;

Všechny hodnoty (10,20,30) jsou pravdivé, a proto je celý výraz pravdivý (true či 1). Oproti tomu operátor OR je vyhodnocen jako pravdivý tehdy, je-li alespoň jeden z výrazů pravdivý. Třetí operátor (NOT) slouží k negaci výrazu.

SELECT NOT (20);

Předcházející příklad by byl za normálních okolností vyhodnocen jako pravdivý, pokud by to operátor NOT nenegoval. Takhle je celý výraz nepravdivý (0 či false).

Závěrem

Tak to by bylo pro dnešek vše. V příštím díle zakončím povídání o funkcích funkcemi, které souvisí s datumem a časem.
Diskuze (10) Další článek: Upgrade chipsetu od VIA pro Pentium 4

Témata článku: Software, Programování, From, Základní popis, Trim, Ostatní operace, Nota, Různé znaky, Textové pole, Reálné číslo, Fun, Zajímavá funkce, Funkce, Code, Pole, Znak, Mys, Textový řetězec, Mezera, Vesta, Sloupec, Select, MySQL


Určitě si přečtěte

Testy procesorů Intel Comet Lake pro desktopy jsou venku. Teď už je jasné, jakého dostaly Ryzeny soupeře

Testy procesorů Intel Comet Lake pro desktopy jsou venku. Teď už je jasné, jakého dostaly Ryzeny soupeře

** Embargo pro testy nových desktopových procesorů Comet Lake od Intelu skončilo ** Spousta recenzí a testů ukazuje výhody a nevýhody nových modelů ** Dokáží nové procesory konkurovat modelům od AMD?

Karel Javůrek | 47

Je lepší hrát na PC, či na konzolích? Nebo jsou i jiné možnosti?

Je lepší hrát na PC, či na konzolích? Nebo jsou i jiné možnosti?

** Jaké jsou výhody a nevýhody hraní na počítači? ** Co mají společného a v čem se liší Xbox One, PS4 a Switch? ** Na čem hrát, když nemáte výkonné PC ani konzoli?

Lukáš Václavík | 124

12 netradičních map České republiky, které jste ještě nikdy neviděli

12 netradičních map České republiky, které jste ještě nikdy neviděli

** Tušíte, kolik je u nás hřbitovů a jak jsou velké? ** Dokážete si představit mapu českých řek a potoků? ** Udělali jsme to všechno za vás nad daty ČÚZK

Jakub Čížek | 10

Apple vychrlil novinky: Nové operační systémy a příprava na vlastní procesory

Apple vychrlil novinky: Nové operační systémy a příprava na vlastní procesory

** Apple dnes představuje novinky ** Tradiční keynote v rámci konference WWDC probíhá jen online ** Nové operační systémy, ale i něco navíc

David Polesný | 109

WindowsFX: Nainstalujte to mamce a taťkovi. Ani nepoznají, že to je Linux

WindowsFX: Nainstalujte to mamce a taťkovi. Ani nepoznají, že to je Linux

** Po dvou měsících tu máme další linuxovou kopii ** Tentokrát jde o imitaci Desítek ** Sestavili ji brazilští geekové nad Ubuntu

Jakub Čížek | 135


Aktuální číslo časopisu Computer

Megatest: nejlepší notebooky do 20 000 Kč

Test 8 levných IP kamer

Jak vybrat bezdrátová sluchátka

Testujeme Android 11