S tř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 LIMITmůž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 SELECTumožň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 idna Pořadové číslo. Identifikátor Pořadové číslo se nazývá alias (přezdívka). Funkcí MySQL CONCATzřetězíme údaje ze sloupců jmenoa prijmeni. Výsledek bude na výstupu nazván Žák. Klíčové slovo ASje 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 seznamzvš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 bydlisteas Bydliště, nabozenstvias Náboženství, count(bydliste) AS 'Počet osob' FROM cvictabgroup 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 bydlisteas Bydliště,FLOOR(AVG(mprijem)) AS 'Průměrný měsíční příjem' FROM cvictab GROUP BY bydliste; SELECT bydlisteas Bydliště,FLOOR(AVG(mprijem)) AS 'Průměrný měsíční příjem' FROM cvictabgroup BY bydlistehaving AVG(mprijem)>30000; ukazují působení klauzule HAVING.
Klauzule ORDER BY Řádky výsledku dotazu SELECTlze seřadit pomocí klauzule ORDER BY. Příkaz SELECT CONCAT(jmeno," ",prijmeni) AS Občan, bydlisteas Bydliště, mprijemas 'Měsíční příjem' FROM cvictaborder BY bydliste, mprijem DESC; vypíše řádky tabulky cvictabřazené podle bydliště (vzestupně) a podle příjmu (sestupně).
Funkce MySQL Server MySQLnabí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í', bydlisteas 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říjmenz 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., LeScouarnec, Y., Stolz, J., Glass, M. Vytváříme webové aplikace v PHP5, MySQLa Apache. 1. vydání. Brno: ComputerPress, a.s., 2006. 813 s. ISBN 80-251-1073-7 Lacko, Luboslav. PHP a MySQLHotová řešení. 1. vydání. Brno: CP Booksa. s., 2005. 300 s. ISBN 80-251-0397-8 Krejčí, Lukáš. PHP Kapesní přehled. 1. vydání. Brno: ComputerPress, 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.