KIV/ZIS Cvičení 6 SQL - SELECT.

Slides:



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

SQL Další dotazy a pohledy
Databáze Dotazy.
Cvičení 06 Ing. Pavel Bednář
Základy jazyka SQL Jan Tichava
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
DB1 – 9. cvičení Optimalizace dotazu Konkurenční přístup a deadlock Indexace Transakce.
Databázové systémy SQL Výběr dat.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Cvičení 03 SQL Select Ing. Pavel Bednář
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
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
Architektury a techniky DS Cvičení č. 4 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 6 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
SQL Přednáška DB1. Literatura CONNOLLY, T.M.-BEGG,C.E.-STRACHAN,A.D.: Database Systems – A Practial Approach to Design, Implementation and Management.
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.
Relační algebra jako základ SQL Helena Palovská. Různé modely pro databázovou strukturu.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Databázové systémy II Přednáška č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
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.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
MS ACCESS DOTAZY.
Databázové systémy Přednáška č. 6.
Název sloupce Datový typ Počet znaků Znaková sada Možnost prázdného pole Typ klíče Automatický přírůstek.
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ý.
Fakulta elektrotechniky a informatiky
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,
Databázové systémy 2 Zkouška – 12:00. Příklad I - Funkce Vytvořte funkci ZK_TRP_TREND(P_ID_TRPASLIKA IN NUMBER, P_DATUM_OD IN VARCHAR2, P_DATUM_DO.
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
Databázové systémy UIN010 N-ticový (řádkový) relační kalkul Hodnoty proměnných n-tice relací (řádky) Konstanty hodnoty atributů Unární funkční.
Informatika II PAA DOTAZOVACÍ JAZYKY
2OP483 Manažerská informatika 3Access - BankaSnímek 1 2OP483 Manažerská informatika 3 Microsoft Office Access 2007 Dotazy v databázi Banka
Aplikační a programové vybavení
Databáze velké množství dat pevně dané struktury
Databázové systémy SQL Výběr dat.
Průměr Maximum Minimum
 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.
Databázové systémy 1 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
SQL Structured Query Language
J. Macur, FAST VUT, 2011 (kombinované studium BU04)
Databázové systémy I Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Příkazy jazyka SQL ve VFP a na SQL Serveru
Databázové systémy I Přednáška 7 Databázové systémy 1 – KIT/IDAS1
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Databázové systémy I Přednáška 5 Databázové systémy 1 – KIT/IDAS1
Databázové systémy I Přednáška 8 Databázové systémy 1 – KIT/IDAS1
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Databázové systémy a SQL
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Počítačová cvičení z předmětu Datové sklady
Dotazovací jazyk SQL - II
Přednáška 7 SQL – JOIN.
MS Access Tabulka letní semestr 2013.
Přednáška 6 SQL – spojení tabulek.
Transkript prezentace:

KIV/ZIS Cvičení 6 SQL - SELECT

Dotaz SELECT - struktura SELECT [ DISTINCT | ALL ] { * | [ sloupec [AS alias_sloupce] ] [ , …] } FROM tabulka [alias_tabulky] [ , … ] [ WHERE podmínka ] [AND | OR další_podmínka] [GROUP BY seznam_sloupců ] [ HAVING podmínky ] [ORDER BY seznam_sloupců [ASC | DESC] ] ;

Dotaz nad jednou tabulkou Vypište všechny pracovníky 4. oddělení (obchodní oddělení). (14 osob) SELECT * FROM Zamestnanci WHERE Oddeleni=4 ; SELECT Zamestnanci.Jmeno, Zamestnanci.Prijmeni, Zamestnanci.Oddeleni FROM Zamestnanci WHERE (((Zamestnanci.Oddeleni)=4));

Dotaz nad jednou tabulkou Vypište dle příjmení abecedně řazený telefonní seznam pracovníků 5. oddělení (ekonomické oddělení). (10 osob) SELECT EvCislo AS ec, Jmeno, Prijmeni, Telefon FROM Zamestnanci WHERE Oddeleni = 5 ORDER BY Prijmeni;

Dotaz nad jednou tabulkou Kteří zaměstnanci nastoupili do firmy v období 1. čtvrtiny roku 2009? (15 osob) SELECT EvCislo, Jmeno, Prijmeni, Nastup FROM Zamestnanci WHERE ( Nastup > #1/1/2009# AND Nastup < #4/1/2009# ) ORDER BY Nastup DESC ; MM/DD/RRRR

Dotaz nad jednou tabulkou Kdo ze zaměstnanců nemá přidělenou telefonní linku? (seřaďte dle oddělení). (58 osob) SELECT EvCislo, Jmeno, Prijmeni, Oddeleni FROM Zamestnanci WHERE Telefon IS NULL ORDER BY Oddeleni ;

Dotaz nad jednou tabulkou Zjistěte inventární čísla tiskáren a konvic. (pozn.: tiskárny mají své označení) (10 zařízení) SELECT InvCislo, Nazev FROM Zarizeni WHERE ( Nazev LIKE "Tiskárna*" OR Nazev = "Konvice„ ) ; * – libovolný počet libovolných znaků ? – jeden libovolný znak

Dotaz nad jednou tabulkou Zkuste sami Dotaz nad jednou tabulkou Zjistěte, kdy byly pořízeny kopírka a fax. (10.1.2010) Vypište všechna zařízení dražší než 3 500,-Kč. (6 zaříz.) Vypište dle oddělení řazený seznam pracovníků oddělení příjmu a výdeje, kteří nemají přiřazen telefon (pozn.: oddělení zapište číslem, tedy 1 a 2). V rámci oddělení řaďte pracovníky dle příjmení. (11 osob)

Dotaz nad jednou tabulkou Řešení 1/3 Dotaz nad jednou tabulkou Zjistěte, kdy byly pořízeny kopírka a fax. (10.1.2010) SELECT InvCislo, Nazev, DatumNakupu FROM Zarizeni WHERE ( Nazev = "Kopírka" OR Nazev = "Fax" ) ;

Dotaz nad jednou tabulkou Řešení 2/3 Dotaz nad jednou tabulkou Vypište všechna zařízení dražší než 3 500,-Kč. (6 zaříz.) SELECT InvCislo, Nazev, PorizovaciCena FROM Zarizeni WHERE PorizovaciCena > 3500 ;

Dotaz nad jednou tabulkou Řešení 3/3 Dotaz nad jednou tabulkou Vypište dle oddělení řazený seznam pracovníků 1. a 2. oddělení, kteří nemají přiřazen telefon. V rámci oddělení řaďte pracovníky dle příjmení. (11 osob) SELECT * FROM Zamestnanci WHERE ( ( Oddeleni = 1 OR Oddeleni = 2 ) AND Telefon IS NULL ) ORDER BY Oddeleni, Prijmeni ;

Dotaz s parametrem parametricky zadaná hodnota prostřednictvím proměnné, např. [Limit:], [Název:] Najděte pracovníky ………… oddělení s platem vyšším než ……..……… SELECT * FROM Zamestnanci WHERE ( Oddeleni = [Oddělení:] AND Plat > [Plat:] ) ORDER BY Oddeleni, Prijmeni ;

Dotaz nad více tabulkami Uveďte jmenovitě správce tiskáren. (6 osob – 1 osoba 2x) SELECT Jmeno, Prijmeni, Nazev FROM Zamestnanci, Zarizeni WHERE ( Nazev LIKE "Tiskárna*" AND Spravuje = EvCislo ) ; SELECT Zamestnanci.Jmeno, Zamestnanci.Prijmeni, Zarizeni.Nazev FROM Zamestnanci INNER JOIN Zarizeni ON Zamestnanci.EvCislo = Zarizeni.Spravuje WHERE (((Zarizeni.Nazev) Like "Tiskárna*"));

Dotaz nad více tabulkami Když se sloupce v tabulkách jmenují stejně, je nutné je rozlišit jménem, či aliasem tabulky. SELECT zam.Jmeno, zam.Prijmeni, Zarizeni.Nazev FROM Zamestnanci zam, Zarizeni WHERE ( Zarizeni.Nazev LIKE "Tiskárna*" AND Zarizeni.Spravuje = zam.EvCislo ) ;

Dotaz nad více tabulkami Jaká je pořizovací cena jednotlivých zařízení, která spravuje Magdaléna Hrušková? (5 zařízení) SELECT Jmeno, Prijmeni, Nazev, PorizovaciCena FROM Zamestnanci, Zarizeni WHERE ( Jmeno = "Magdaléna" AND Prijmeni = "Hrušková" AND Spravuje = EvCislo ) ;

Dotaz nad více tabulkami Zkuste sami Dotaz nad více tabulkami Která zařízení spravují zaměstnanci z ekonomického oddělení? (pozn.: oddělení pište jménem – budete tedy muset vytvořit dotaz nad všemi tabulkami) (6 zařízení) (pozn.2: Pro zjednodušení si můžete nechat vypsat i jména příslušných správců) Vypište názvy oddělení, na kterých mají konvici nebo stůl. (4 oddělení)

Dotaz nad více tabulkami Řešení 1/2 Dotaz nad více tabulkami Která zařízení spravují zaměstnanci z ekonomického oddělení? (pozn.: oddělení pište jménem – budete tedy muset vytvořit dotaz nad všemi tabulkami) (6 zařízení) (pozn.2: Pro zjednodušení si můžete nechat vypsat i jména příslušných správců) SELECT Jmeno, Prijmeni, Nazev FROM OddeleniFirmy, Zamestnanci, Zarizeni WHERE ( NazevOddeleni = "Ekonomické" AND CisloOddeleni = Oddeleni AND Spravuje = EvCislo ) ; Oddělení a zaměstnanci. Zaměstnanci a zařízení.

Dotaz nad více tabulkami Řešení 2/2 Dotaz nad více tabulkami Vypište názvy oddělení, na kterých mají konvici nebo stůl. SELECT NazevOddeleni FROM OddeleniFirmy, Zamestnanci, Zarizeni WHERE ( ( Nazev = "konvice" OR Nazev = "stůl" ) AND CisloOddeleni = Oddeleni AND Spravuje = EvCislo ) ; Oddělení a zaměstnanci. Zaměstnanci a zařízení.

Dotaz nad více tabulkami Hodnoty ve sloupcích můžeme upravovat pomocí výrazů Vypište, kolik tisíc mají plat zaměstnanci ekonomického oddělení. (10 osob) SELECT Jmeno, Prijmeni, Plat/1000 AS PlatVTisicich FROM OddeleniFirmy, Zamestnanci WHERE ( NazevOddeleni = "Ekonomické" AND CisloOddeleni = Oddeleni ) ; Pozn.: Místo PlatVTisicich můžeme použít [Plat v tisících] Použití […] v oblasti mezi SELECT a FROM není chápáno jako proměnná. Výraz Určení nového názvu sloupce

Dotaz nad více tabulkami Pokud chceme seskupit stejné řádky, použijeme DISTINCT SELECT DISTINCT NazevOddeleni FROM OddeleniFirmy, Zamestnanci, Zarizeni WHERE ( ( Nazev = "konvice" OR Nazev = "stůl" ) AND CisloOddeleni = Oddeleni AND Spravuje = EvCislo ) ; Oddělení a zaměstnanci. Zaměstnanci a zařízení.

Souhrny a agregační funkce COUNT počet hodnot ve sloupci (počet řádků) SUM součet hodnot ve sloupci AVG průměr hodnot z daného sloupce MIN minimální hodnota ve sloupci MAX maximální hodnota ve sloupci

Souhrny a agregační funkce Jaká je celková pořizovací cena zařízení, která spravuje Magdaléna Hrušková? (12 750) SELECT SUM(PorizovaciCena), Jmeno, Prijmeni FROM Zamestnanci, Zarizeni WHERE ( Jmeno = "Magdaléna" AND Prijmeni = "Hrušková" AND Spravuje = EvCislo ) GROUP BY Jmeno, Prijmeni ; Abychom mohli vypsat i neagregované sloupce, musíme použít seskupení pomocí GROUP BY.

Souhrny a agregační funkce Kolik zaměstnanců má ve správě stůl? (3) SELECT COUNT(EvCislo) AS [Správci stolů] FROM Zamestnanci, Zarizeni WHERE ( Nazev = "Stůl" AND Spravuje = EvCislo ) ; Jaký je průměrný plat ve firmě? (19 385) SELECT AVG(Plat) AS [Průměrný plat firmy] FROM Zamestnanci ;

Souhrny a agregační funkce Zjistěte nejnižší a nejvyšší plat v jednotlivých odděleních. (obch.=20000; 21000) SELECT MIN(Plat) AS [Min], MAX(Plat) AS [Max], NazevOddeleni FROM OddeleniFirmy, Zamestnanci WHERE ( CisloOddeleni = Oddeleni ) GROUP BY NazevOddeleni ;

Souhrny a agregační funkce Zkuste sami Souhrny a agregační funkce Kolik zaměstnanců mají jednotlivá oddělení? (ek.=10) Kolik zařízení mají ve správě: jednotliví (M.H.=5) zaměstnanci zaměstnanci ekonomického oddělení (6) Vypište telefonní linky, včetně počtu lidí, kteří je sdílí, a to: a) firmy (15 tel. čísel) b) ekonomického oddělení. (6 tel. čísel)

Souhrny a agregační funkce Řešení 1/3 Souhrny a agregační funkce Kolik zaměstnanců mají jednotlivá oddělení? (ek.=10) SELECT COUNT(EvCislo), NazevOddeleni FROM OddeleniFirmy, Zamestnanci WHERE ( CisloOddeleni = Oddeleni ) GROUP BY NazevOddeleni ;

Souhrny a agregační funkce Řešení 2/3 Souhrny a agregační funkce Kolik zařízení mají ve správě: a) jednotliví (M.H.=5) zaměstnanci; b) zaměstnanci ekonomického oddělení? (6) a) SELECT COUNT(InvCislo), Prijmeni, Jmeno FROM Zamestnanci, Zarizeni, OddeleniFirmy WHERE ( EvCislo = Spravuje AND CisloOddeleni = Oddeleni AND NazevOddeleni = "Ekonomické") GROUP BY Prijmeni, Jmeno ; b)

