6. blok část C Množinové operátory

Podobné dokumenty
4. blok část A Logické operátory

6. blok část B Vnořené dotazy

5. blok Souhrnné a skupinové dotazy

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy I

12. blok Pokročilé konstrukce SQL dotazů - část II

KIV/ZIS cvičení 5. Tomáš Potužák

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Databázové systémy Cvičení 5

Databázové systémy Cvičení 5.3

Informační systémy ve zdravotnictví. 8. cvičení

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Úvod do databázových systémů

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Úvod do databázových systémů

Databáze I. Přednáška 6

Úvod do databázových systémů

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Operátory ROLLUP a CUBE

Databáze SQL SELECT. David Hoksza

KIV/ZIS cvičení 6. Tomáš Potužák

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Úvod do databázových systémů

Informační systémy ve zdravotnictví. 10. cvičení

5 Přehled operátorů, příkazy, přetypování

Střední odborná škola a Střední odborné učiliště, Hořovice

2. blok Zabezpečení a ochrana dat

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Sada 1 - PHP. 15. Výběr dat z databáze. Příkaz SELECT

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Dotazovací jazyky I. Datová krychle. Soběslav Benda

6 Příkazy řízení toku

4. lekce Přístup k databázi z vyššího programovacího jazyka

Databázové systémy. Cvičení 6: SQL

Základní přehled SQL příkazů

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Analýza a modelování dat. Přednáška 9

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

KIV/ZIS - SELECT, opakování

Informační systémy ve zdravotnictví. 6. cvičení

MATA Př 3. Číselné soustavy. Desítková soustava (dekadická) základ 10, číslice 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

MS Excel Filtr automatický, rozšířený

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Slučování tabulek. Sloučení dvou tabulek

Tabulkový procesor. Základní rysy

MS Access Dotazy SQL

Jazyk C++ II. STL knihovna kontejnery část 2

Microsoft Office. Excel vyhledávací funkce

Databázové systémy a SQL

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Úvod do databázových systémů 3. cvičení

Ukládání a vyhledávání XML dat

Dotazy tvorba nových polí (vypočítané pole)

MS Excel 2007 Kontingenční tabulky

IMPORT DAT DO DATABÁZE

Dotazování v relačním modelu a SQL

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Excel tabulkový procesor

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

2. blok část A Jazyk SQL, datové typy

Algoritmizace a programování

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Multi-dimensional expressions

Marek Laurenčík. Excel. práce s databázemi a kontingenčními tabulkami

Řešené příklady STUDENT(RČ, JMÉNO, SPECIALIZACE) PŘEDMĚT(KÓD, NÁZEV, SYLLABUS, GARANT) ZÁPIS(RČ, KÓD, SEMESTR, ZNÁMKA)

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 4

Analýza a modelování dat. Přednáška 8

13 Barvy a úpravy rastrového

13. blok Práce s XML dokumenty v databázi Oracle

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Použití dynamických parametrů prostředí SET_ENV_ v MarushkaDesignu

8 Třídy, objekty, metody, předávání argumentů metod

MAXScript výukový kurz

Databáze v MS ACCESS

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Zpracování chybějících dat a dat mimo rozsah

Microsoft Access. Úterý 26. února. Úterý 5. března. Typy objektů databáze: Vytvoření a návrh nové tabulky

VZOROVÝ TEST PRO 1. ROČNÍK (1. A, 3. C)

Materializované pohledy

Marketingová komunikace. 3. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK3PH (vm3bph)

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Virtual Private Database (VPD) Jaroslav Kotrč

Použijeme-li prostorový typ grafu, můžeme pro každou datovou zvolit jiný tvar. Označíme datovou řadu, zvolíme Formát datové řady - Obrazec

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

MS Access Dotazy SQL

Databázové systémy Cvičení 5.2

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

Databáze 2011/2012 SQL SELECT II. RNDr.David Hoksza, Ph.D.

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Excel - pokračování. Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu

Funkce. Definiční obor a obor hodnot

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Transkript:

