SQL Structured Query Language

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

KIV/ZIS Cvičení 6 SQL - SELECT.
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Tabulkové procesory (MS Excel)
Programování funkcí v Excelu
Datové a časové funkce Date () – vrací aktuální systémové datum
Timer časovač potřebuji provádět příkazy opakovaně po uplynutí určitého časového intervalu vlastnost Interval nastavuji v milisekundách (1000  1s) určuje.
MS Excel - funkce Břetislav Regner PROJEKT financovaný
Datum a čas Pro práci s datem a časem se používají dvě hlavní funkce.
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Databázové systémy SQL Výběr dat.
YDASYS1 Ing. Monika Šimková.
Databázové systémy SQL Agregace a funkce.
AGREGACE Distinct, Group By, Having, SUM, …. DISTINCT  Slučování stejných řádků ve výsledku dotazu. AGREGACE 2 JménoPříjmeníID FrantišekVomáčka1 JosefPokorný2.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
SQL Structured Query Language
Informatika pro ekonomy II přednáška 11
Databázové systémy 1 Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 3 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Temporální databáze a TSQL
Skriptový jazyk, který se používá při tvorbě stránek.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Databázové systémy 2 Cvičení č. 7 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
DalšíPředchozíTÉMA: M. K a d l e c o v á M. K a d l e c o v á.
MATLAB LEKCE 1.
Prezentace produktu Microsoft Excel. ČAS Vrátí číslo, které představuje určitý čas. Toto číslo vrácené funkcí ČAS je desetinné číslo v rozmezí od 0 do.
Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Datové typy a práce s nimi
Návrh a tvorba WWW Přednáška 11
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
MS ACCESS parametrický dotaz
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy Přednáška č. 6.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
MS Excel Funkce 1. Příklad logické funkce: KDYŽ 2. MATEMATICKÉ FUNKCE 3. LOGICKÉ FUNKCE 4. TEXTOVÉ FUNKCE 5. STATISTICKÉ FUNKCE.
Informatika I 4. přednáška
JavaScript Podmínky, cykly a pole.
Fakulta elektrotechniky a informatiky
Databázové systémy 2 Zkouška – 08:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK3(p_oddeleni_id_from NUMBER, p_oddeleni_id_to NUMBER,
2OP483 Manažerská informatika 3Access - BankaSnímek 1 2OP483 Manažerská informatika 3 Microsoft Office Access 2007 Dotazy v databázi Banka
Pole Arrays.
Aplikační a programové vybavení
Databáze velké množství dat pevně dané struktury
MS Excel 2 Martin Kotlík Brno, 20. ledna 2015 Obsah předchozího semináře 1 1.Popis programu Excel 2.Základní dovednosti 3.Typy vkládaných dat 4.Formát.
KIV/ZIS cvičení 4 Tomáš Potužák. Dotazy - úvod Umožňují pracovat s databází –Získávat specifické informace z tabulky, případně z více tabulek najednou.
Databázové systémy SQL Výběr dat.
 Agregační funkce  Agregační funkce jsou to funkce, které nějakým způsobem zpracují více hodnot a jako výsledek vrátí hodnotu jednu COUNT()  Funkce.
Použití dotazu jako zdroj dat pro pohled Vypracovala: Procházková Petra.
Databázové systémy 2 Zkouška – 8:00. Příklad I - Funkce Vytvořte funkci ZK_DIFF_MIN_MAX (P_ZAM_ID NUMBER) RETURN VARCHAR2. Funkce může vracet.
SQL Další dotazy a pohledy Databázové systémy. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Fce VB - matematické Abs( výraz ) Fix( výraz ) Int( výraz) Sgn(výraz )
Programovací jazyk C# 2. část. Datové typy C# rozeznává dva druhy datových typů, hodnotové a referenční. Hodnotové datové typy Proměnné hodnotového datového.
SQL Agregace a funkce Databázové systémy. Agregační funkce SUM( ) - součet numerických hodnot ve sloupci MIN( ) - minimální hodnota ve sloupci MAX( )
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Algoritmizace a programování
KIV/ZD cvičení 5 Tomáš Potužák.
Vzorové řešení zápočtového testu
Algoritmizace a programování
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Databázové systémy a SQL
Databázové systémy a SQL
Přednáška 7 SQL – JOIN.
Transkript prezentace:

SQL Structured Query Language Agregace a funkce

Agregační funkce SUM( ) - součet numerických hodnot ve sloupci MIN( ) - minimální hodnota ve sloupci MAX( ) - maximální hodnota ve sloupci COUNT( ) - počet numerických hodnot ve sloupci AVG( ) - aritmetický průměr numerických hodnot ve sloupci Vnořování uvedených funkcí do sebe, např. MIN(SUM()), není ve většině implementací SQL povoleno.

Agregace – seskupování Agregaci si lze představit jako shluknutí několika řádků do jednoho. Pro tuto "skupinu" řádků můžeme pomocí agregačních funkcí používat různé matematické operace. K tomu je zapotřebí rozšířit příkaz SELECT o části GROUP BY případně HAVING. Syntax příkazu SELECT : SELECT seznam sloupců FROM seznam tabulek [WHERE podmínky] [GROUP BY výrazy pro seskupení] [HAVING podmínka pro skupiny]

Seskupení řádků – GROUP BY Seskupení se provádí podle hodnot určitých sloupců. Seskupovat můžeme podle hodnot libovolného počnu sloupců. Seskupení spočívá v tom, že když se objeví dva řádky, jejichž hodnoty se ve vybraných sloupcích shodují, databázový systém na ně bude pohlížet jako na jeden řádek. Příklad: Mějme tabulku ZAPIS, která bude obsahovat data: id_st id_pr S1 P1 S2 P1 S2 P2 S3 P2 S3 P3 Pokud provedeme seskupení podle sloupce id_st, výsledek po seskupení bude mít pouze tři řádky.

a) - bez aplikace agregační funkce Ve druhem sloupci by se objevili první z nalezených hodnot odpovídajících prvnímu sloupci: SELECT id_st,id_pr id_st id_pr FROM zapis S1 P1 GROUP BY id_st; S2 P1 Výsledek: S1 P1 S2 P2 S2 P1 S3 P2 S3 P2 S3 P3 SELECT id_pr,id_st id_pr id_st FROM zapis P1 S1 GROUP BY id_pr; P1 S2 Výsledek: P1 S1 P2 S2 P2 S2 P2 S3 P3 S3 P3 S3

