Databázové systémy SQL Výběr dat.

Slides:



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

KIV/ZIS Cvičení 6 SQL - SELECT.
MS ACCESS - DOTAZY DATABÁZOVÉ SYSTÉMY.
SQL Další dotazy a pohledy
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
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 Tvorba efektivních příkazů I Přednáška č. 3 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í č. 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.
1 BUMI Úvod do medicínské informatiky Počítačové cvičení č. 3 Ing. Vratislav Čmiel.
Temporální databáze a TSQL
Temporální Databáze Jaroslav Dražan. Čím se budeme zabývat Proč je čas v DB důležitý Práce s časem pomocí klasického SQL Reprezentace časové domény Spojování.
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 II Přednáška č. 8 – Pohledy (Views)
Š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.
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ý.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. X Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Databáze Dotazy VY_32_INOVACE_7B16. Dotazy umožňuje vybrat určité záznamy z tabulky na rozdíl od filtru vybrané záznamy umístí do samostatné dočasné nebo.
Databázové systémy 2 Cvičení č. 10 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 10 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy I Cvičení č. 7 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
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
Aplikační a programové vybavení
Databáze velké množství dat pevně dané struktury
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B15 Autor Ing. Jiří Kalousek Období vytvoření březen.
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.
CUBE - Operátor relační agregace
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
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áze MS ACCESS 2010.
Filtrování záznamů Filtr podle výběru Filtr podle formuláře Rozšířený filtr Symboly, výrazy Dotazy.
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
Databázové systémy a SQL
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Přednáška 7 SQL – JOIN.
Přednáška 9 Triggery.
Transkript prezentace:

Databázové systémy SQL Výběr dat

Příkaz SELECT Jádro databázového jazyka SQL. Kompletní syntaxe vypadá následovně: SELECT [DISTINCT|ALL] seznam vybíraných sloupců FROM seznam tabulek [JOIN v případě výběru z více tabulek deklarujeme způsob jejich provázání (left/right join)] [WHERE restrikce-podmínka výběru] [GROUP BY výrazy pro seskupení] [HAVING doplňující podmínky pro skupinu-agregační funkce] [ORDER BY způsob seřazení výsledků dotazu] [LIMIT omezení počtu záznamů]

Pomocné příkazy vykonává příkaz SELECT v uvedeném pořadí: 1. FROM (výběr zdrojové tabulky) 2. WHERE (filtrovací podmínka – výběr řádků) 3. GROUP BY (seskupení) 4. HAVING (specifikace výběru skupin) 5. ORDER BY (setřídění)

Vypsání všech sloupců tabulky: FROM Příkaz provede vypsání všech sloupců tabulky. SELECT * FROM zamestnanec; Prijmeni Jmeno Titul Rodnec Divize Nastup Plat Janda Jaroslav 7707231111 2 01-07-06 9000.00 Kříž Jiří Ing. 7302202222 2 01-01-05 8000.00 Adamec Miloš 7508011111 3 01-05-06 6500.00 Hanuš Jan RNDr. 7012202222 1 01-07-06 9000.00 Zikmund Adam 7401201111 2 01-07-06 7000.00 Stráský Luboš 7109092222 3 01-06-03 7500.00 Symbol * v SQL znamená symbol pro všechny sloupce.

Výběr určitých sloupců - PROJEKCE Příkaz provede vypsání všech vy jmenovaných sloupců. SELECT Prijmeni, Jmeno, Titul, Rodnec FROM zamestnanec; Prijmeni Jmeno Titul Rodnec Janda Jaroslav 7707231111 Kříž Jiří Ing. 7302202222 Adamec Miloš 7508011111 Hanuš Jan RNDr. 7012202222 Zikmund Adam 7401201111 Stráský Luboš 7109092222 Obecně zde můžeme uvést výčet sloupců z více tabulek.

Dynamický sloupec Příkaz nám vydefinuje sloupec, který se spočte z některého z ostatních sloupců. Tento sloupec se pak přidá k vypisované tabulce. SELECT Prijmeni, Jmeno, Titul, Plat, (Plat/30) FROM zamestnanec; Prijmeni Jmeno Titul Plat (Plat/30) Janda Jaroslav 4000.00 133.33 Kříž Jiří Ing. 8000.00 266.67 Adamec Miloš 6500.00 216.67 Hanuš Jan RNDr. 9000.00 300.00 Zikmund Adam 7000.00 233.33 Stráský Luboš 7500.00 250.00 V tomto příkladě se přidá plat v „Euro", nebo-li plat dělený 30. Nový sloupec tabulky je pojmenován automaticky dle konvencí použité databáze. K definici vypočteného sloupce lze použít i volání některého složitějšího programu, který daný sloupec vypočte.