6. blok část C Množinové operátory Studijní cíl Tento blok je věnován problematice množinových operátorů a práce s množinovými operátory v jazyce SQL. Čtenáři se seznámí s operátory, UNION, a INTERSECT. Doba nutná k nastudování 1-2 hodiny Průvodce studiem Při studiu tohoto bloku se předpokládá, že čtenář je obeznámen se základní syntaxí příkazu SELECT, spojováním tabulek, použitím vyhledávacích podmínek a základních funkcí. 1. Množinové operátory Existují situace, kdy potřebujeme spojit dohromady výsledky z více jak jednoho dotazu. Pro tuto situaci poskytuje jazyk SQL množinové operátory. Každý výsledek dotazu můžeme chápat jako množinu a na tuto množinu můžeme aplikovat operátory, díky kterým dosáhneme požadovaných výsledků. Množinové operátory nám pomohou řešit následující problémy: Získat řádky z výsledků dvou a více dotazů. Získat takové řádky z dotazu, které se nevyskytují ve výsledku jiného dotazu. Získat řádky, které se vyskytují ve výsledcích všech dotazů. Získat řádky z výsledku dotazu, které se nevyskytují ve výsledku dotazu jiného. K řešení těchto problémů disponuje jazyk SQL těmito množinovými operátory: UNION INTERSECT 1

Aby bylo možné množinové operátory použít, musíme dodržet následující pravidla definovaná standardem SQL: Množiny výsledků z obou dotazů musí obsahovat stejný počet sloupců. Datové typy každého sloupce ve druhé množině výsledků musí odpovídat datovým typům sloupců, se kterými korespondují z první množiny výsledků. (Datové typy nemusí být zcela totožné, pokud je možné je automaticky převést využitím implicitní konverze na požadovaný datový typ.). Množinové operátory je možno libovolně kombinovat a užívat násobně. 2. Operátor První množinový operátor, který si ukážeme, je. Tento operátor slouží ke spojení dvou množin výsledků takovým způsobem, že výsledná množina obsahuje všechny řádky z první množiny a všechny řádky z druhé množiny. Operátor tedy poskytne kompletně všechny řádky včetně duplicitních. Praktické použití jednotlivých množinových operátorů si budeme předvádět nad tabulkou PRODUKTY, která má následující podobu: Vypište všechny produkty kromě produktu s označením A600N nebo A2500H. Vypište všechny produkty, jejichž cena je větší než 30 000. WHERE cena > 30000; 2

Máme vyřešené dvě úlohy, kde každá vrací jinou sadu výsledků. Nyní si s použitím množinového operátoru, spojíme množiny výsledků jednotlivých úloh do jedné množiny. Vypište všechny produkty kromě produktu s označením A600N nebo A2500H a produkty, jejichž cena je větší než 30 000. WHERE cena > 30000; Z výsledku dotazů je patrný princip fungování množinového operátoru. Nejdříve se vyhodnotí dotazy spojené pomocí operátoru. Následně dojde ke spojení obou množin výsledků bez jakýchkoliv úprav. Ve výsledné množině se tedy mohou objevit duplicitní řádky. 3. Operátor UNION Operátor UNION také slouží ke spojení dvou množin výsledků, odpovídá množinové operaci sjednocení. Na rozdíl od operátoru ale vrací pouze neduplicitní řádky. Výsledná množina tedy bude obsahovat všechny řádky z první množiny a všechny řádky z druhé množiny. Žádný řádek nebude ve výsledné množině obsažen dvakrát. Fungování operátoru UNION si ukážeme na stejném příkladu, jako u operátoru. 3

