Střední škola stavební Jihlava
Sada 1 - PHP 15. Výběr dat z databáze. Příkaz SELECT Digitální učební materiál projektu: SŠS Jihlava – šablony registrační číslo projektu:CZ.1.09/1.5.00/34.0284 Šablona: III/2 - inovace a zkvalitnění výuky prostřednictvím ICT
Jan Pospíchal © 2012
Projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky
Příkaz SELECT Příkaz SELECT je asi nejužívanějším příkazem. Slouží k výpisu dat z tabulky. Za direktivou SELECT následuje seznam vypisovaných polí. Za klíčovým slovem FROM je uveden název tabulky. Příklad. Příkazem SELECT jmeno, prijmeni, skupina FROM seznamz; z tabulky seznamz vypíšeme všechny řádky, ale pouze sloupce jmeno, prijmeni, skupina.
Omezení počtu vrácených řádků Klíčovým slovem LIMIT můžeme omezit počet vypsaných řádků. Příklad. Příkazem SELECT id, jmeno, prijmeni, skupina FROM seznamz LIMIT 10;
vypíšeme maximálně prvních 10 řádků z tabulky seznamz. Příkazem SELECT id, jmeno, prijmeni, skupina FROM seznamz LIMIT 10,3;
vypíšeme maximálně 3 řádky tabulky, přičemž prvních 10 řádků přeskočíme. V našem případě tedy vypíšeme 11., 12. a 13. řádek tabulky seznamz. Klauzule LIMIT se používá k stránkování výpisu.
Aliasy Příkaz SELECT umožňuje přejmenovat tabulky, sloupce nebo výrazy a zobrazit nový název na výstupu. Příkazem SELECT id AS 'Pořadové číslo', CONCAT(jmeno,' ',prijmeni) AS Žák FROM seznamz;
přejmenujeme sloupec id na Pořadové číslo. Identifikátor Pořadové číslo se nazývá alias (přezdívka). Funkcí MySQL CONCAT zřetězíme údaje ze sloupců jmeno a prijmeni. Výsledek bude na výstupu nazván Žák. Klíčové slovo AS je volitelné, můžeme ho nahradit mezerou.
Klauzule WHERE Klauzule WHERE umožňuje vybrat z tabulky (tabulek) řádky splňující danou podmínku. Příkazem SELECT id AS 'Pořadové číslo', CONCAT(jmeno,' ',prijmeni) AS Žák FROM seznamz WHERE skupina=1;
vypíšeme z tabulky seznamz všechny žáky z první skupiny.
Odstranění duplicit Pomocí klíčového slova DISTINCT můžeme určit, že nechceme vypisovat duplicitní výsledky. Dotazem SELECT DISTINCT bydliste FROM cvictab;
vypíšeme bydliště osob uvedená v tabulce cvictab. Každé bydliště je vypsáno právě jednou.
Seskupování řádků Za klíčovým slovem GROUP BY je možné uvést několik výrazů. Všechny vstupní řádky, pro které výrazy nabývají stejné hodnoty, patří do jedné skupiny ve výsledku zastoupené jediným souhrnným řádkem. Agregační funkce (například COUNT, SUM) je vyhodnocena pro každý souhrnný řádek. Ve výrazech za slovem GROUP BY je možné použít libovolný sloupec z tabulek uvedených v části FROM. Příkaz SELECT bydliste AS Bydliště,count(bydliste) AS 'Počet osob' FROM cvictab GROUP BY bydliste; seskupí a spočte osoby podle bydliště. Příkaz SELECT bydliste AS Bydliště, nabozenstvi AS Náboženství, count(bydliste) AS 'Počet osob' FROM cvictab GROUP BY bydliste,nabozenstvi; seskupí podle dvou hledisek – bydliště a náboženství.
Klauzule HAVING Použijeme-li v dotazu SELECT část GROUP BY, můžeme podmínkou za klíčovým slovem HAVING omezit počet souhrnných řádků ve výsledku na ty, které splňují danou podmínku. Počet vstupních řádků seskupování můžeme omezit podmínkou v části WHERE. Příkazy SELECT bydliste AS Bydliště,FLOOR(AVG(mprijem)) AS 'Průměrný měsíční příjem' FROM cvictab GROUP BY bydliste; SELECT bydliste AS Bydliště,FLOOR(AVG(mprijem)) AS 'Průměrný měsíční příjem' FROM cvictab GROUP BY bydliste HAVING AVG(mprijem)>30000; ukazují působení klauzule HAVING.
Klauzule ORDER BY Řádky výsledku dotazu SELECT lze seřadit pomocí klauzule ORDER BY. Příkaz SELECT CONCAT(jmeno," ",prijmeni) AS Občan, bydliste AS Bydliště, mprijem AS 'Měsíční příjem' FROM cvictab ORDER BY bydliste, mprijem DESC;
vypíše řádky tabulky cvictab řazené podle bydliště (vzestupně) a podle příjmu (sestupně).
Funkce MySQL Server MySQL nabízí celou řadu vestavěných operátorů a funkcí. V následujícím příkazu je užito funkcí CONCAT pro spojení řetězců a DATE_FORMAT pro formátovaný výpis data. SELECT CONCAT(jmeno," ",prijmeni) AS ‘Jméno a příjmení‘, DATE_FORMAT(datnar, '%e.%c. %Y') AS 'Datum narození' FROM cvictab ORDER BY datnar DESC;
Výsledek dotazu bude řazen podle data narození sestupně, což znamená od osoby nejmladší po nejstarší.
Agregační funkce Některé funkce jsou určeny pro použití s klauzulí GROUP BY a říká se jim agregační funkce. Jedná se například o funkce avg, count, min, max, std, sum. Následující příkaz SELECT CONCAT(jmeno," ",prijmeni) AS 'Jméno a příjmení', bydliste AS Bydliště, MAX(mprijem) AS 'Měsíční příjem' FROM cvictab GROUP BY pohlavi;
vypíše muže a ženu s nejvyšším příjmen z tabulky cvictab.
Použitá literatura Mach , Jakub. PHP pro úplné začátečníky. 2. přepracované a rozšířené vydání. 1. vydání. Brno: CP Books a. s., 2005. 168 s. ISBN 80-7226-834-1 Naramore, E., Gerner, J., Le Scouarnec, Y., Stolz, J., Glass, M. Vytváříme webové aplikace v PHP5, MySQL a Apache. 1. vydání. Brno: Computer Press, a.s., 2006. 813 s. ISBN 80-251-1073-7 Lacko, Luboslav. PHP a MySQL Hotová řešení. 1. vydání . Brno: CP Books a. s., 2005. 300 s. ISBN 80-251-0397-8 Krejčí, Lukáš. PHP Kapesní přehled. 1. vydání. Brno: Computer Press, a.s., 2006. 107 s. ISBN 80-251-0808-2
Materiál je určen k bezplatnému používání pro potřeby výuky a vzdělávání na všech typech škol a školských zařízení. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je : : Jan Pospíchal Pokud není uvedeno jinak, byly při tvorbě použity volně přístupné internetové zdroje. Autor souhlasí se sdílením vytvořených materiálů a jejich umístěním na www.ssstavji.cz.