Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: Číslo šablony: Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek: CZ.1.07/1.5.00/34.0410 V/2 - inovace směřující k rozvoji odborných kompetencí Pracovní listy Databáze 3. ročník (IT) BEL_52_DAT_PL5 Miloslav Bělský Databáze Výběrový dotaz Anotace: Obsahem tohoto pracovního listu je využití funkcí SQL víceřádkové funkce a funkce pro práci s textem Datum: 15. 10. 2013 5-1
Databáze Pracovní list č. 5 Funkce víceřádkové, jednořádkové řetězcové Cíl Naučit se využívat víceřádkové a jednořádkové funkce v rámci výběrového dotazu. Uvědomit si, jak funkce pracují a jaké mají možnosti. Výklad V jazyce SQL můžeme využívat jednořádkové a víceřádkové funkce. 1. Víceřádkové funkce (COUNT, SUM, MAX, MIN, AVG) tyto funkce zpracují všechny vybrané řádky a poskytnou výsledek. 2. Jednořádkové funkce (numerické, řetězcové, datové, převodní, ) Umožňují provést nějakou akci na každém řádku výběru. Víceřádkové funkce Víceřádkové funkce NELZE použít v klauzuli WHERE! COUNT (sloupec nebo *) funkce spočítá, kolik NOT NULL hodnot se nachází ve vybraném sloupci. Pokud uvedeme znak *, spočítá všechny řádky, na kterých se nachází alespoň jedna NOT NULL hodnota. MAX(sloupec), MIN (sloupec) funkce určí maximální, resp. minimální hodnotu ve vybraném sloupci, lze jí použít i na datum. SUM(sloupec) funkce sečte všechny hodnoty ve vybraném sloupci. AVG(sloupec) funkce vypočítá aritmetický průměr hodnot ve vybraném sloupci. Příklady: SELECT AVG(plat) FROM zaměstnanci WHERE prijmeni LIKE 'A%'; Dotaz vrátí průměrný plat všech zaměstnanců, jejichž příjmení začíná na 'A'. SELECT MAX(plat) AS "maximální plat" FROM zaměstnanci; Tento dotaz vrátí nejvyšší plat z tabulky zaměstnanci a údaj vhodně pojmenuje. 5-2
SELECT COUNT(plat) FROM zaměstnanci; Dotaz vrátí počet zaměstnanců, kteří pobírají nějaký plat. Řádky s hodnotou NULL se nezapočítají. Jaké datum je považováno funkcí MAX za větší: 1.2.2005 nebo 1.2.2013? Je následující dotaz zapsaný správně? Zdůvodni: SELECT jmeno, prijmeni, plat FROM zaměstnanci WHERE plat = MAX(plat); Jednořádkové funkce práce s textem Mezi tyto funkce patří UPPER, LOWER, INITCAP, INSTR, SUBSTR, LPAD, RPAD, LENGTH, REPLACE, CONCAT, TRIM. UPPER/LOWER/INITCAP(text) tyto funkce převedou zadaný text na velká resp. malá resp. první velká písmena. V případě INITCAP bude první písmeno velké v každém slově. SUBSTR(text, začátek, konec) funkce vybere část textu od zadaného začátku do zadaného konce. INSTR(text, hledaný_text) tato funkce určí pozici výskytu hledaného textu v textu. LPAD/RPAD(text. délka, znak) tyto funkce doplní zleva resp. zprava zadaný text zadaným znakem na požadovanou délku v bytech (české znaky jsou uloženy ve dvou bytech). LENGTH(text) tato funkce vrátí délku zadaného textu. REPLACE(text, hledaný_text, náhradní_text) funkce nahradí v zadaném textu hledaný text náhradním textem. TRIM(znak FROM text) odstraní ze začátku a konce textu zadaný znak. CONCAT(text1, text2) funkce spojí text1 a text2. Tato funkce je ekvivalentní s operátorem. 5-3
Příklady k procvičení Vytvářejte dotazy podle následujícího zadání. Příklady označené *** jsou velmi obtížné. Pod každým úkolem je prostor na poznámky: 1. Vypište počet zaměstnanců v tabulce EMPLOYEES. 2. Vypište nejvyšší a nejnižší plat z tabulky EMPLOYEES. Sloupce vhodně pojmenujte. 3. Vypište nejvyšší plat zaměstnanců z oddělení 50 a 80 4. Vypočítejte průměrný plat zaměstnanců, kteří neberou žádnou provizi 5. Určete celkové mzdové náklady oddělení 60 6. Určete datum, kdy byl naposledy přijat zaměstnanec 7. Vypište počet oddělení, které mají manažera (DEPARTMENTS). 8. *** Vypište jméno, příjmení a datum přijetí zaměstnance, který byl přijat nejdříve 9. *** Vypište jméno, příjmení a plat zaměstnance, který bere nejvyšší plat 5-4
10. Vypište počet znaků nejdelšího a nejkratšího příjmení 11. Název oddělení doplňte zleva i zprava třemi hvězdičkami (DEPARTMENTS). 12. Užitím funkce vypište všechny zaměstnance, kteří ve svém příjmení mají velké nebo malé 'S'. Seřaďte tyto zaměstnance podle abecedy 13. Vypište zaměstnance, jejichž příjmení je delší než pět znaků využijte funkci 14. Vypište příjmení velkými písmeny a za něj iniciálu křestního jména s tečkou pro všechny zaměstnance 15. ***Z prvních pěti písmen příjmení a prvních dvou písmen křestního jména vytvořte emailovou adresu zaměstnance. Adresa bude končit @odděleníxxx.firma.cz, kde XXX bude číslo oddělení doplněné zleva nulami na délku tří znaků, bude-li to třeba. 16. ***Jména zaměstnanců doplňte zleva znakem '*' tak, že celková délka jména s hvězdičkami bude vždy 15 znaků. 5-5