Souhrny a agregační funkce Řešení 3/3 Souhrny a agregační funkce Vypište telefonní linky, včetně počtu lidí, kteří je sdílí, a to: a) firmy (15 tel. čísel) b) ekonomického oddělení. (6 tel. čísel) a) SELECT Telefon, COUNT(EvCislo) FROM Zamestnanci, OddeleniFirmy WHERE ( Telefon IS NOT NULL AND CisloOddeleni = Oddeleni AND NazevOddeleni = "Ekonomické") GROUP BY Telefon ; b)

Souhrny a agregační funkce Která telefonní čísla jsou sdílena více jak 4 zaměstnanci? (4) SELECT Telefon, COUNT(Telefon) FROM Zamestnanci GROUP BY Telefon HAVING ( COUNT(Telefon) > 4 ) ; HAVING dovoluje přidružit podmínku spojenou s agregační funkcí.

Souhrny a agregační funkce Kteří zaměstnanci mají ve správě 1 nebo 5 zařízení? (4 osoby) SELECT Jmeno, Prijmeni, COUNT(InvCislo) FROM Zamestnanci, Zarizeni WHERE ( EvCislo = Spravuje ) GROUP BY Jmeno, Prijmeni HAVING ( COUNT(InvCislo) = 1 OR COUNT(InvCislo) = 5 ) ;