b) - s aplikací agregační funkce Použitím funkce, která by sečetla počet záznamů odpovídajících prvnímu sloupci, bychom dostali tabulku: SELECT id_st,COUNT(*) id_st id_pr FROM zapis S1 P1 1 GROUP BY id_st; S2 P1 2 Výsledek: S1 1 S2 P2 S2 2 S3 P2 2 S3 2 S3 P3 SELECT id_pr,COUNT(*) id_pr id_st FROM zapis P1 S1 2 GROUP BY id_pr; P1 S2 Výsledek: P1 2 P2 S2 2 P2 2 P2 S3 P3 1 P3 S3 1

Součet záznamů - COUNT( ) COUNT(*) je nejzákladnější agregační funkcí, která slouží jenom k získání počtu záznamů v rámci jedné skupiny agregovaných řádků. Zajímá-li nás kolik předmětů studuje každý ze studentů: SELECT s.jmeno, s.prijmeni, COUNT(*) pocet_pr FROM zapis z, student s WHERE z.id_st=s.id_st GROUP BY s.id_st; Takovýto výpis není ale pravdivý. Chceme-li získat kompletní výpis, použijeme k tomu např. levé vnější spojení tabulek: SELECT s.jmeno, s.prijmeni, COUNT(jz.id_pr) pocet_pr FROM student s LEFT JOIN zapis z ON z.id_st=s.id_st

SUM(sloupec) Agregační funkce SUM( ) vrátí součet hodnot v uvedeném sloupci v rámci shluknuté skupiny záznamů. Pokud bychom chtěli součet poplatků všech studentů na daném oboru, napsali bychom následující příkaz: SELECT obor, SUM(poplatek) FROM student GROUP BY obor; AVG(sloupec) Funkce AVG( ) počítá aritmetický průměr z vybraných hodnot zadaného sloupce. Chceme-li zjistit průměr studijních výsledků studentů na oborech: SELECT obor, AVG(st_prumer) FROM student GROUP BY obor;

MIN(sloupec) Agregační funkce MIN( ) slouží pro vrácení minima z hodnot ve sloupci ze seskupených záznamů. Chceme-li zjistit nejlepší studijní výsledky studentů v ročníku: SELECT rocnik, MIN(st_prumer) FROM student GROUP BY rocnik; MAX(sloupec) Funkce MAX( ) vrací maximum z hodnot zadaného sloupce. Příklad vypíše seznam nakladatelství, a pro každé z nich bude uvedeno kolik stojí jejich nejdražší výtisk. Chceme-li zjistit nejhorší studijní výsledky studentů v ročníku: SELECT rocnik, MAX(st_prumer) FROM student GROUP BY rocnik;