Pojmenování nového sloupce: AS Pokud máme potřebu si nově založený sloupec pojmenovat, uděláme to pomocí výše uvedeného postupu . SELECT Prijmeni,Jmeno,Titul,Plat,(Plat/30) AS Euro FROM zamestnanec; Prijmeni Jmeno Titul Plat Euro Janda Jaroslav 4000.00 133.33 Kříž Jiří Ing. 8000.00 266.67 Adamec Miloš 6500.00 216.67 Hanuš Jan RNDr. 9000.00 300.00 Zikmund Adam 7000.00 233.33 Stráský Luboš 7500.00 250.00

Výběr s eliminací redundantních řádků SELECT DISTINCT mesto FROM klient ; Pomocí klauzule DISTINCT z výsledné množiny odstraníme duplicitní řádky – vypíšeme, ze krých měst jsou klienti. Klauzule ALL slouží k výběru všech řádků včetně redundancí. Tento výběr je předpokládán implicitně, proto se ALL nemusí používat.

Výběr údajů s podmínkou WHERE-RESTRIKCE V podmínce WHERE je možné použít následující operátory: Operátor Popis = Rovná se < Je menší než > Je větší než <= Je menší než nebo roven >= Je větší než nebo roven != Nerovná se IS NOT NULL Není prázdná (obsahuje hodnotu) IS NULL Je prázdná (neobsahuje hodnotu) BETWEEN V rozmezí NOT BETWEEN Mimo rozmezí OR (rovněž ) Alespoň jedna podmínka je splněná AND (rovněž &&) Všechny (obě) podmínky jsou splněny NOT (rovněž !) Podmínka není splněna

Příklady: SELECT Jmeno, Prijmeni FROM zamestnanec WHERE Jmeno=’Josef’; Jména a příjmení všech zaměstnanců, jejichž křestní jméno je Josef: SELECT Jmeno, Prijmeni FROM zamestnanec WHERE Jmeno=’Josef’; Jména a příjmení všech zaměstnanců, kteří jsou ze Zlínského kraje: WHERE (psc >= 70000)AND(psc < 80000); Jména a příjmení a email všech zaměstnanců, kteří mají svůj email: SELECT Jmeno, Prijmeni, Email FROM zamestnanec WHERE email IS NOT NULL;

Zobrazení hodnot v určitém rozpětí: BETWEEN BETWEEN slouží k zobrazení hodnot sloupce, které se nacházejí v určitém rozpětí. SELECT * FROM zamestnanec WHERE Plat BETWEEN 1000 AND 7000 ; Prijmeni Jmeno Titul Rodnec Divize Nastup Plat Janda Jaroslav 7707231111 2 01-07-06 4000.00 Adamec Miloš 7508011111 3 01-05-06 6500.00 Zikmund Adam 7401201111 2 01-07-06 7000.00 To samé bychom mohli samozřejmě zapsat bez BETWEEN: SELECT * FROM zamestnanec WHERE Plat>=1000 AND Plat<=7000

Využití operátorů LIKE A NOT LIKE Využívají se pro porovnání řetězců v širším měřítku. SELECT Prijmeni, Jmeno FROM zamestnanec WHERE Prijmeni LIKE ”N%”; Vypíše příjmení a jména všech zaměstnanců, jejichž příjmení začíná na písmeno 'N‚. Speciální znaky používané při vyhledávání podřetězců : %(procenta) libovolný počet libovolných znaků (včetně 0) _(podtržítko) jeden libovolný znak

Tříděný výpis: ORDER BY SELECT Jmeno, Prijmeni, Ulice, Cislo, Mesto FROM zamestnanec WHERE Mesto = ’Zlín’ ORDER BY Ulice, Cislo; Pro sestupné třídění se použije klauzule DESC – descending. Pro základní vzestupné třídění je klíčovým slovem ASC, jeho uvedení je však nepovinné a zpravidla se tedy ani neuvádí. SELECT * FROM tabulka ORDER BY Jmeno DESC

Omezení počtu záznamů ve výsledné sadě Klauzule LIMIT stanovuje počet záznamů, které budou do výsledné sady zahrnuty: vypíše prvních 5 záznamů - vypíše 10 záznamů v rozmezí 6-15. Indexování záznamů probíhá od 0, tj. LIMIT 0,5 vypíše 1. až 5. záznam. SELECT * FROM zamestnanec LIMIT 5; SELECT * FROM zamestnanec LIMIT 5,10; Chceme-li vybrat třetího nastoupeného zaměstnance: SELECT * FROM zamestnanec ORDER BY datum_nastupu ASC LIMIT 2,1;

Výběr podle datumu: Zobrazí všechny pracovníky z tabulky, kteří nastoupili před ,,01.06.1996". SELECT * FROM Tabulka WHERE Nastup <“01-06-1996“; Prijmeni Jmeno Titul Rodnec Divize Nastup Plat Kříž Jiří Ing. 7302202222 2 01-01-05 8000.00 Adamec Miloš 7508011111 3 01-05-06 6500.00 Stráský Luboš 7109092222 3 01-06-03 7500.00