Vnořený dotaz s jedním výsledkem Vypište zaměstnance s nadprůměrným platem ve firmě. (30 osob) SELECT Jmeno, Prijmeni, Plat FROM Zamestnanci WHERE ( Plat > ( SELECT AVG(Plat) FROM Zamestnanci ) ); Vnořený dotaz výsledkem je jedno číslo = průměrný plat ve firmě

Vnořený dotaz s více výsledky Vypište zaměstnance, jejichž plat je shodný s nejnižším platem libovolného oddělení firmy. (24 osob) SELECT Jmeno, Prijmeni, Plat FROM Zamestnanci WHERE ( Plat IN ( SELECT MIN(Plat) FROM OddeleniFirmy, Zamestnanci WHERE ( CisloOddeleni = Oddeleni ) GROUP BY NazevOddeleni ) ORDER BY Plat ; Vnořený dotaz výsledkem je více čísel = min. plat v každém oddělení

Dotaz nad dotazem Kolik telefonních čísel je sdíleno více jak 4 zaměstnanci? (4) SELECT COUNT( vysledekDotazu.Telefon) FROM ( SELECT Telefon FROM Zamestnanci GROUP BY Telefon HAVING ( COUNT(Telefon) > 4 ) ) vysledekDotazu ; Alias / náhradní název tabulky. (nemusí být zadán)