Další použití agregačních funkcí Na výstup dostaneme všechny skupiny agregovaných záznamů, ale někdy potřebujeme v rámci takových záznamů vybrat jen ty záznamy, které ještě dále budou splňovat další podmínky. Dodatečnou restrikci zapisujeme v části HAVING: Chceme seznam všech studentů, kteří mají zapsaný více než jeden předmět. Přehled vypište ve formě jméno a příjmení studenta následované počtem předmětů, na které je zapsán: SELECT s.jmeno, s.prijmeni,COUNT(*) pocet_pr FROM zapis z, student s WHERE z.id_st=s.id_st GROUP BY s.id_st HAVING count(*) >1;

Třídění dle výsledků agregační funkce Chceme-li výpis setřídit podle hodnoty agregační funkce, za klíčové slovo ORDER BY uvedeme agregační funkci: SELECT obor, AVG(st_prumer) FROM student GROUP BY obor ORDER BY AVG(st_prumer); Některé databázové systémy mají však omezení, v takovém případě použijeme modifikátor AS: SELECT obor, AVG(st_prumer) AS prumer ORDER BY prumer;

Agregace bez klíče Pokud výchozí tabulka obsahuje úplná data a nehodláme rozlišovat jednotlivé řádky: SELECT COUNT(s1),SUM(s1),AVG(s1), MIN(s1),MAX(s1) FROM Tabulka; vznikne tabulka obsahující právě jeden řádek s hodnotami agregačních funkcí. Po řadě obsahuje hodnotu počtu platných hodnot s1, součtu, aritmetického průměru, minimální a maximální hodnotu. Při agregaci se není nutné omezovat jen na jeden sloupec. Agregační funkce je možné použít na jakýkoli výraz odkazující se na libovolný počet sloupců původní tabulky, např. SELECT COUNT(s2*s3) POCET, SUM(s2*s3) SOUCET FROM Tabulka;

Agregace s jednoduchým klíčem Chceme-li použít jeden sloupec tabulky jako klíč ke shlukování řádků do agregátů, stačí uvést klíčové slovo GROUP BY a za ním název agregačního sloupce. Pro pochopení dotazu s agregací je třeba si uvědomit pořadí kroků, které provádí SQL server po obdržení dotazu: TABULKA => RESTRIKCE => AGREGACE => TŘÍDĚNÍ => PROJEKCE V SQL je rozpor mezi pořadím v syntaxi a pořadím provádění jednotlivých kroků. Toto naštěstí mate pouze uživatele, ale ne SQL server. Ten zkontroluje syntaxi příkazu, a pak zvolí optimální pořadí kroků.

Agregace se složeným klíčem Chceme-li použít více sloupců tabulky jako klíč ke shlukování řádků do agregátů, stačí uvést za klíčové slovo GROUP BY názvy příslušných sloupců oddělené čárkou. Nejde o nic jiného než o popis složeného klíče pro agregaci. Pokud nás zajímá jaké jsou minimální studijní průměry na jednotlivých oborech podle ročníků, stačí napsat příkaz: SELECT obor, rocnik,MIN(st_prumer) FROM student GROUP BY obor,rocnik ORDER BY obor,rocnik

Práce s funkcemi Dvě základní skupiny funkcí: Skalární funkce, které se většinou aplikují na jeden argument (pole) a vrací opět jednu hodnotu (pole). Agregační funkce, jejichž vstupem jsou množiny řádků (záznamů) a z nich je počítána výsledná hodnota. Funkce můžeme volat ve všech SQL příkazech, zejména pak v dotazech. Chceme-li nějakou funkci použít, musíme dotaz upravit tak, aby bylo jasné, na které sloupce bude použita: SELECT FUNKCE(sloupec) FROM Tabulka; V názvech funkcí se nerozlišují velká a malá písmena. Mezi názvem funkce a následující závorkou nesmí být mezera!