Vypište všechny produkty kromě produktu s označením A600N nebo A2500H a produkty, jejichž cena je větší než 30 000. UNION WHERE cena > 30000 Jak můžeme vidět, ve výsledku se objevují stejné řádky, jako u výsledku z předchozího příkladu pouze s tím rozdílem, že jsou odstraněny duplicity. Princip vyhodnocení je tedy takový, že se spojí množiny výsledků dílčích dotazů a na výslednou sadu je aplikován operátor DISTINCT. Dotaz se vyhodnotí stejně jako následující kód: SELECT DISTINCT oznaceni, cena FROM ( WHERE cena > 30000) 4. Operátor Dalším množinovým operátorem, kterým jazyk SQL disponuje, je. Představuje množinovou operaci rozdíl. Výsledkem jsou tedy všechny řádky první množiny výsledků, které nejsou součástí druhé množiny výsledků. Od první množiny výsledků tedy odečteme druhou množinu výsledků. Operátor si budeme demonstrovat opět nad tabulkou PRODUKTY a dílčími úlohami popsanými výše. Prezentované příklady by bylo možné vyřešit i jiným způsobem, ale zde si ukážeme použití operátoru. 4

Vypište všechny produkty kromě produktu s označením A600N nebo A2500H kromě produktů, které mají cenu vyšší než 30 000. WHERE cena > 30000; Použitím operátoru byly z první množiny výsledků (MV1) odstraněny ty řádky, které byly obsaženy ve druhé množině výsledků (MV2). 5. Operátor INTERSECT Posledním operátorem, který může být využit pro práci s množinami, je INTERSECT. Při použití operátoru jsou do výsledné množiny zahrnuty ty řádky první množiny, které jsou zároveň obsaženy i ve druhé množině. Jedná se tedy o průnik množin. Příklad si ukážeme opět nad již známou tabulkou PRODUKTY. Možností, jak příklad vyřešit, se naskytuje několik, my však zvolíme použití množinového operátoru. 5

Vypište všechny produkty kromě produktu s označením A600N nebo A2500H, které mají cenu vyšší než 30 000. INTERSECT WHERE cena > 30000; Výsledná množina obsahuje v našem případě pouze jeden řádek, který je obsažen v obou dílčích množinách (MV1, MV2). 6. Užití množinových operátorů Vlastností množinových operátorů můžeme také využít k praktickým účelům. Jednou z možností využití je porovnání tabulek (případně výsledků dvou dotazů). Porovnání se provádí pomocí kombinace dvou operátorů a operátorem. Celá konstrukce dotazu potom vypadá následovně: (SELECT * FROM tabulka1 SELECT * FROM tabulka2) (SELECT * FROM tabulka2 SELECT * FROM tabulka1); Pokud po provedení dotazu není vrácen žádný řádek, můžeme tvrdit, že porovnávané tabulky mají identické řádky. Prakticky si porovnávání vyzkoušíme na dotazech, které byly užity výše. Vyzkoušíme, zda užití operátoru UNION a operátoru spolu s klauzulí DISTINCT vrací stejnou sadu výsledků. 6

Mějme tedy dvě tabulky. Tabulka DOTAZ_UNION obsahuje výsledky z dotazu: Vypište všechny produkty kromě produktu s označením A600N nebo A2500H a produkty, jejichž cena je větší než 30 000. UNION WHERE cena > 30000; A tabulku DOTAZ_UNION_ALL, která obsahuje výsledky z dotazu: Vypište všechny produkty kromě produktu s označením A600N nebo A2500H a produkty, jejichž cena je větší než 30 000. Pro vyřešení využijte operátor s klauzulí DISTINCT. SELECT DISTINCT oznaceni, cena FROM ( WHERE cena > 30000); 7

Porovnání zmíněných dvou tabulek provedeme podle schématu zmíněného dříve v této kapitole. (SELECT oznaceni, cena FROM dotaz_union SELECT oznaceni, cena FROM dotaz_union_all) (SELECT oznaceni, cena FROM dotaz_union_all SELECT oznaceni, cena FROM dotaz_union); Výsledkem tohoto dotazu je prázdná množina. Porovnávané tabulky jsou tedy totožné. 7. Užití hodnoty NULL při množinových operacích V úvodu této kapitoly jsme si řekli, že proto, aby bylo možné množinové operátory na výsledky dotazů použít, musí obsahovat stejný počet sloupců. Jak ale postupovat, když potřebujeme spojit výsledky z dotazů, které stejný počet sloupců nemají? Odpověď je jednoduchá, využijeme hodnoty NULL. Ukažme si použití na příkladu. Vypište všechny produkty a do posledního řádku do sloupce cena udejte součet cen všech produktů. Příklad si rozdělíme na dva dílčí dotazy. První dotaz vrátí všechny produkty z tabulky PRODUKTY. SELECT produkt_id, oznaceni, cena FROM produkty; Druhý dotaz sečte ceny v celé tabulce PRODUKTY. SELECT SUM(cena) FROM produkty; 8

