Přednáška 7 SQL – JOIN.

Slides:



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

KIV/ZIS Cvičení 6 SQL - SELECT.
SQL Další dotazy a pohledy
Cvičení 05 Joins, isNull, case when Ing. Pavel Bednář
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Databáze.
DATABÁZOVÉ SYSTÉMY Ing. Roman Danel, Ph.D.
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 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.
Temporální databáze a TSQL
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
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í.
Radek Špinka Přepínače MSSQL výběr.
Martin Kirschbaum 4.A,  určitá uspořádaná množina informací (dat) uložená na paměťovém médiu  Databázový program - umožňuje tvořit, editovat,
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.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Cvičení 04 SQL Exists, Any, All Ing. Pavel Bednář
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.
Optimalizace SQL dotazů
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 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.
Fakulta elektrotechniky a informatiky
Databázové systémy Tomáš Skopal
ACCESS – Primární klíče, relace 15. září 2013VY_32_INOVACE_080305_ACCESS_Primarni_klice_relace_DUM Autorem materiálu a všech jeho částí, není-li uvedeno.
Aplikační a programové vybavení
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_01B17 Autor Ing. Jiří Kalousek Období vytvoření Duben 2013.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy SQL Výběr dat.
DBXplorer Systém pro vyhledávání nad relačními databází podle klíčových slov. zpracovala Margarita Vishnyakova.
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
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
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
Vytvoření databázového dotazu z více tabulek
Databázové systémy a SQL
[ START WITH podmínka ] CONNECT BY podmínka
A5M33IZS – Informační a znalostní systémy
Optimalizace SQL dotazů
Dotazovací jazyk SQL - II
Přednáška 9 Triggery.
Přednáška 6 SQL – spojení tabulek.
Přednáška 8 INDEXY, POHLEDY.
Databázové systémy a SQL
Databázové systémy a SQL
Transkript prezentace:

Přednáška 7 SQL – JOIN

Spojení tabulek JOIN Spojení tabulek v SQL dotazu může být realizováno více způsoby. Různé dotazy JOIN mohou navíc dle svých vlastností vracet odlišné výsledky. SQL podporuje kromě čárkových spojení (minulá přednáška) také přímou klauzuli JOIN. Zaměříme se především na (podpora MySQL): Vnitřní spojení INNER JOIN Levé vnější spojení LEFT OUTER JOIN Přirozené spojení NATURAL JOIN

Přehled typů spojení SELECT atributy 1 2 3 4 5 6 7 8 9* 10° FROM tab1, tab2 WHERE tab1.xx = tab2.yy Čárkové spojení 2 FROM tab1 JOIN tab2 ON tab1.xx = tab2.yy Vnitřní spojení (doplní INNER) 3 FROM tab1 CROSS JOIN tab2 ON tab1.xx = tab2.yy Křížové spojení 4 FROM tab1 INNER JOIN tab2 ON tab1.xx = tab2.yy Vnitřní spojení 5 FROM tab1 STRAIGHT_JOIN tab2 Přímé spojení 6 FROM tab1 LEFT JOIN tab2 ON tab1.xx = tab2.yy Levé vnější spojení 7 FROM tab1 LEFT JOIN tab2 USING xy 8 FROM tab1 NATURAL JOIN tab2 Přirozené spojení 9* FROM tab1 RIGHT JOIN tab2 USING xy Pravé vnější spojení 10° FROM tab1 FULL JOIN tab2 Plné vnější spojení * Nepodporují některé DB systémy ° Nepodporuje MySQL

Vnitřní spojení INNER JOIN Vnitřní spojení INNER JOIN je ekvivalentní čárkovému spojení. Slovo INNER je nepovinné. Pokud v dotazu uvedeme pouze JOIN, MySQL jej automaticky považuje za INNER JOIN! INNER JOIN spojí dvě tabulky podle podmínky spojení. Podmínka spojení se uvádí za klíčovým slovem ON. Hlavní charakteristika Vnitřní spojení vrací pouze ty řádky, které mají odpovídající si záznamy v obou tabulkách (shodu na spojovaných sloupcích). SELECT … FROM tab1 INNER JOIN tab2 ON tab1.x = tab2.y