Textové funkce - práce s řetězci CONCAT(x, y,…) - zřetězení dvou nebo více řetězců (sloupců) do jednoho: SELECT CONCAT(prijmeni," ",jmeno) AS cele_jmeno FROM student; V některých systémech se používá možnost zřetězení použitím znaménka „+“ (např. prijmeni+" "+jmeno). LENGTH(sloupec) - vrací délku řetězce; (v některých systémech se můžeme setkat s názvem LEN ). Výpis seznamu studentů a oborů, na kterých studují, seřazený podle délky oboru: SELECT prijmeni,jmeno,obor FROM student ORDER BY length(obor);

Textové funkce - práce s řetězci LEFT(sloupec, x) / RIGHT(sloupec, x) - vrací x znaků umístěných úplně vlevo/vpravo v hodnotě uložené ve vybraném sloupci. Výpis prvních dvou znaků rodného čísla : SELECT prijmeni, jmeno, LEFT(rod_cislo,2) FROM student; SUBSTRING(sloupec, počátek, délka) - funkce vracející nějaký podřetězec, nejtypičtější jejich použití je se třemi parametry. Výpis z každého rodného čísla den narozeni (pátý až šestý znak): SELECT prijmeni, jmeno, SUBSTRING(rod_cislo,5,2) UPPER(sloupec) /LOWER(sloupec) - převedení řetězce na velká/malá písmena. SELECT upper(prijmeni), jmeno

Číselné funkce Základní funkce pro práci s čísly: ABS(X) – vrací absolutní hodnota z čísla X, SIN(X) - vrací sinus úhlu X(zadaného v radiánech), COS(X) - vrací kosinus úhlu X, TAN(X) - vrací tangens úhlu X, COT(X) - vrací kotangens úhlu X, EXP(X) - vrací e na X-tou, POWER(X,Y) - vrací X na Y-tou, SELECT POWER(2,3); LN(X) – vrací přirozený logaritmus čísla X – stejné jako LOG(X) SELECT LN(2); LOG(B,X) – vrací logaritmus čísla X pří základu B – existují i LOG2(X), LOG10(X) SELECT LOG(2,65536);SELECT LOG(10,100);

Číselné funkce SELECT ROUND(1.864,1); → 1.9 MOD(X,Y) – vrací zbytek z podílu X/Y RAND(X,Y) – vrací náhodné číslo (0, 1) Výpis výsledků v náhodném pořadí: SELECT * FROM tabulka ORDER BY RAND(); SIGN(X) - vrací hodnotu určující, zda je číslo kladné (1), záporné (-1), nebo nula (0) SQRT(X) – vypočítá druhou odmocninu čísla X, FORMAT(X, Y) - vrací číslo X formátované jako číslo s Y desetinnými místy. Jako oddělovač je použitá“,“. SELECT CONCAT(FORMAT(poplatek,2),” Kč”) FROM student; PI( ) – vrací hodnotu konstanty „pi“, ROUND(X,Y) - vrací číslo X zaokrouhlené Y desetinných míst SELECT ROUND(1.864,1); → 1.9

Číselné funkce SELECT CEILING(1.864); → 2 SELECT FLOOR(1.864); → 1 CEILING(X) – vrací nejvyšší celé číslo založené na hodnotě čísla X (tzn. zaokrouhlení na celé číslo nahoru) SELECT CEILING(1.864); → 2 FLOOR(X) – vrací celočíselnou část čísla X (tzn. zaokrouhlení na celé číslo dolu) SELECT FLOOR(1.864); → 1 TRUNCATE(X,Y) – vrací číslo X oříznuté na Y desetinných míst. Jestliže Y je 0, pak výsledek nemá desetinnou část. Y může být i záporné. SELECT TRUNCATE(1.864,1); → 1.8 SELECT TRUNCATE(122,-2); → 100

Funkce pro práci s datumem a časem Základní funkce pro práci datumem a časem: NOW( ) – vrací aktuální datum a čas, CURDATE( ) – vrací aktuální datum, CURTIME( ) – vrací aktuální čas, HOUR(sloupec) – vrací z uložené hodnoty pouze údaj o hodině, MINUTE(sloupec) – vrací z uložené hodnoty pouze údaj o minutě, SECOND(sloupec ) – vrací pouze údaj o sekundě, DAYNAME(sloupec) – vrací z uložené hodnoty pouze název dne, DAYOFMONTH(sloupec) – vrací pouze údaj o dnu v měsíci, MONTH(sloupec) – vrací z uložené hodnoty pouze údaj o měsíci, MONTHNAME(sloupec) – vrací pouze název měsíce, YEAR(sloupec) – vrací z uložené hodnoty pouze údaj o roku,

