Poslední dva díly byly věnovány práci s daty, minulý článek se zábýval jen příkazem JOIN a spojováním tabulek. V tomto díle si řekneme další potřebné věci k realizaci dotazů nad MySQL databází a ukončíme tak povídání o problematice práce s daty.
Pojmenování některých tabulek můžeme zkrátit zápis dotazu. Velmi vřele doporučuji, urychluje to práci. Syntaxi pojmenování píšeme následovně, tabulka auto je zkrácena na 'a' a tabulka garaz je pojmenována zkratkou 'g'.
SELECT a.znacka FROM auto AS a, garaz AS g WHERE a.znacka=g.znacka;
Nebo můžeme pojmenovat i například výpočty, zde pojmenujeme sloupec, který bude obsahovat cenu bez DPH:
SELECT znacka,model,(cena*0.81) AS 'cena_bez_dph' FROM auto;
Následující příklad ukazuje, jak se dají spojit hodnoty jednotlivých sloupců. Zde spojíme značku a model do sloupce 'jmeno_auta'. Hodnota uložená v tomto sloupci pak bude mít tvar znacka-model(skoda-octavia).
SELECT CONCAT(znacka,' - ',model) AS jmeno_auta FROM auto;
Odstrannění duplikátů můžeme použít třeba, když chceme zjistit, jaké značky aut máme. Například je v tabulce 'auto' uloženo 5 aut Škoda, 3 auta Dacia, 3 auta Peugeot. A my chceme vypsat jen jednou Škoda, Dacia, Peugeot. Stačí použít příkaz DISTINCT.
SELECT DISTINCT znacka FROM auto;
Slučování do skupin je něco jiného než spojování tabulek, protože pokud používáme spojování tabulek, pracujeme vždy se dvěmi a více tabulkami, ale zato při slučování do skupin pracujeme jen s jednou tabulkou. Vždy slučování probíhá s cílem zjistit informace o záznamech, které mají něco společného.
Sloučení do skupin se dá použít například v zde používaném příkladu, když chcete vědět kolik kilometrů najela auta s různými druhy motorů. Dejme tomu, že máme benzínová a dieslová auta. Tím pádem budou 2 výsledky, jeden pro benzínový motor a jeden pro dieslový motor.
SELECT druh_motoru, SUM(kilometry) AS 'celkem_km' FROM auto GROUP BY druh_motoru;
Pokud potřebujete omezit počet vybraných záznamů, použijte LIMIT.
SELECT * FROM auto LIMIT 0,10;
Seřadí záznamy podle hodnot zvoleného sloupce. V příkladu níže seřadí auta podle najetých kilometrů.
SELECT * FROM auto ORDER BY najete_km;
Seřadí záznamy podle hodnot zvoleného sloupce sestupně. V příkladu níže seřadí sestupně auta podle najetých kilometrů.
SELECT * FROM auto ORDER BY najete_km DESC;
Logický operátor AND(&&). Vrátí záznam jen pokud obě podmínky jsou splněny.
Př: Vybere auta, které jsou zelené a mají najeto méně jak 30000km.
SELECT * FROM auto WHERE barva="zelena" AND najete_km<30000;
Logický operátor OR(||). Vrátí záznam pokud minimálně jedna z podmínek je splněna.
Př: Vybere auta, které jsou zelené, nebo které mají najeto méně jak 30000km, či oboje.
SELECT * FROM auto WHERE barva="zelena" OR najete_km<30000;
Logický operátor NOT(!). Vrátí záznam pokud podmínka není splněna.
Př: Vybere auta, které nejsou zelená.
SELECT * FROM auto WHERE NOT barva="zelena";
Pokud je hledaná hodnota:
1 - vrátí Škoda
2 - vrátí Peugeot
jinak - vrátí Renault
SELECT CASE hledana_hodnota WHEN 1 THEN 'Škoda'
WHEN 2 THEN 'Peugeot'
ELSE 'Renault' END;
SELECT IF('zelena'=='cervena','ano','ne');
IFNULL(10/0,'chyba');
Vrací proměnnou1, pokud se proměnná1 nerovná proměnné2, jinak vrací NULL.
NULLIF(promenna1,promenna2);
| + | součet |
|---|---|
| - | rozdíl |
| * | nasobení |
| / | dělení |
| % | zbyte po dělení |
SELECT 12%5; //výsledek 2
| AVG(název_sloupce) | Spočítá průměr z hodnot ve sloupci | SELECT AVG(najete_km) FROM auto; |
|---|---|---|
| COUNT(název_sloupce) | Vypočte počet hodnot ve sloupci | SELECT COUNT(najete_km) FROM auto; |
| GREATEST(hodnota1,hodnota2,...) | Vrátí nejvyšší hodnotu v řetězci | SELECT GREATEST(1,2,3) FROM auto; |
| LEAST(hodnota1,hodnota2,...) | Vrátí nejnižsí hodnotu v řetězci | SELECT LEAST(1,2,3) FROM auto; |
| MAX(název_sloupce) | Vrátí nejvyšší hodnotu ve sloupci | SELECT MAX(najete_km) FROM auto; |
| MIN(název_sloupce) | Vrátí nejnižší hodnotu ve sloupci | SELECT MIN(najete_km) FROM auto; |
| MOD(dělenec,dělitel) | Vrátí zbytek po dělení | SELECT MOD(12,5); |
| ROUND(cislo) | Zaokrouhlí desetiné číslo na celé | SELECT ROUND(12.5); |
| ROUND(cislo,pocet_mist) | Zaokrouhlí desetiné číslo na zadaný počet nul | SELECT ROUND(12.5,2); |
| STD(nazev_sloupce) | Vypočte směrodatnou dochylku z hodnot ve sloupci | SELECT STD(najete_km); |
| SUM(nazev_sloupce) | Sečte číselné hodnoty ve sloupci | SELECT SUM(najete_km); |
| LENGTH(retezec) | Vrátí délku řeřězce | SELECT LENGTH('škoda'); |
|---|---|---|
| LOCATE(co hledat,v čem,začátek) | Hledá podřetězec v řetězci od hodnoty začátku | SELECT LOCATE('da','škoda',1); |
| SUBSTRING(řetězec,začátek) | Vrátí zbytek řetězce od pozice dané počátkem | SELECT SUBSTRING('škoda',2); |
| REPLACE(řetězec,co nahradit,čím nahradit) | Nahradí část řetězce | SELECT REPLACE('škoda','ško','la'); |
| REVERSE(řetězec) | Otočí řetězec | SELECT REVERSE('škoda'); |
| TRIM(řetězec) | Vymaže z řetězce mezery | SELECT TRIM('š ko da'); |
| TRIM(BOTH řetězecA FROM řetězecB); | Ořízne řetězec B řetězcem A z obou stran | SELECT TRIM(BOTH 'ško' FROM 'školadaško'); |
| TRIM(LEADING řetězecA FROM řetězecB); | Ořízne řetězec B řetězcem A zpředu | SELECT TRIM(LEADING 'ško' FROM 'školada'); |
| TRIM(TRAILING řetězecA FROM řetězecB); | Ořízne řetězec B řetězcem A zezadu | SELECT TRIM(TRAILING 'ško' FROM 'ladaško'); |
| LTRIM(řetězec) | Odstraní bílé znaky zleva od řetězce. | SELECT LTRIM(' škoda'); |
| RTRIM(řetězec) | Odstraní bílé znaky zprava od řetězce. | SELECT RTRIM('škoda '); |
| UPPER(řetězec) | Převede znaky řetězce na velké | SELECT UPPER('škoda'); |
| LOWER(řetězec) | Převede znaky řetězce na malé | SELECT UPPER('ŠKODA'); |
| NOW() | Vrátí aktuální datum a čas ve tvaru RRRR-MM-DD HH:MM:SS |
|---|---|
| NOW()+0 | vrátí aktuální datum a čas ve tvaru RRRRMMDDHHMMSS |
| CURRENT_DATE() | Vrátí aktuální datum ve tvaru RRRR-MM-DD |
| CURRENT_TIME() | Vrátí aktuální čas ve tvaru HH:MM:SS |
| DATE_FORMAT(vstup,vystup) | DATE_FORMAT(NOW(),"%d.%m.%y") %Y - rok RRRR %y - rok RR %m - měsíc MM %c - měsíc M nebo MM %M - název měsíce %b - název měsíce zkráceně %u - číslo týdne v roce %D - den řadovou číslovkou %d - den v měsíci D %e - den v měsíci D nebo DD %w - číslo dne v týdnu D %W - název dne v týdnu %a - název dne v týdnu zkráceně %j - číslo dne v roce DDD %H - hodina HH %k - hodina H nebo HH %h - hodina HH jen do 12 %l - hodina H nebo HH jen do 12 %i - minuty MM %s - sekundy SS %P - délka cyklu, půldenní nebo celodenní (př. AM, PM) %% - znak % |
| SELECT QUARTER(datum) | Vrací čtvrdletí zadaného data SELECT QUARTER(2009-05-30) .... vrátí 2 |