Nacházíte se: tvorba webu :: mysql :: prace_s_daty2

MySQL - Práce s daty - pokračování

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í

AS

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;


Spojování proměnných

CONCAT

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;


Odstranění duplikátů

DISTINCT

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

GROUP BY

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.

Příklad

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;


Omezení počtu záznamů

LIMIT start,pocet

Pokud potřebujete omezit počet vybraných záznamů, použijte LIMIT.

  SELECT * FROM auto LIMIT 0,10;


Seřazení záznamů

ORDER BY podmínka

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;

ORDER BY podminka DESC

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átory

AND, &&

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;

OR, ||

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;

NOT, !

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";


Kontrolní funkce

CASE ... END

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;

IF(podminka,pravda,nepravda);

   SELECT IF('zelena'=='cervena','ano','ne');

IFNULL(podminka,vystup_pri_chybe);

  IFNULL(10/0,'chyba');

NULLIF(proměnná1,proměnná2);

Vrací proměnnou1, pokud se proměnná1 nerovná proměnné2, jinak vrací NULL.

  NULLIF(promenna1,promenna2);


Aritmetické operátory

+součet
-rozdíl
*nasobení
/dělení
%zbyte po dělení
  SELECT 12%5;  //výsledek 2


Práce s čísly

AVG(název_sloupce)Spočítá průměr z hodnot ve sloupciSELECT AVG(najete_km) FROM auto;
COUNT(název_sloupce)Vypočte počet hodnot ve sloupciSELECT COUNT(najete_km) FROM auto;
GREATEST(hodnota1,hodnota2,...)Vrátí nejvyšší hodnotu v řetězciSELECT GREATEST(1,2,3) FROM auto;
LEAST(hodnota1,hodnota2,...)Vrátí nejnižsí hodnotu v řetězciSELECT LEAST(1,2,3) FROM auto;
MAX(název_sloupce)Vrátí nejvyšší hodnotu ve sloupciSELECT MAX(najete_km) FROM auto;
MIN(název_sloupce)Vrátí nejnižší hodnotu ve sloupciSELECT 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 nulSELECT ROUND(12.5,2);
STD(nazev_sloupce)Vypočte směrodatnou dochylku z hodnot ve sloupciSELECT STD(najete_km);
SUM(nazev_sloupce)Sečte číselné hodnoty ve sloupciSELECT SUM(najete_km);


Práce s řetězci

LENGTH(retezec)Vrátí délku řeřězceSELECT LENGTH('škoda');
LOCATE(co hledat,v čem,začátek)Hledá podřetězec v řetězci od hodnoty začátkuSELECT LOCATE('da','škoda',1);
SUBSTRING(řetězec,začátek)Vrátí zbytek řetězce od pozice dané počátkemSELECT SUBSTRING('škoda',2);
REPLACE(řetězec,co nahradit,čím nahradit)Nahradí část řetězce SELECT REPLACE('škoda','ško','la');
REVERSE(řetězec)Otočí řetězecSELECT REVERSE('škoda');
TRIM(řetězec)Vymaže z řetězce mezerySELECT TRIM('š ko da');
TRIM(BOTH řetězecA FROM řetězecB);Ořízne řetězec B řetězcem A z obou stranSELECT TRIM(BOTH 'ško' FROM 'školadaško');
TRIM(LEADING řetězecA FROM řetězecB);Ořízne řetězec B řetězcem A zpředuSELECT TRIM(LEADING 'ško' FROM 'školada');
TRIM(TRAILING řetězecA FROM řetězecB);Ořízne řetězec B řetězcem A zezaduSELECT 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');


Práce s řetězci

NOW()Vrátí aktuální datum a čas ve tvaru RRRR-MM-DD HH:MM:SS
NOW()+0vrá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
úvod | tvorba webu | ostatní | služby | návštěvní kniha | kontakt