Funkce pro práci s datumem a časem ADDDATE(sloupec, INTERVAL x typ) – vrací hodnotu sloupce zvýšenou o x jednotek - jako typ se může použít SECOND, MINUTE, HOUR, DAY, MONTH, YEAR (nebo je kombinovat) Např. přidejte k datumu zápisu studenta 36 měsíců: ADDDATE(datum_zapisu, INTERVAL 36 MONTH); - nebo DATE_ADD() SUBDATE(sloupec, INTERVAL x typ) – vrací hodnotu sloupce sníženou o x jednotek (DATE_SUB()) DATEDIFF(datum1,datum2) – vrací počet dnů mezi dvěma datumy. Počítá se pouze s datumem. SELECT DATEDIFF('2004-12-31 23:59:59','2004-12-30'); SELECT DATEDIFF(NOW(),'2005-01-01');

Funkce pro práci s datumem a časem DATE_FORMAT(sloupec, ‘formátovací_řetězec‘) – vrací naformátovaný datum a čas. TIME_FORMAT(sloupec, ‘formátovací řetězec‘) – vrací naformátovaný čas Formátovací_řetězec může obsahovat libovolnou kombinaci formátovacích kódů a znaků procenta!

Funkce pro práci s datumem a časem den v měsíci %M název měsíce anglický %H dvoumíst. hodina- 24 h %d dvoumístný den %b zkrácený název měsíce %i minuty %D den s příponou %Y rok %S sekundy %W název dne v týdnu %y dvoumístní rok %r čas %a zkrácený název dne %I hodina %T čas ve 24h formátu %c číslo měsíce %h dvoumístná hodina %p AM nebo PM %m dvojmost. číslo měsíce %k hodina ve 24 h SELECT DATE_FORMAT(datum_zapisu,"%a %e %M %Y") AS datum, prijmeni, jmeno FROM student ORDER BYdatum_zapisu.

Funkce pro práci s datumem a časem GET_FORMAT(datový_typ, ‘formátovací konstanta‘) – vrací ‘formátovací řetězec‘. - datový_typ může být pouze: : DATE, TIME, DATETIME a TIMESTAMP - ‘formátovací konstanta‘: 'EUR', 'USA', 'JIS', 'ISO', and 'INTERNAL'. Např. SELECT DATE_FORMAT('2003-10-03' , GET_FORMAT(DATE,'EUR')); EXTRACT(sloupec, INTERVAL x typ) – vrací hodnotu vyextrahovanou z datumu. SELECT EXTRACT(YEAR FROM '2005-07-02'); → 2005 SELECT EXTRACT(YEAR_MONTH FROM NOW());

Konverzní funkce Obecně se jedná o převodní funkce z jednoho typu na jiný typ. MySQL automaticky mění čísla na řetězce (a naopak). SELECT 1+'1'; → 2 Chceme-li změnit císlo na řetězec explicitně, můžeme použít funkce CAST() anebo CONCAT(): SELECT 38.8, CAST(38.8 AS CHAR); → 38.8, '38.8'SELECT 38.8, CONCAT(38.8); → 38.8, '38.8' CONV(N,z_báze,do_báze) – mění čísla s různou bázi (základem). SELECT CONV('a',16,2); → '1010' Pro změnu řetězce na datum se používá funkce: STR_TO_DATE(řetězec, formát) – vrací datum ve specifikovaném formátu SELECT STR_TO_DATE('2003-10-31', '%d.%m.%Y');

Zadání cv.7: Z databáze SDUDIJNI_AGENDA: 1. Vypište ročník a průměrný věk studentů pro všechny ročníky. 2. Vypište ročník a průměrný věk studentů pro každý ročník kromě prvního. 3. Vypište seznam všech studentů, kteří se přihlásili maximálně na 2 předměty. 4. Změňte v tabulce Student pole vek na rod_cislo (a nebo staré pole odstraňte a vytvořte nové). 5. Přidejte do tabulky Student pole datum_zapisu. 6. Vypište seznam všech studentek - na základě pole rod_cislo. 7. Na základě pole rod_cislo vypočítejte a vypište jména, příjmení a věk všech studentů. 8. Vypište datum od kterého by měl student platit za nadstandardní studium, přesáhne-li doba jeho studia 48 měsíců – ve formátu dd.mm.rrrr. 9. Vypište rok předpokládaného ukončení magisterského studia. 10.Vypište seznam všech předmětů, které se učí v místnosti „A107“ nebo je na ně zapsán alespoň 1 student.