Výpis řádek s prázdným sloupcem Pro nalezení hodnot NULL je potřeba vyzkoušet test IS NULL. Následující příklad ukazuje rozdíl mezi vyhledáním NULL „nulového“ Titulu a prázdného Titulu: SELECT * FROM zamestnanec WHERE Titul IS NULL; SELECT * FROM zamestnanec WHERE Titul= ' ';

Spojování tabulek - JOIN Je to dotaz na více tabulek se vzájemnými křížovými odkazy: CROSS JOIN znamená spojení každého záznamu s každým. INNER JOIN vrátí z obou spojovaných tabulek veškeré záznamy, ve kterých klíčový sloupec obsahuje v obou tabulkách stejnou hodnotu. NATURAL spojí ty dvojice záznamů, které mají v klíčových sloupcích stejného jména stejnou hodnotu. LEFT [OUTER ] JOIN znamená, že každý záznam první tabulky se musí spojit s některým záznamem druhé tabulky. Není-li v druhé tabulce nalezen žádný vyhovující záznam, pak se spojí s NULL. RIGHT [OUTER ] JOIN znamená, že každý záznam druhé tabulky se musí spojit s některým záznamem první tabulky. Není-li v první tabulce nalezen žádný vyhovující záznam, pak se spojí s NULL. FULL [OUTER ] JOIN znamená, že každý záznam z každé tabulky se musí spojit s některým záznamem protější tabulky. Není-li v protější tabulce vyhovující záznam spojí se s NULL.

S operacemi OUTER JOIN se musí zacházet velmi opatrně, protože pořadí v jakém se tabulky spojují má zásadní vliv na to, které řádky se zachovají a které nikoli. Nejčastěji používané typy spojení: - vnitřní spojení – inner join vnější spojení – outer join (nebo levé spojení – left join). Poznámka: Tam, kde se pracuje s více tabulkami, které můžou obsahovat stejnojmenné sloupce, musíme sloupce jednoznačně identifikovat. K tomu se používá „tečková“ konvence – název_tabulky.název sloupce.

Příklady: Vnitřní spojení – inner join Chceme-li vypsat informace o výkonu funkce, ale místo čísla zaměstnance, které je v tabulce VYKON_FUNKCE, chceme vidět jeho jméno a příjmení: SELECT vykon_funkce.cislo_fun, zamestnanec.prijmeni, zamestnanec.jmeno FROM zamestnanec INNER JOIN vykon_funkce ON zamestnanec.id_zam=vykon_funkce.cislo_zam; Používání aliasů: – alias je symbolické přejmenování tabulky nebo sloupce pomocí klíčového slova AS (nepovinné) – jsou to řetězce složené z písmen, číslic a podtržítek, ve kterých je potřeba rozlišovat velká a malá písmena: SELECT v.cislo_fun, z.prijmeni, z.jmeno FROM zamestnanec AS z INNER JOIN vykon_funkce AS v ON z.id_zam=v.cislo_zam;

Příklady: Vnější spojení – outer join Levé vnější spojení - vypíše všechny zaměstnance, tedy i ty, kteří nevykonávají žádnou přidělenou funkci. SELECT v.cislo_fun, z.prijmeni, z.jmeno FROM zamestnanec z LEFT JOIN vykon_funkce v ON z.id_zam = v.cislo_zam; Pravé vnější spojení - vrací všechny záznamy z tabulky VYKON_FUNKCE a tedy i ty, pro které by nebyl nalezen odpovídající zaměstnanec. Správně fungující systém by ale měl tomuto stavu zabránit – zachování referenční integrity. SELECT v.cislo_fun, z.prijmeni, z.jmeno FROM zamestnanec z RIGHT JOIN vykon_funkce v ON z.id_zam = v.cislo_zam; Poznámka: Kdyby obsahovali obě tabulky vnějšího spojení stejný název pole (např. id_zam), bylo by možné dotaz zjednodušit: SELECT * FROM zamestnanec LEFT JOIN vykon_funkce USING (id_zam);

Propojení 3 tabulek Propojení 3 tabulek použítím podmínky WHERE: SELECT v.cislo_fun, f.nazev, z.prijmeni, z.jmeno FROM zamestnanec z, vykon_funkce v, funkce f WHERE z.id_zam=v.cis_zam AND v.cis_fun=f.id_fun; Propojení 3 tabulek použítím JOIN-u: SELECT v.cislo_fun, f.nazev, z.prijmeni, z.jmeno FROM zamestnanec z INNER JOIN vykon_funkce v ON z.id_zam = v.cis_zam INNER JOIN funkce f ON v.cis_fun = f.id_fun;

Samosloučení Výpis seznamu příjmení, stylem "každý z každým": SELECT T1.Prijmeni, T2.Prijmeni FROM Tabulka AS T1, Tabulka AS T2 WHERE T1.Prijmeni != T2.Prijmeni SQL umožňuje otevřít pomocí příkazu SELECT dvakrát tu samou tabulku, je pouze nutné druhé tabulce přiřadit jiný lokální alias.