Oba dotazy spojíme dohromady pomocí operátoru UNION. Jelikož druhý dotaz obsahuje pouze jeden sloupec a podmínky pro použití množinových operátorů nepřipouští možnost různého počtu sloupců, musíme si druhý dotaz upravit. Na místa, kde mají být chybějící dva sloupce, použijeme hodnotu NULL. SELECT NULL, NULL, SUM(cena) FROM produkty; Nyní máme u obou výsledků stejný počet sloupců a nic nám nebrání použít množinový operátor. SELECT produkt_id, oznaceni, cena FROM produkty UNION SELECT NULL, NULL, SUM(cena) FROM produkty 8. Pravidla a omezení množinových operátorů 1. Názvy sloupců z výsledné množiny jsou dány podle názvů sloupců první množiny výsledků. 2. Pokud jsou nad názvy sloupců aliasy, jsou použity do výsledné množiny pouze aliasy z první množiny výsledků. 3. Klauzule ORDER BY nerozpozná názvy všech sloupců. Pro správné řazení se doporučuje využít vnořených dotazů a řadit až výslednou množinu. 4. Klauzuli GROUP BY je možno použít bez omezení. 5. Pořadí vyhodnocování množinových operátorů je vždy od shora dolů. Pokud chceme změnit pořadí vyhodnocení, musíme použít závorky. Části v závorce jsou vyhodnocovány přednostně. 9

Pojmy k zapamatování Příkazy a funkce: UNION,,, INTERSECT Problém: operace nad dílčími množinami výsledků, porovnání výsledků dvou dotazů, pořadí vyhodnocování množinových operátorů, užití hodnoty NULL namísto sloupců Shrnutí V této lekci jste se seznámili s prací nad množinami výsledků dotazů pomocí množinových operátorů. Pro užití množinových operátorů musí mít dílčí množiny stejný počet sloupců. Pokud nemáme stejný počet sloupců, užijeme hodnotu NULL, případně jinou hodnotu pro doplnění. Typy odpovídajících sloupců musí být totožné, nebo navzájem automaticky převoditelné. Množinové operátory jsou vyhodnocovány vždy od shora dolů. Množinových operátorů je možno užívat k dalším účelům, např. k porovnávání dvou množin výsledků. Otázky na procvičení 1. Jaký je rozdíl ve výsledku při použití operátoru UNION a? 2. Jaké pravidlo platí pro počty sloupců v dílčích množinách? 3. Jak můžeme vyřešit problém nestejného počtu sloupců? 4. V jakém pořadí jsou vyhodnocovány množinové operátory? 5. Jakým způsobem je možné měnit pořadí vyhodnocování? Odkazy a další studijní prameny http://www.techonthenet.com/oracle (syntaxe příkazů SQL jazyka a funkcí) http://www.sqlcourse.com (interaktivni SQL trénink) http://www.oracle.com/technetwork/database/enterpriseedition/documentation (dokumentace k databázové platformě Oracle) http://www.penguin.cz/noviny/?id=chip/index (seriál Databáze standardu SQL z časopisu CHIP) 10

Odkazy a další studijní prameny ŠIMŮNEK, M. SQL, kompletní kapesní průvodce. Grada Publishing, 1999. ISBN 80-7169-692-7. STEPHENS, K.R., PLEW, R.R. Naučte se SQL za 21 dní. Praha: Computer Press, 2004. ISBN 80-7226-870-8. GROFF, J.R., WEINBERG, P.N. SQL - kompletní průvodce. Praha: Computer Press, 2005. ISBN 80-251-0369-2. 11