Ukázka auta: automobilky: SELECT automobilky.znacka, auta.nazev FROM auta INNER JOIN automobilky ON auta.znacka_id = automobilky.znacka_id Výsledek: id znacka_id nazev 1 10 Rapid 2 Octavia znacka_id znacka 10 Škoda 20 Audi znacka nazev Škoda Rapid Octavia

Příklad INNER JOIN Chceme získat tabulku vozů, spolu s názvem automobilky: SELECT am_nazev AS Znacka, au_nazev AS Vozidlo FROM auta INNER JOIN automobilky ON auta.am_id = automobilky.am_id Na pořadí tabulek v tomto dotazu nezáleží. Všimněte si, že Mazda nemá v tabulce auta odpovídající záznam, tudíž není v INNER JOIN akceptována.

Příklad INNER JOIN Chceme získat všechny auta, které mají diesel o obsahu 2.0 litru. SELECT au_nazev, typ, obsah FROM auta INNER JOIN auto_motor ON auta.au_id = auto_motor.au_id INNER JOIN motory ON auto_motor.motor_id = motory.motor_id WHERE typ = 'D' AND obsah = 2000

Levé vnější spojení LEFT JOIN Celým názvem LEFT OUTER JOIN. Slovo OUTER je nepovinné. LEFT JOIN spojí dvě tabulky podle podmínky spojení. Podmínka spojení se uvádí za klíčovým slovem ON. Hlavní charakteristika Levé vnější spojení vrací všechny řádky z první tabulky, i když nemají odpovídající záznam v tabulce druhé. Chybějící hodnoty se doplní NULL.

Ukázka 1 auta: automobilky: SELECT znacka, nazev FROM automobilky LEFT JOIN auta ON auta.znacka_id = automobilky.znacka_id Výsledek: id znacka_id nazev 1 10 Rapid 2 Octavia znacka_id znacka 10 Škoda 30 Audi znacka nazev Škoda Rapid Octavia Audi Null

Ukázka 2 auta: automobilky : SELECT znacka, nazev FROM auta LEFT JOIN auta ON auta.znacka_id = automobilky.znacka_id Výsledek: id cizi_klic nazev 1 10 Rapid 2 Octavia 3 20 Golf id znacka 10 Škoda 30 Audi znacka nazev Škoda Rapid Octavia Null Golf

Příklad LEFT JOIN Chceme získat názvy všech automobilek a jejich vozů: SELECT am_nazev, GROUP_CONCAT( au_nazev SEPARATOR ', ' ) AS vozy FROM automobilky LEFT JOIN auta ON automobilky.am_id = auta.am_id GROUP BY automobilky.am_id Poznámka: Pokud bychom použili vnitřní spojení, Mazda by se ve výsledku neobjevila. Protože nemá odpovídající záznam v tabulce auta.

Příklad LEFT JOIN Chceme získat všechny vozy s příslušnými motory. SELECT au_nazev, typ, obsah FROM auta LEFT JOIN auto_motor ON auta.au_id = auto_motor.au_id LEFT JOIN motory ON auto_motor.motor_id = motory.motor_id

NATURAL JOIN Přirozené spojení funguje principiálně stejně jako vnitřní spojení. Používá se tehdy, pokud spojované sloupce mají SHODNÝ název. Odpadá poté nutnost uvádět podmínku spojení za ON. MySQL spojí tabulky v dotazu sám.

NATURAL JOIN Uvažujme první příklad. Spojujeme tabulky automobilky a auta. Spojujeme na sloupcích, které mají shodný název am_id. Dotaz s NATURAL JOIN vypadá následovně: SELECT am_nazev AS Znacka, au_nazev AS Vozidlo FROM auta NATURAL JOIN automobilky Výsledek bude stejný jako s INNER JOIN.

Zapamatujte si Dotazy spojení JOIN Typy JOIN dotazů Vnitřní spojení INNER JOIN Levé vnější spojení LEFT JOIN Přirozené spojení NATURAL JOIN Charakteristiky jednotlivých typů spojení