Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií



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

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

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

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

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

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

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

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

Databáze SQL SELECT. David Hoksza

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

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

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

Databázové systémy I

6. SQL složitější dotazy, QBE

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

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

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

Návrh a tvorba WWW stránek 1/14. PHP a databáze

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

Databázové systémy I

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

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

Materiál ke cvičením - SQL

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

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

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

MS Access Dotazy SQL

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Použití databází na Webu

Databázové systémy úvod

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

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

4IT218 Databáze. 4IT218 Databáze

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

PG 9.5 novinky ve vývoji aplikací

Konceptuální modelování a SQL

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

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

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

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

8.2 Používání a tvorba databází

Jazyk SQL slajdy k přednášce NDBI001

1. Relační databázový model

Relace x vztah (relationship)

Jazyk SQL databáze SQLite. připravil ing. petr polách

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

A5M33IZS Informační a znalostní systémy. Relační databázová technologie

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

Transformace konceptuálního modelu na relační

Datové modelování II

Sada 1 - PHP. 14. Úvod do jazyka SQL

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

- sloupcové integritní omezení

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

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

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Zkouškový příklad 4IT218 Rezervační systém zážitkové agentury. Karel Kohout FIS VŠE

Relační databázová technologie

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Databázové systémy trocha teorie

Jazyk S Q L základy, příkazy pro práci s daty

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

Databázové systémy a SQL

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Databázové a informační systémy Jana Šarmanová

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

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

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

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

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Databázové modelování. Analýza Návrh konceptuálního schématu

MySQL sežere vaše data

DUM 12 téma: Příkazy pro tvorbu databáze

5. POČÍTAČOVÉ CVIČENÍ

Oracle XML DB. Tomáš Nykodým

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

Semestrální práce z DAS2 a WWW

Architektury databázových

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

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

DBS Transformace konceptuálního schématu na

Kapitola 4: SQL. Základní struktura

DB1 cvičení 4 spojení tabulek a složitější dotazy

Databázové systémy úvod

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Michal Krátký, Miroslav Beneš

Jazyk PL/SQL Úvod, blok

Databázové a informační systémy

Dotazovací jazyk SQL I

Jazyk SQL 3 - DML, DDL, TCL, DCL

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

4IT218 Databáze. 4IT218 Databáze

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

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

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

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

Transkript:

Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií Student: Vedoucí bakalářské práce: Recenzent bakalářské práce: Filip Valoušek RNDr. Helena Palovská, Ph.D. Ing. Dušan Chlapek, Ph.D. Příprava demo testovací databáze a ladění SQL příkazů 2009

Prohlášení Prohlašuji, že jsem bakalářskou práci zpracoval samostatně a že jsem uvedl všechny použité prameny a literaturu, ze kterých jsem čerpal. V Praze dne 25. 4. 2009... podpis 2

Poděkování: Chtěl bych poděkovat paní RNDr. Heleně Palovské, PhD. za cenné rady, pomoc a čas, které mi při vedení mé práce věnovala. 3

Abstrakt Tato práce se zabývá návrhem a tvrobou testovací demo databáze, která slouží pro výuku práce s relační databází. Součástí práce je sada zadání výukových dotazů, na kterých je možno procvičit dotazovací jazyk SQL (Structured Query Language). Ke každému dotazu je uvedena přehledná tabulka správného výstupu z testovacích dat, která umožňuje kontrolu správného zadání dotazu při procvičování. V teoretické části se pak práce krátce zmiňuje o způsobech návrhu databází a datového modelování, zejména pak o principu tří architektur. 4

Abstract This bachelor work deals with projecting and implementation of the demo test database, which is used for training work with relational databases. A set of educational queries submissions which enable practising query language SQL (Structured Query Language) is one part of the work. There is a well-arranged table of correct output from data test for all of queries allowing to check correct query setting. In the theoretical part there is a short mention about the principles of databases projecting and data modelling, especially about the Three schema approaches. 5

Obsah Obsah 1 Úvod 7 2 Princip tří architektur 8 3 Návrh databáze 9 3.1 Konceptuální model 10 3.2 Fyzický model 11 4 Data 12 5 Dotazy do databáze 18 6 Závěr 46 Zdroje 47 Terminologický slovník 48 Přílohy 49 Skripty použité pro vytvoření tabulek databáze 49 Skripty použité pro vytvoření kategorií zboží 53 Skripty použité pro vytvoření zboží 54 Skripty použité pro vytvoření zákazníků 56 Skripty použité pro vytvoření objednávek 57 Skripty použité pro vytvoření položek objednávek 60 6

1 Úvod 1 - Úvod Tématem práce je tvorba testovací demo databáze a SQL (Structured Query Language) dotazy nad touto databází. Cílem práce bylo navrhnout a realizovat databázi pro výuku práce s relační databází a dotazovacího jazyka SQL a sady zadání dotazů do této databáze, na kterých lze procvičit základní konstrukty dotazů v jazyce SQL. Databáze byla navrhována tak, aby její struktura umožňovala procvičení nejčastěji používaných typů dotazů a zároveň aby v rámci možností co nejvíce odpovídala realitě. Tím je umožněno na reálném příkladu designu ukázat, jak taková relační databáze může vypadat a fungovat. Aby databáze co nejvíce odpovídala skutečným systémům, byla tvořena již od návrhu pomocí principu tří architektur (P3A). 7

2 Princip tří architektur 2 - Princip tří architektur Princip tří architektur používá pro návrh datové základny tři modely - konceptuální schéma reality, logický model a fyzický model. Tento princip byl poprvé uveden v ANSI/X3/SPARC Standards Planning and Requirements Committee v roce 1977. Tato zpráva uvádí, že Database Management Systems (DBMSs) mají dvě základní schémata. Interní schéma, které reprezentuje strukturu dat tak, jak ji vidí DBMS (fyzický model) a externí schéma, které reprezentuje strukturu dat z pohledu uživatele. Ve zprávě je uvedeno třetí, tzv. konceptuální shcéma, které reprezentuje strukturu dat tak, jak ji vidí podnik jako celek. 1) Konceptuální schéma reality je hrubý model, který slouží k poznání reálných objektů, které mají v navrhovaném systému figurovat. V konceptuálním schématu tedy popisujeme skutečné objekty a vztahy mezi nimi. V případě naší databáze např. zákazníky nebo zboží. Konceptuální schéma by mělo být vychozím bodem pro modelování datové základny i pro provádění změn v ní, protože je nezávislé na konkrétním implementačním prostředí a umožňuje tak model co nejvíce přiblížit reálnému stavu. Logický model se pak již zaměřuje na jednotlivé entitní typy a jejich datové atributy, stále ale zůstává nezávislý na konkrétním implementačním prostředí a databázovém systému. Třetím stupněm je fyzický model, který již zohledňuje konkrétní databázový systém a jeho možnosti. Jedná se o návrh konkrétních tabulek včetně sloupců, cizích klíčů a datových typů jednotlivých sloupců v závislosti na možnostech konkrétního databázového systému. Smyslem principu tří architektur je oddělit konceptuální a implementační úroveň. To přináší tu výhodu, že můžeme datovou základnu navrženou na konceptuální úrovni přenášet mezi různými databázovými systémy a implementačními prostředími. 1) Three schema approach [on-line]. [2009]. Dostupný z WWW: <http://en.wikipedia.org/wiki/three_schema_approach> 8

3 Návrh databáze 3 - Návrh databáze Oproti teoretickým zásadám, popsaným v předchozí kapitole o principu tří architektur, se skutečné metody, použité při návrhu databáze, mírně liší. Pro návrh databáze byl použit program Sybase PowerDesigner, který k tomuto účelu poskytuje dvě schémata - konceptuální model a fyzický model. Konceptuální schéma reality, zmíněné v předchozí kapitole, slouží především pro pochopení skutečných objektů a vztahů mezi nimi a právě z toho důvodu se většinou kreslí ručně na papír. Do počítače se vstupuje až následným krokem, ve kterém se v modelovacím nástroji převede konceptuální schéma do příslušné notace. V programu PowerDesigner k tomu slouží právě konceptuální model, který stojí na pomezí mezi konceptuálním schématem reality a logickým modelem, tak jak byly tyto modely popsány v kapitole o principu tří architektur. Rozdíl mezi logickým modelem podle P3A a konceptuálním modelem PowerDesigneru spočívá v tom, že v konceptuálním modelu, narozdíl od logického, dochází již k některým rozhodnutím o implementačním prostředí, např. volbě datových typů jednotlivých atributů. Je tomu tak proto, že PowerDesigner je nástroj pro návrh datové základny a umožňuje automatické vytvoření fyzického modelu na základě modelu konceptuálního, což by bez příslušných voleb již v konceptuálním modelu bylo značně obtížné. Postup práce byl tedy následující: Návrh a vytvoření konceptuálního modelu v programu PowerDesigner, následné vygenerování fyzického modelu a po potřebných úpravách vygenerování skriptů pro vytvoření navržené databáze. 9

3.1 Konceptuální model 3 - Návrh databáze Konceptuální model je součástí návrhu databáze podle principu tří architektur s odlišnostmi, které byly popsány v úvodu této kapitoly. Slouží k návrhu datové základny, nezávislém na platformě, ve které bude nakonec realizována. Příjemcům - v našem případě studentům, kteří se na cvičné databázi budou učit - pak slouží k lepšímu pochopení datových struktur databáze. Přibližuje jim realitu, o které cvičná databáze vypovídá a umožňuje jim tak snadnější orientaci v databázi. Jako pomyslná aplikace nad cvičnou databází byl zvolen internetový obchod. Použitými entitami pak jsou: zboží a jeho kategorie, do nichž je zboží rozděleno, objednávky a jejich jednotlivé položky a zákazníci internetového obchodu. Abstrahováno bylo naopak od zaměstnanců a dalších entitních typů, které by se jistě ve skutečné aplikaci taktéž vyskytovaly, ale pro potřeby procvičování jazyka SQL by byly nadbytečné, neboť atributy např. u zaměstnanců by byly téměř shodné se zákazníky. Atributy u použitých entitních typů byly naopak konstruovány tak, aby co nejvíce odpovídaly realitě. Proto byly u objednávek ponechány i atributy dodací adresy, ačkoli z hlediska procvičování dotazů nemají velký význam, neboť jsou obdobné s atributy trvalé adresy u entitního typu zákazník. obr. 3-1 - Konceptuální model databáze 10

3.2 Fyzický model 3 - Návrh databáze V rámci fyzického modelu, který vychází z konceptuálního schéma, bylo třeba vyřešit, jakým způsobem budou pojmenovány jednotlivé tabulky a sloupce. Při rozhodování o jejich podobě byl brán ohled především na snadnou manipulaci s daty a tedy co nejjednodušší psaní dotazů. Pro názvy proto byly použity kódy vycházející ze zkrácených slov názvů jednotlivých entitních typů a jejich atributů, např. pro entitní typ zákazník byla tabulka nazvána ZAK a pro atribut datum objednávky byl zvolen název sloupce DAT_OB. Názvy byly zvoleny velkými písmeny a to proto, že databázový systém Oracle, ve kterém je cvičná databáze realizována, převádí automaticky názvy v dotazech na velká písmena a jsou-li názvy tabulek a sloupců malými písmeny, je nutno je do dotazů psát v uvozovkách, což práci značně znesnadňuje. Výstupem z fyzického modelu je kód SQL, sloužící k vytvoření tabulek, který byl vygenerován automaticky pomocí programu PowerDesigner. Tento kód je uveden v příloze. obr. 3-2 - Fyzický model databáze obr. 3-3 - Schéma databáze 11

4 Data 4 - Data Data byla opět volena tak, aby co nejvíc odpovídala reálnému světu (reálnému na začátku roku 2009, neboť některé atributy, jako třeba ceny zboží se permanentně mění). Proto např. u jednotek, ve kterých je zboží prodáváno, nebyly použity základní fyzikální jednotky, ale na první pohled poněkud netypické, nicméně reálné různé druhy lahví namísto litrů u nápojů. Jednotlivá data a vazby mezi nimi byly rovněž voleny tak, aby zde existovaly některé netypické případy, vhodné pro procvičování dotazů SQL, např. zákazníci, kteří si nikdy nic neobjednali, zboží, které nebylo nikdy objednáno apod. Snahou při vytváření záznamů bylo i to, aby byla snadno rozpoznatelná správnost zadaného dotazu. V následujících tabulkách můžete vidět jednotlivá data, která jsou v databázi uložena. Příkazy, kterými byla tato data definována pak můžete nalézt v příloze. KAT NADR NAZEVK POPISK nap (null) nápoje zboží, které lze pít napal nap nápoje alkoholické alkohol pivo napal pivo piva různých druhů vino napal víno nejrůznější druhy vína dest napal destiláty tvrdý alkohol napna nap nápoje nealkoholické nápoje, které neobsahují alkohol minvo napna minerální vody pramenité minerální a stolní vody limo napna limonády nealkoholické nápoje nejrůznějších příchutí pec (null) pečivo chléb, housky, rohlíky, sladké pečivo atd. ovze (null) ovoce, zelenina něco dobrého pro zdraví tabulka 4-1 - kategorie zboží 12

4 - Data KOD KAT NAZEV POPIS JEDN CENA SKLAD DOSTUP AKTIV 1000 pivo Braník světlé pivo ve skle láhev 0,5 l 11 100 0 1 1001 pivo Budějovický Budvar světlý ležák ve skle láhev 0,5 l 20 250 0 1 1002 pivo Gambrinus světlý světlé pivo ve skle láhev 0,5 l 15 200 0 1 1003 pivo Staropramen světlé pivo ve skle láhev 0,5 l 12.5 0 1 1 1004 vino Frankovka suché víno láhev 0,75 l 65 10 0 1 1005 vino Modrý Portugal (null) láhev 0,75 l 86.5 1 0 1 1006 vino Svatovavřinecké suché víno láhev 0,75 l 56 0 3 1 1007 minvo Mattoni broskev minerální voda s příchutí broskve láhev 1,5 l 15 20 0 1 1008 minvo Mattoni minerální voda bez příchuti láhev 1,5 l 13 120 0 1 1009 minvo Poděbradka minerální voda bez příchuti láhev 1,5 l 10 82 0 1 1010 limo 7UP (null) láhev 2 l 33 30 0 1 1011 limo Coca-cola (null) láhev 2 l 36 80 0 1 1012 limo Fanta divoká malina limonáda s příchutí divoké maliny láhev 2 l 33 20 0 1 1013 limo Fanta pomeranč limonáda s příchutí pomeranče láhev 2 l 33 42 0 1 1014 limo Fanta lemonic limonáda s příchutí lemonic láhev 2 l 33 0 0 0 1015 pec rohlík (null) ks 3 150 0 1 1016 pec toustový chléb (null) kg 34 20 0 1 1017 pec chléb (null) kg 25 15 0 1 1018 pec houska (null) ks 3.5 110 0 1 1019 ovze banán (null) kg 43.5 20 0 1 1020 ovze citron (null) kg 28 2 0 1 1021 ovze jablko červené červené jablko kg 30 10 0 1 1022 ovze jablko zelené zelené jablko kg 32 5 0 1 1023 ovze mango (null) kg 75 0 0 0 1024 ovze brambory (null) kg 13 25 0 1 1025 ovze okurka salátová okurka ks 17.5 0 1 1 1026 ovze rajská jablka (null) kg 44.5 2 0 1 tabulka 4-2 - zboží 13

4 - Data LOGIN JMEN PRIJM ULIC PSC MEST EMAIL novotny Antonín Novotný Havlíčkova 139 35103 Velká Hleďsebe nov.ant@seznam.cz abraham Karel Abrahámek Smetanova 70 27351 Unhošť abraham@centrum.cz rubek Jiří Rubek Janošíkova 709 64300 Brno - Chrlice rubi@seznam.cz bohus Bohuslav Rejholec Laudova 1014 16300 Praha 6 - Řepy rejholec@gmail.com masin František Mašín Puškinova 591 68201 Vyškov franta.masin@seznam.cz novota Blanka Novotná Mírové náměstí 55 55001 Broumov novota@atlas.cz vencka Taťána Vencová Ovenecká 953 17000 Praha 7 - Bubeneč vencova@centrum.cz skocka Zdena Skočdopolová Vokrojova 3378 14300 Praha 4 - Modřany skocdopolova@centrum.cz janouskova Denisa Janoušková Dvořákova 645 60200 Brno xjand05@vse.cz strakova Miluše Straková Žehuňská 843 19800 Praha 9 - Kyje strakova.miluse@seznam.cz krec Tomáš Křeč M. Pujmannové 286 54101 Trutnov krecek@seznam.cz ilja Ilja Novák Vokrojova 3384 14300 Praha ilja-novak@seznam.cz tabulka 4-3 - zákazníci 14

4 - Data CISO ZAK DAT_OB DAT_OD STAV PLAT DOPR JMEN PRIJM ULIC PSC MEST POZN M. Pujmannové 1 krec 11/23/06 11/25/06 o 2 3 Tomáš Křeč 286 54101 Trutnov (null) M. Pujmannové 2 krec 12/10/06 12/12/06 o 1 1 Tomáš Křeč 286 54101 Trutnov (null) M. Pujmannové 3 krec 1/4/07 1/11/07 o 1 2 Tomáš Křeč 286 54101 Trutnov (null) Straková Žehuňská 4 strakova 1/10/07 1/11/07 o 1 2 Miluše 843 19800 Praha 9 - Kyje (null) M. Pujmannové 5 krec 1/30/07 2/2/07 o 2 3 Tomáš Křeč 286 54101 Trutnov (null) zásilku mi prosím dodejte 6 krec 1/30/07 2/4/07 o 1 2 Tomáš Křeč Pražská 4 54101 Trutnov v dopoledních hodinách M. Pujmannové 7 krec 2/10/07 2/12/07 o 2 3 Tomáš Křeč 286 54101 Trutnov (null) Bohuslalec Rejho- Laudova 8 bohus 2/12/07 2/13/07 o 2 2 1014 16300 Praha 6 - Řepy (null) M. Pujmannové 9 krec 4/15/07 4/15/07 o 1 1 Tomáš Křeč 286 54101 Trutnov (null) Bohuslalec Rejho- Laudova 10 bohus 5/15/07 5/17/07 o 2 1 1014 16300 Praha 6 - Řepy (null) M. Pujmannové 11 krec 5/16/07 5/16/07 o 1 1 Tomáš Křeč 286 54101 Trutnov (null) Novotnměstí Mírové ná- 12 novota 8/23/07 8/25/07 o 3 4 Blanka 55 55001 Broumov (null) Bohuslalec Rejho- Laudova 13 bohus 10/10/07 10/10/07 o 3 3 1014 16300 Praha 6 - Řepy (null) František Puškinova 14 masin 1/6/08 1/7/08 o 1 4 Mašín 591 68201 Vyškov (null) 15 bohus 2/3/08 2/4/08 o 2 2 Bohuslav Rejholec Laudova 1014 16300 Praha 6 - Řepy (null) 15

4 - Data 16 novota 2/12/08 2/13/08 o 1 2 Blanka 17 masin 2/13/08 2/15/08 o 3 3 18 masin 4/17/08 4/19/08 o 3 4 19 vencka 5/13/08 5/16/08 o 3 3 Taťána 20 masin 10/10/08 10/11/08 o 1 1 21 novota 10/15/08 10/16/08 o 1 4 Blanka 22 novota 11/17/08 11/21/08 o 2 2 Blanka 23 janouskova 12/12/08 12/15/08 o 2 1 Denisa 24 abraham 12/23/08 12/29/08 o 3 3 Karel 25 skocka 1/6/09 1/6/09 o 1 4 Zdena 26 strakova 1/6/09 1/10/09 p 3 3 Miluše 27 novota 1/12/09 1/14/09 o 1 4 Blanka Antonín 28 novotny 1/24/09 1/26/09 o 2 1 Bohuslav 29 bohus 1/30/09 (null) v 2 2 Novotná František Mašín František Mašín Vencová František Mašín Novotná Novotná Janoušková Abrahámek Skočdopolová Straková Novotná Novotný Rejholec 30 rubek 2/1/09 (null) p 1 2 Jiří Rubek tabulka 4-4 - objednávky mírové náměstí 55 55001 Broumov Puškinova 591 68201 Vyškov (null) Puškinova 591 68201 Vyškov (null) Ovenecká 953 17000 Praha 7 (null) Puškinova 591 68201 Vyškov (null) Mírové náměstí 55 55001 Broumov (null) Mírové náměstí 55 55001 Broumov (null) Dvořákova 645 60200 Brno (null) Smetanova 70 27351 Unhošť (null) Prosím o dodání ve večerních hodinách Vokrojova Praha 4 - Modřany 3378 14300 (null) Žehuňská 843 19800 Praha 9 - Kyje (null) Mírové náměstí 55 55001 Broumov (null) Havlíčkova Velká Hleďsebe 139 35103 (null) Laudova 1014 16300 Praha 6 - Řepy (null) Janošíkova 709 64300 Brno (null) 16

4 - Data CISO KOD MNOZ VCENA 1 1000 5 55 1 1008 2 25.5 1 1015 20 60 1 1017 1 25 2 1009 6 60 2 1015 10 30 2 1017 1 25 2 1022 1 30 2 1024 2 26 3 1024 10 130 3 1025 5 85 3 1026 5 225 3 1023 0.5 37.5 3 1020 1 28 3 1019 3 130.5 3 1021 2 60 3 1000 4 128 3 1014 3 99 3 1010 5 165 3 1007 10 150 4 1009 2 20 4 1019 1 43.5 6 1004 2 130 6 1005 1 86.5 6 1006 4 224 7 1009 1 10 8 1009 6 60 8 1016 1 34 9 1000 10 110 9 1001 10 200 9 1002 5 75 9 1003 10 125 10 1026 1 44.5 10 1021 0.5 15 10 1011 1 36 11 1016 50 1700 12 1021 2 60 12 1017 2 50 12 1011 2 72 13 1017 1 25 14 1000 20 220 14 1004 2 130 15 1010 5 165 15 1022 2 64 16 1007 1 10 16 1016 2 34 16 1018 10 35 16 1021 1 30 16 1025 4 70 17 1002 4 60 18 1005 2 173 18 1006 2 112 19 1008 20 260 20 1003 6 75 20 1015 20 60 20 1017 1 25 20 1025 4 70 21 1015 10 30 21 1018 6 21 21 1017 1 25 21 1024 1 13 22 1003 2 25 22 1013 6 33 22 1019 1 43.5 22 1025 2 35 23 1024 2 26 23 1026 1 44.5 23 1000 10 110 24 1008 3 39 24 1018 10 35 24 1026 1 44.5 25 1013 1 33 25 1020 1 28 26 1005 1 86.5 27 1020 20 560 28 1002 30 450 29 1006 1 56 30 1024 2 26 30 1017 1 25 30 1016 2 68 tabulka 4-5 - položky objednávek 17

5 Dotazy do databáze 5 - Dotazy do databáze Součástí práce bylo vytvoření sady dotazů do vyhotovené databáze, které jednak slouží pro procvičování jazyka SQL a práce s relační databází a jednak dokumentují smysluplnost dat obsažených v databázi. Proto zde uvádíme jednotlivé dotazy a k nim příslušné výstupy dat, které mohou rovněž sloužit pro kontrolu správnosti zadaných dotazů při procvičování. 1. Vypište kódy a názvy všeho zboží select KOD, NAZEV from ZBOZ; KOD NAZEV 1000 Braník 1001 Budějovický Budvar 1002 Gambrinus světlý 1003 Staropramen 1004 Frankovka 1005 Modrý Portugal 1006 Svatovavřinecké 1007 Mattoni broskev 1008 Mattoni 1009 Poděbradka 1010 7UP 1011 Coca-cola 1012 Fanta divoká malina 1013 Fanta pomeranč 1014 Fanta lemonic 1015 rohlík 1016 toustový chléb 1017 chléb 1018 houska 1019 banán 1020 citron 1021 jablko červené 1022 jablko zelené 1023 mango 1024 brambory 1025 okurka 1026 rajská jablka 18

5 - Dotazy do databáze 2. Vypište názvy kategorií zboží select NAZEVK from KAT; NAZEVK destiláty limonády minerální vody nápoje nápoje alkoholické nápoje nealkoholické ovoce, zelenina pečivo pivo víno 3. Vypište popisy všech kategorií select KAT, POPISK from KAT; KAT POPISK nap zboží, které lze pít napal alkohol pivo piva různých druhů vino nejrůznější druhy vína dest tvrdý alkohol napna nápoje, které neobsahují alkohol minvo pramenité minerální a stolní vody limo nealkoholické nápoje nejrůznějších příchutí pec chléb, housky, rohlíky, sladké pečivo atd. ovze něco dobrého pro zdraví 4. Zjistěte v jakých různých jednotkách je zboží (tak aby se neopakovaly) select distinct JEDN from ZBOZ; JEDN kg láhev 0,75 l láhev 1,5 l ks láhev 0,5 l láhev 2 l 19

5 - Dotazy do databáze 5. Pro každé zboží vypište jeho cenu a cenu při zvýšení o 15 % select NAZEV, CENA, CENA * 1.15 from ZBOZ; NAZEV CENA CENA*1.15 Braník 11 12.65 Budějovický Budvar 20 23 Gambrinus světlý 15 17.25 Staropramen 12.5 14.375 Frankovka 65 74.75 Modrý Portugal 86.5 99.475 Svatovavřinecké 56 64.4 Mattoni broskev 15 17.25 Mattoni 13 14.95 Poděbradka 10 11.5 7UP 33 37.95 Coca-cola 36 41.4 Fanta divoká malina 33 37.95 Fanta pomeranč 33 37.95 Fanta lemonic 33 37.95 rohlík 3 3.45 toustový chléb 34 39.1 chléb 25 28.75 houska 3.5 4.025 banán 43.5 50.025 citron 28 32.2 jablko červené 30 34.5 jablko zelené 32 36.8 mango 75 86.25 brambory 13 14.95 okurka 17.5 20.125 rajská jablka 44.5 51.175 20

5 - Dotazy do databáze 6. Vypište cenu každého zboží v případě přirážky 20 Kč select NAZEV, CENA + 20 from ZBOZ; NZEV CENA+20 Braník 31 Budějovický Budvar 40 Gambrinus světlý 35 Staropramen 32.5 Frankovka 85 Modrý Portugal 106.5 Svatovavřinecké 76 Mattoni broskev 35 Mattoni 33 Poděbradka 30 7UP 53 Coca-cola 56 Fanta divoká malina 53 Fanta pomeranč 53 Fanta lemonic 53 rohlík 23 toustový chléb 54 chléb 45 houska 23.5 banán 63.5 citron 48 jablko červené 50 jablko zelené 52 mango 95 brambory 33 okurka 37.5 rajská jablka 64.5 21

5 - Dotazy do databáze 7. Vypište objednávky tak, aby měly následující formu: Zákazník JMENO z MESTO provedl objednávku dne DATUM select Zákazník, ZAK, z, MEST, provedl objednávku dne, DAT_OB from OBJ; ZÁKAZ- NÍK PRIJM Z MEST PROVEDL OBJEDNÁV- KU DNE DAT_OB Zákazník krec z Trutnov provedl objednávku dne 11/23/06 Zákazník krec z Trutnov provedl objednávku dne 12/10/06 Zákazník krec z Trutnov provedl objednávku dne 1/4/07 Zákazník strakova z Praha 9 - Kyje provedl objednávku dne 1/10/07 Zákazník krec z Trutnov provedl objednávku dne 1/30/07 Zákazník krec z Trutnov provedl objednávku dne 1/30/07 Zákazník krec z Trutnov provedl objednávku dne 2/10/07 Zákazník bohus z Praha 6 - Řepy provedl objednávku dne 2/12/07 Zákazník krec z Trutnov provedl objednávku dne 4/15/07 Zákazník bohus z Praha 6 - Řepy provedl objednávku dne 5/15/07 Zákazník krec z Trutnov provedl objednávku dne 5/16/07 Zákazník novota z Broumov provedl objednávku dne 8/23/07 Zákazník bohus z Praha 6 - Řepy provedl objednávku dne 10/10/07 Zákazník masin z Vyškov provedl objednávku dne 1/6/08 Zákazník bohus z Praha 6 - Řepy provedl objednávku dne 2/3/08 Zákazník novota z Broumov provedl objednávku dne 2/12/08 Zákazník masin z Vyškov provedl objednávku dne 2/13/08 Zákazník masin z Vyškov provedl objednávku dne 4/17/08 Zákazník vencka z Praha 7 provedl objednávku dne 5/13/08 Zákazník masin z Vyškov provedl objednávku dne 10/10/08 Zákazník novota z Broumov provedl objednávku dne 10/15/08 Zákazník novota z Broumov provedl objednávku dne 11/17/08 Zákazník janouskova z Brno provedl objednávku dne 12/12/08 Zákazník abraham z Unhošť provedl objednávku dne 12/23/08 Zákazník skocka z Praha 4 - Modřany provedl objednávku dne 1/6/09 Zákazník strakova z Praha 9 - Kyje provedl objednávku dne 1/6/09 Zákazník novota z Broumov provedl objednávku dne 1/12/09 Zákazník novotny z Velká Hleďsebe provedl objednávku dne 1/24/09 Zákazník bohus z Praha 6 - Řepy provedl objednávku dne 1/30/09 Zákazník rubek z Brno provedl objednávku dne 2/1/09 22

5 - Dotazy do databáze 8. Pro všechno zboží vypište cenu při zlevnění na polovinu select NAZEV, CENA/2 from ZBOZ; NAZEV CENA/2 Braník 5.5 Budějovický Budvar 10 Gambrinus světlý 7.5 Staropramen 6.25 Frankovka 32.5 Modrý Portugal 43.25 Svatovavřinecké 28 Mattoni broskev 7.5 Mattoni 6.5 Poděbradka 5 7UP 16.5 Coca-cola 18 Fanta divoká malina 16.5 Fanta pomeranč 16.5 Fanta lemonic 16.5 rohlík 1.5 toustový chléb 17 chléb 12.5 houska 1.75 banán 21.75 citron 14 jablko červené 15 jablko zelené 16 mango 37.5 brambory 6.5 okurka 8.75 23

9. Vypište ceny zboží v jednotlivých kategoriích (tak aby se neopakovaly) select DISTINCT KAT, CENA from ZBOZ join KAT using (KAT); KAT CENA minvo 13 ovze 44.5 vino 86.5 minvo 10 pec 3.5 ovze 32 vino 65 ovze 17.5 minvo 15 limo 36 ovze 43.5 pivo 11 vino 56 ovze 30 pec 3 ovze 28 pivo 20 pec 25 ovze 75 pivo 15 pivo 12.5 limo 33 pec 34 ovze 13 5 - Dotazy do databáze 24

5 - Dotazy do databáze 10. Pro každé zboží vypište název kategorie, do které patří select NAZEV, NAZEVK from ZBOZ join KAT using (KAT); NAZEV 7UP Coca-cola Fanta divoká malina Fanta pomeranč Fanta lemonic Mattoni broskev Mattoni Poděbradka banán citron jablko červené jablko zelené mango brambory okurka rajská jablka rohlík toustový chléb chléb houska Braník Budějovický Budvar Gambrinus světlý Staropramen Frankovka Modrý Portugal Svatovavřinecké NAZEVK limonády limonády limonády limonády limonády minerální vody minerální vody minerální vody ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina pečivo pečivo pečivo pečivo pivo pivo pivo pivo víno víno víno 25

5 - Dotazy do databáze 11. Pro každou objednávku vypište název zboží, které bylo objednáno, včetně kódu kategorie select CISO, NAZEV, KAT from ZBOZ join POLOZ using (KOD) join OBJ using (CISO); CISO NAZEV KAT 1 Braník pivo 3 Braník pivo 9 Braník pivo 14 Braník pivo 23 Braník pivo 9 Budějovický Budvar pivo 28 Gambrinus světlý pivo 17 Gambrinus světlý pivo 9 Gambrinus světlý pivo 9 Staropramen pivo 22 Staropramen pivo 20 Staropramen pivo 6 Frankovka vino 14 Frankovka vino 18 Modrý Portugal vino 6 Modrý Portugal vino 26 Modrý Portugal vino 29 Svatovavřinecké vino 6 Svatovavřinecké vino 18 Svatovavřinecké vino 3 Mattoni broskev minvo 16 Mattoni broskev minvo 19 Mattoni minvo 24 Mattoni minvo 1 Mattoni minvo 8 Poděbradka minvo 2 Poděbradka minvo 7 Poděbradka minvo 4 Poděbradka minvo 15 7UP limo 3 7UP limo 12 Coca-cola limo 10 Coca-cola limo 25 Fanta pomeranč limo 22 Fanta pomeranč limo 3 Fanta lemonic limo 20 rohlík pec 21 rohlík pec 1 rohlík pec 2 rohlík pec 26 16 toustový chléb pec 11 toustový chléb pec 30 toustový chléb pec 8 toustový chléb pec 21 chléb pec 20 chléb pec 13 chléb pec 12 chléb pec 2 chléb pec 30 chléb pec 1 chléb pec 16 houska pec 24 houska pec 21 houska pec 22 banán ovze 4 banán ovze 3 banán ovze 27 citron ovze 3 citron ovze 25 citron ovze 10 jablko červené ovze 3 jablko červené ovze 16 jablko červené ovze 12 jablko červené ovze 2 jablko zelené ovze 15 jablko zelené ovze 3 mango ovze 21 brambory ovze 2 brambory ovze 23 brambory ovze 3 brambory ovze 30 brambory ovze 22 okurka ovze 20 okurka ovze 16 okurka ovze 3 okurka ovze 3 rajská jablka ovze 10 rajská jablka ovze 24 rajská jablka ovze 23 rajská jablka ovze

5 - Dotazy do databáze 12. Pro každou objednávku vypište název kategorie, ze které je objednané zboží select CISO, NAZEVK from ZBOZ join POLOZ using (KOD) join OBJ using (CISO) join KAT USING (KAT); CISO NAZEVK 1 pivo 1 minerální vody 1 pečivo 1 pečivo 2 minerální vody 2 pečivo 2 pečivo 2 ovoce, zelenina 2 ovoce, zelenina 3 pivo 3 minerální vody 3 limonády 3 limonády 3 ovoce, zelenina 3 ovoce, zelenina 3 ovoce, zelenina 3 ovoce, zelenina 3 ovoce, zelenina 3 ovoce, zelenina 3 ovoce, zelenina 4 minerální vody 4 ovoce, zelenina 6 víno 6 víno 6 víno 7 minerální vody 8 minerální vody 8 pečivo 9 pivo 9 pivo 9 pivo 9 pivo 10 limonády 10 ovoce, zelenina 10 ovoce, zelenina 11 pečivo 12 limonády 12 pečivo 12 ovoce, zelenina 13 pečivo 27 14 pivo 14 víno 15 limonády 15 ovoce, zelenina 16 minerální vody 16 pečivo 16 pečivo 16 ovoce, zelenina 16 ovoce, zelenina 17 pivo 18 víno 18 víno 19 minerální vody 20 pivo 20 pečivo 20 pečivo 20 ovoce, zelenina 21 pečivo 21 pečivo 21 pečivo 21 ovoce, zelenina 22 pivo 22 limonády 22 ovoce, zelenina 22 ovoce, zelenina 23 pivo 23 ovoce, zelenina 23 ovoce, zelenina 24 minerální vody 24 pečivo 24 ovoce, zelenina 25 limonády 25 ovoce, zelenina 26 víno 27 ovoce, zelenina 28 pivo 29 víno 30 pečivo 30 pečivo 30 ovoce, zelenina

5 - Dotazy do databáze 13. Pro každou kategorii vypište popisy zboží, které do ní patří select KAT, POPISK from ZBOZ join KAT using (KAT); KAT pivo pivo pivo pivo vino vino vino minvo minvo minvo limo limo limo limo limo pec pec pec pec ovze ovze ovze ovze ovze ovze ovze ovze PIPSK piva různých druhů piva různých druhů piva různých druhů piva různých druhů nejrůznější druhy vína nejrůznější druhy vína nejrůznější druhy vína pramenité minerální a stolní vody pramenité minerální a stolní vody pramenité minerální a stolní vody nealkoholické nápoje nejrůznějších příchutí nealkoholické nápoje nejrůznějších příchutí nealkoholické nápoje nejrůznějších příchutí nealkoholické nápoje nejrůznějších příchutí nealkoholické nápoje nejrůznějších příchutí chléb, housky, rohlíky, sladké pečivo atd. chléb, housky, rohlíky, sladké pečivo atd. chléb, housky, rohlíky, sladké pečivo atd. chléb, housky, rohlíky, sladké pečivo atd. něco dobrého pro zdraví něco dobrého pro zdraví něco dobrého pro zdraví něco dobrého pro zdraví něco dobrého pro zdraví něco dobrého pro zdraví něco dobrého pro zdraví něco dobrého pro zdraví 28

5 - Dotazy do databáze 14. Pro každou kategorii vypište jména zákazníků, kteří si z ní objednali nějaké zboží select KAT, JMEN, PRIJM from ZBOZ join KAT using (KAT) join POLOZ using (KOD) join OBJ using (CISO); KAT JMEN PRIJM limo Bohuslav Rejholec limo Tomáš Křeč limo Blanka Novotná limo Bohuslav Rejholec limo Zdena Skočdopolová limo Blanka Novotná limo Tomáš Křeč minvo Blanka Novotná minvo Tomáš Křeč minvo Karel Abrahámek minvo Taťána Vencová minvo Tomáš Křeč minvo Bohuslav Rejholec minvo Tomáš Křeč minvo Miluše Straková minvo Tomáš Křeč ovze Blanka Novotná ovze Miluše Straková ovze Tomáš Křeč ovze Blanka Novotná ovze Zdena Skočdopolová ovze Tomáš Křeč ovze Blanka Novotná ovze Blanka Novotná ovze Bohuslav Rejholec ovze Tomáš Křeč ovze Bohuslav Rejholec ovze Tomáš Křeč ovze Tomáš Křeč ovze Jiří Rubek ovze Denisa Janoušková ovze Blanka Novotná ovze Tomáš Křeč ovze Tomáš Křeč ovze Blanka Novotná ovze František Mašín ovze Blanka Novotná ovze Tomáš Křeč ovze Karel Abrahámek ovze Denisa Janoušková 29 ovze Bohuslav Rejholec ovze Tomáš Křeč pec Blanka Novotná pec František Mašín pec Tomáš Křeč pec Tomáš Křeč pec Jiří Rubek pec Blanka Novotná pec Tomáš Křeč pec Bohuslav Rejholec pec Jiří Rubek pec Blanka Novotná pec František Mašín pec Bohuslav Rejholec pec Blanka Novotná pec Tomáš Křeč pec Tomáš Křeč pec Karel Abrahámek pec Blanka Novotná pec Blanka Novotná pivo Denisa Janoušková pivo František Mašín pivo Tomáš Křeč pivo Tomáš Křeč pivo Tomáš Křeč pivo Tomáš Křeč pivo Antonín Novotný pivo František Mašín pivo Tomáš Křeč pivo Blanka Novotná pivo František Mašín pivo Tomáš Křeč vino František Mašín vino Tomáš Křeč vino Miluše Straková vino František Mašín vino Tomáš Křeč vino Bohuslav Rejholec vino František Mašín vino Tomáš Křeč

5 - Dotazy do databáze 15. Vypište jména zákazníků, kteří si někdy něco objednali select distinct ZAK.JMEN, ZAK.PRIJM from ZAK join OBJ on (ZAK.LOGIN = OBJ.ZAK) where CISO is not null; JMEN František Zdena Antonín Bohuslav Taťána Tomáš Miluše Karel Blanka Jiří Denisa PRIJM Mašín Skočdopolová Novotný Rejholec Vencová Křeč Straková Abrahámek Novotná Rubek Janoušková 16. Vypište názvy kategorií, ze kterých bylo někdy objednáno nějaké zboží select distinct NAZEVK from KAT join ZBOZ using (KAT) join POLOZ using (KOD); NAZEVK ovoce, zelenina pivo pečivo minerální vody víno limonády 17. Vypište popisy zboží, které si objednal zákazník masin select POPIS from ZBOZ join POLOZ using (KOD) join OBJ using (CISO) join ZAK on (OBJ.ZAK = ZAK.LOGIN) where LOGIN = masin and POPIS is not null; POPIS světlé pivo ve skle světlé pivo ve skle světlé pivo ve skle suché víno suché víno salátová okurka 30

5 - Dotazy do databáze 18. Do, které kategorie patří zboží Mattoni? select NAZEVK from KAT join ZBOZ using (KAT) where NAZEV = Mattoni ; NAZEVK minerální vody 19. Vypište jména zákazníků, kteří mají PSČ 64300 nebo 14300 select JMEN, PRIJM from ZAK where PSC = 64300 or PSC = 14300 ; JMEN Jiří Zdena Ilja PRIJM Rubek Skočdopolová Novák 20. Vypište kódy a názvy zboží z kategorií pivo a pečivo select KOD, NAZEV from ZBOZ join KAT using (KAT) where NAZEVK = pivo or NAZEVK = pečivo ; KOD NAZEV 1015 rohlík 1016 toustový chléb 1017 chléb 1018 houska 1000 Braník 1001 Budějovický Budvar 1002 Gambrinus světlý 1003 Staropramen 21. Vypište přehled všech zákazníků, kteří nemají PSČ 17000 select JMEN, PRIJM from ZAK where PSC <> 17000 ; JMEN Antonín Karel Jiří Bohuslav František Blanka Zdena Denisa Miluše Tomáš Ilja PRIJM Novotný Abrahámek Rubek Rejholec Mašín Novotná Skočdopolová Janoušková Straková Křeč Novák 31

5 - Dotazy do databáze 22. Vypište názvy zboží z kategorie limonády s cenou vyšší než 33 select NAZEV from ZBOZ join KAT using (KAT) where NAZEVK = limonády and CENA > 33; NAZEV Coca-cola 23. Vypište názvy zboží s jednotkou ks z kategorie ovoce, zelenina a pečivo select NAZEV from ZBOZ join KAT using (KAT) where JEDN = ks and (NAZEVK = ovoce, zelenina or NAZEVK = pečivo ); NAZEV okurka rohlík houska 24. Vypište kódy zboží, které mají cenu pod 30 nebo jsou z kategorie víno s cenou pod 70 select KOD, CENA from ZBOZ join KAT using (KAT) where CENA < 30 or (NAZEVK = víno and CENA < 70); KOD CENA 1007 15 1008 13 1009 10 1020 28 1024 13 1025 17.5 1015 3 1017 25 1018 3.5 1000 11 1001 20 1002 15 1003 12.5 1004 65 1006 56 32

5 - Dotazy do databáze 25. Vypište názvy zboží s cenou v rozmezí 20-30 select NAZEV, CENA from ZBOZ where CENA between 20 and 30; NAZEV CENA Budějovický Budvar 20 chléb 25 citron 28 jablko červené 30 26. Vypište názvy zboží z kategorií pivo, vino, dest, limo, minvo select NAZEV from ZBOZ where KAT in ( pivo, vino, dest, limo, minvo ); NAZEV 7UP Braník Budějovický Budvar Coca-cola Fanta divoká malina Fanta lemonic Fanta pomeranč Frankovka Gambrinus světlý Mattoni Mattoni broskev Modrý Portugal Poděbradka Staropramen Svatovavřinecké 33

5 - Dotazy do databáze 27. Vypište kódy a názvy zboží, které má popis select KOD, NAZEV from ZBOZ where POPIS is not null; KOD NAZEV 1000 Braník 1001 Budějovický Budvar 1002 Gambrinus světlý 1003 Staropramen 1004 Frankovka 1006 Svatovavřinecké 1007 Mattoni broskev 1008 Mattoni 1009 Poděbradka 1012 Fanta divoká malina 1013 Fanta pomeranč 1014 Fanta lemonic 1021 jablko červené 1022 jablko zelené 1025 okurka 28. V jakých městech bydlí zákazníci s jménem končícím na ová select MEST from ZAK where PRIJM like %ová ; MEST Praha 7 - Bubeneč Praha 4 - Modřany Brno Praha 9 - Kyje 34

29. Vypište názvy zboží, jehož cena bude po 10% zvýšení vyšší než 35 select NAZEV, CENA from ZBOZ where CENA*1.1 > 35; NAZEV CENA Frankovka 65 Modrý Portugal 86.5 Svatovavřinecké 56 7UP 33 Coca-cola 36 Fanta divoká malina 33 Fanta pomeranč 33 Fanta lemonic 33 toustový chléb 34 banán 43.5 jablko zelené 32 mango 75 rajská jablka 44.5 30. Vypište názvy zboží z kategorie ovoce, zelenina 5 - Dotazy do databáze select NAZEV from ZBOZ join KAT using (KAT) where NAZEVK = ovoce, zelenina ; NAZEV banán citron jablko červené jablko zelené mango brambory okurka rajská jablka 35

5 - Dotazy do databáze 31. Vypište názvy zboží, které bylo někdy objednáno select distinct NAZEV from ZBOZ join POLOZ using (KOD); NAZEV Budějovický Budvar Fanta pomeranč Svatovavřinecké Poděbradka Fanta lemonic toustový chléb Staropramen Frankovka Coca-cola citron brambory Gambrinus světlý Modrý Portugal chléb mango Braník rohlík banán jablko červené Mattoni broskev 7UP houska okurka rajská jablka Mattoni jablko zelené 32. Vypište jméno nadřazené kategorie pro kategorii pivo select NADRKAT.NAZEVK from KAT NADRKAT join KAT on (KAT.NADR = NADRKAT.KAT) where KAT.KAT = pivo ; NAZEVK nápoje alkoholické 36

5 - Dotazy do databáze 33. Vypište názvy zboží, seřazené abecedně select NAZEV from ZBOZ order by NAZEV; NAZEV banán brambory Braník Budějovický Budvar chléb citron Coca-cola Fanta divoká malina Fanta lemonic Fanta pomeranč Frankovka Gambrinus světlý houska jablko červené jablko zelené mango Mattoni Mattoni broskev Modrý Portugal okurka Poděbradka rajská jablka rohlík Staropramen Svatovavřinecké toustový chléb 7UP 37

5 - Dotazy do databáze 34. Vypište příjmení zákazníků, seřazená dle města select PRIJM, MEST from ZAK order by MEST; PRIJM Janoušková Rubek Novotná Novák Skočdopolová Rejholec Vencová Straková Křeč Abrahámek Novotný Mašín MEST Brno Brno - Chrlice Broumov Praha Praha 4 - Modřany Praha 6 - Řepy Praha 7 - Bubeneč Praha 9 - Kyje Trutnov Unhošť Velká Hleďsebe Vyškov 38

5 - Dotazy do databáze 35. Vypište zboží, seřazené dle kategorie vzestupně a v rámci kategorie dle ceny sestupně select KAT, CENA, NAZEV from ZBOZ order by KAT asc, CENA desc; KAT CENA NAZEV limo 36 Coca-cola limo 33 Fanta lemonic limo 33 Fanta divoká malina limo 33 7UP limo 33 Fanta pomeranč minvo 15 Mattoni broskev minvo 13 Mattoni minvo 10 Poděbradka ovze 75 mango ovze 44.5 rajská jablka ovze 43.5 banán ovze 32 jablko zelené ovze 30 jablko červené ovze 28 citron ovze 17.5 okurka ovze 13 brambory pec 34 toustový chléb pec 25 chléb pec 3.5 houska pec 3 rohlík pivo 20 Budějovický Budvar pivo 15 Gambrinus světlý pivo 12.5 Staropramen pivo 11 Braník vino 86.5 Modrý Portugal vino 65 Frankovka vino 56 Svatovavřinecké 36. Vypište zoží z kategorie pec, seřazené podle ceny, zvýšené o deset procent select NAZEV, CENA from ZBOZ where KAT = pec order by CENA*1.1; NAZEV CENA rohlík 3 houska 3.5 chléb 25 toustový chléb 34 39

5 - Dotazy do databáze 37. Vypište zboží, seřazené dle názvů kategorií, do kterých patří select NAZEVK, NAZEV from ZBOZ join KAT using (KAT) order by NAZEVK; NAZEVK limonády limonády limonády limonády limonády minerální vody minerální vody minerální vody ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina pečivo pečivo pečivo pečivo pivo pivo pivo pivo víno víno víno NAZEV Fanta lemonic Fanta pomeranč Fanta divoká malina Coca-cola 7UP Mattoni broskev Mattoni Poděbradka mango jablko zelené jablko červené citron banán brambory rajská jablka okurka rohlík toustový chléb chléb houska Braník Budějovický Budvar Staropramen Gambrinus světlý Frankovka Modrý Portugal Svatovavřinecké 38. Vypište maximální a minimální cenu zboží select max (CENA), min (CENA) from ZBOZ; MAX(CENA) MIN(CENA) 86.5 3 40

39. Vypište celkový počet objednávek a celkovou sumu cen na objednávkách 5 - Dotazy do databáze select count(distinct CISO), sum (VCENA) from OBJ left join POLOZ using (CISO); COUNT(DISTINCT CISO) SUM(VCENA) 30 8145 40. Vypište průměrnou cenu zboží select avg (CENA) from ZBOZ; AVG(CENA) 30.40740740740740740740740740740740740741 41. Zjistěte počet kategorií zboží select count(*) from KAT; COUNT(*) 10 42. Zjistěte průměrnou cenu zboží v jednotlivých kategoriích select KAT, avg (CENA) from ZBOZ group by KAT; KAT AVG(CENA) limo 33.6 minvo 12.66666666666666666666666666666666666667 ovze 35.4375 pec 16.375 pivo 14.625 vino 69.16666666666666666666666666666666666667 41

5 - Dotazy do databáze 43. Zjistěte počet zboží v kategorii a celkovou cenu po 10% zvýšení select NAZEVK, count(kod), sum(cena*1.1) from ZBOZ right join KAT using (KAT) group by NAZEVK; NAZEVK COUNT(KOD) SUM(CENA*1.1) ovoce, zelenina 8 311.85 destiláty 0 pivo 4 64.35 pečivo 4 72.05 nápoje alkoholické 0 nápoje nealkoholické 0 víno 3 228.25 minerální vody 3 41.8 limonády 5 184.8 nápoje 0 44. Zjistěte, kolik zboží ma cenu vyšší než 50 select count(*) from ZBOZ where CENA > 50; COUNT(*) 4 45. Zjistěte maximální cenu v kategorii pivo select max (CENA) from ZBOZ where KAT = pivo ; MAX(CENA) 20 46. Zjistěte průměrnou cenu zboží v kategorii limo select avg (CENA) from ZBOZ where KAT = limo ; AVG(CENA) 33.6 47. Kolik je zákazníků se jménem začínajícím na B select count(*) from ZAK where JMEN like B% ; COUNT(*) 2 42

5 - Dotazy do databáze 48. Zjistěte, kolik zboží je v kategorii pec a jaká je minimální cena v této kategorii select count(*), min(cena) from ZBOZ where KAT = pec ; COUNT(*) MIN(CENA) 4 3 49. Zjistěte počet zboží, měřeného v kg v kategorii ovze select count(*) from ZBOZ where KAT = ovze and JEDN = kg ; COUNT(*) 7 50. Zjistěte počet objednávek zákazníka krec select count(*) from OBJ where ZAK = krec ; COUNT(*) 8 51. Pro každou kategorii vypište počet zboží, měřeného v jednotlivých jednotkách select KAT, JEDN, count(*) from ZBOZ group by KAT, JEDN; KAT JEDN COUNT(*) ovze kg 7 ovze ks 1 pec ks 2 vino láhev 0,75 l 3 pec kg 2 pivo láhev 0,5 l 4 minvo láhev 1,5 l 3 limo láhev 2 l 5 43

5 - Dotazy do databáze 52. Pro každou kategorii vypište maximální cenu, kategorie seřaďte podle maximální ceny vzestpuně select KAT, max (CENA) as MAXCENA from ZBOZ group by KAT order by MAXCENA; KAT MAX(CENA) minvo 15 pivo 20 pec 34 limo 36 ovze 75 vino 86.5 53. Zjistěte počet zboží s cenou nad 30 v každé kategorii, seřaďte podle poču vzestupně select KAT, count (*) as POCET from ZBOZ where CENA > 30 group by KAT order by POCET; KAT POČET pec 1 vino 3 ovze 4 limo 5 54. Pro každou kategorii vypište název nadřazené kategorie select KAT.NAZEVK, NADR.NAZEVK as NADRAZENA from KAT left join KAT NADR on (KAT.NADR = NADR.KAT); NAZEVK nápoje nealkoholické nápoje alkoholické destiláty víno pivo limonády minerální vody ovoce, zelenina pečivo nápoje NADRAZENA nápoje nápoje nápoje alkoholické nápoje alkoholické nápoje alkoholické nápoje nealkoholické nápoje nealkoholické 44

5 - Dotazy do databáze 55. Vypište názvy zboží se stejnou cenou jako Fanta pomeranč select NAZEV, CENA from ZBOZ where CENA = (select CENA from ZBOZ where NAZEV = Fanta pomeranč ); NAZEV CENA 7UP 33 Fanta divoká malina 33 Fanta pomeranč 33 Fanta lemonic 33 56. Vypište jména zákazníků, kteří si nikdy nic neobjednali. select ZAK.JMEN, ZAK.PRIJM from ZAK left join OBJ on (ZAK.LOGIN = OBJ.ZAK) where OBJ.ZAK is null; JMEN Ilja PRIJM Novák 57. Vypište zboží, které nebylo nikdy objednáno. select NAZEV from ZBOZ left join POLOZ using (KOD) where POLOZ.CISO is null; NAZEV Fanta divoká malina 45

6 Závěr 6 - Závěr Cíl práce, tedy vytvořit výukovou databázi s použitelnými vzorovými daty, se podařilo naplnit. Dokázat to lze na sadě výukových dotazů, které dávají smysluplné výstupy. V průběhu práce byl upraven model, vycházející z ideje v zadání a na základě jeho definitivní verze byla vytvořena cvičná databáze. Ta pak byla naplněna cvičnými daty tak, aby na nich bylo možno realizovat dotazy umožňující procvičování různých typů konstruktů v jazyce SQL. Výsledkem práce je hotová a funkční databáze naplněná cvičnými daty a sada zadání dotazů do této databáze, na kterých studenti mohou procvičovat své znalosti dotazovacího jazyka SQL. Součástí práce jsou i přehledné tabulky se správnými výstupy ke každému dotazu. Díky nim je možné při procvičování snadno zkontrolovat správnost příslušného dotazu. 46

Zdroje Zdroje HERNANDEZ, M. J. Návrh databází. Praha: Grada, 2006. ISBN 80-247-0900-7. Dokumentace k Oracle [on-line]. [2009]. Dostupný z WWW: <http://kit-oracle.vse.cz/oradocs/ index.htm> SQL tutorial [on-line]. [2009]. Dostupný z WWW: <http://www.w3schools.com/sql/> Three schema approach [on-line]. [2009]. Dostupný z WWW: <http://en.wikipedia.org/wiki/ Three_schema_approach> 47

Terminologický slovník Terminologický slovník P3A SQL (Structured Query Language) Princip tří architektur Standardizovaný strukturovaný jazyk používaný pro definici a manipulaci s daty v relačních databázích 48

Přílohy Přílohy Skripty použité pro vytvoření tabulek databáze create table KAT ( KAT VARCHAR2(5) not null, NADR VARCHAR2(5), NAZEVK POPISK VARCHAR2(100) not null, CLOB, constraint PK_KAT primary key (KAT), constraint AK_NAZ_KAT unique (NAZEVK) ); create index razena_fk on KAT ( NADR ASC ); 49

Přílohy create table OBJ ( CISO INTEGER ZAK VARCHAR2(30) not null, not null, DAT_OB DATE not null, DAT_OD DATE, STAV CHAR(1) default p not null constraint CKC_STAV_OBJ check (STAV in ( p, v, o )), PLAT SMALLINT not null constraint CKC_PLAT_OBJ check (PLAT in (1,2,3)), DOPR SMALLINT not null constraint CKC_DOPR_OBJ check (DOPR in (1,2,3,4)), JMEN VARCHAR2(50) not null, PRIJM VARCHAR2(50) not null, ULIC VARCHAR2(100) not null, PSC CHAR(5) not null, MEST VARCHAR2(100) not null, POZN CLOB, constraint PK_OBJ primary key (CISO) ); create index od_koho_fk on OBJ ( ZAK ASC ); create table POLOZ ( CISO INTEGER KOD VARCHAR2(10) MNOZ FLOAT not null, not null, not null, VCENA NUMBER(8,2) not null, constraint PK_POLOZ primary key (CISO, KOD) ); 50

Přílohy create index POLOZ_FK on POLOZ ( CISO ASC ); create index POLOZ2_FK on POLOZ ( KOD ASC ); create table ZAK ( LOGIN VARCHAR2(30) not null, JMEN VARCHAR2(50) not null, PRIJM VARCHAR2(50) not null, ULIC VARCHAR2(100) not null, PSC CHAR(5) not null, MEST VARCHAR2(100) not null, EMAIL VARCHAR2(100) not null, constraint PK_ZAK primary key (LOGIN) ); create table ZBOZ ( KOD VARCHAR2(10) KAT VARCHAR2(5) not null, not null, NAZEV POPIS VARCHAR2(100) not null, CLOB, JEDN VARCHAR2(20), CENA NUMBER(8,2) not null, SKLAD FLOAT not null, DOSTUP AKTIV SMALLINT not null, SMALLINT not null, constraint PK_ZBOZ primary key (KOD), constraint AK_NAZ_ZB_ZBOZ unique (NAZEV) ); 51

Přílohy create index zaraz_fk on ZBOZ ( KAT ASC ); alter table KAT add constraint FK_KAT_RAZENA_KAT foreign key (NADR) references KAT (KAT); alter table OBJ add constraint FK_OBJ_OD_KOHO_ZAK foreign key (ZAK) references ZAK (LOGIN); alter table POLOZ add constraint FK_POLOZ_POLOZ_OBJ foreign key (CISO) references OBJ (CISO); alter table POLOZ add constraint FK_POLOZ_POLOZ2_ZBOZ foreign key (KOD) references ZBOZ (KOD); alter table ZBOZ add constraint FK_ZBOZ_ZARAZ_KAT foreign key (KAT) references KAT (KAT); 52

Skripty použité pro vytvoření kategorií zboží Přílohy insert into KAT values( nap, null, nápoje, zboží, které lze pít ); insert into KAT values( napal, nap, nápoje alkoholické, alkohol ); insert into KAT values( pivo, napal, pivo, piva různých druhů ); insert into KAT values( vino, napal, víno, nejrůznější druhy vína ); insert into KAT values( dest, napal, destiláty, tvrdý alkohol ); insert into KAT values( napna, nap, nápoje nealkoholické, nápoje, které neobsahují alkohol ); insert into KAT values( minvo, napna, minerální vody, pramenité minerální a stolní vody ); insert into KAT values( limo, napna, limonády, nealkoholické nápoje nejrůznějších příchutí ); insert into KAT values( pec, null, pečivo, chléb, housky, rohlíky, sladké pečivo atd. ); insert into KAT values( ovze, null, ovoce, zelenina, něco dobrého pro zdraví ); 53

Skripty použité pro vytvoření zboží Přílohy insert into ZBOZ values(1000, pivo, Braník, světlé pivo ve skle, láhev 0,5 l, 11, 100, 0, 1); insert into ZBOZ values(1001, pivo, Budějovický Budvar, světlý ležák ve skle, láhev 0,5 l, 20, 250, 0, 1); insert into ZBOZ values(1002, pivo, Gambrinus světlý, světlé pivo ve skle, láhev 0,5 l, 15, 200, 0, 1); insert into ZBOZ values(1003, pivo, Staropramen, světlé pivo ve skle, láhev 0,5 l, 12.5, 0, 1, 1); insert into ZBOZ values(1004, vino, Frankovka, suché víno, láhev 0,75 l, 65, 10, 0, 1); insert into ZBOZ values(1005, vino, Modrý Portugal, null, láhev 0,75 l, 86.5, 1, 0, 1); insert into ZBOZ values(1006, vino, Svatovavřinecké, suché víno, láhev 0,75 l, 56, 0, 3, 1); insert into ZBOZ values(1007, minvo, Mattoni broskev, minerální voda s příchutí broskve, láhev 1,5 l, 15, 20, 0, 1); insert into ZBOZ values(1008, minvo, Mattoni, minerální voda bez příchuti, láhev 1,5 l, 13, 120, 0, 1); insert into ZBOZ values(1009, minvo, Poděbradka, minerální voda bez příchuti, láhev 1,5 l, 10, 82, 0, 1); insert into ZBOZ values(1010, limo, 7UP, null, láhev 2 l, 33, 30, 0, 1); insert into ZBOZ values(1011, limo, Coca-cola, null, láhev 2 l, 36, 80, 0, 1); insert into ZBOZ values(1012, limo, Fanta divoká malina, limonáda s příchutí divoké maliny, láhev 2 l, 33, 20, 0, 1); insert into ZBOZ values(1013, limo, Fanta pomeranč, limonáda s příchutí pomeranče, láhev 2 l, 33, 42, 0, 1); insert into ZBOZ values(1014, limo, Fanta lemonic, limonáda s příchutí lemonic, láhev 2 l, 33, 0, 0, 0); insert into ZBOZ values(1015, pec, rohlík, null, ks, 3, 150, 0, 1); insert into ZBOZ values(1016, pec, toustový chléb, null, kg, 34, 20, 0, 1); 54

insert into ZBOZ values(1017, pec, chléb, null, kg, 25, 15, 0, 1); insert into ZBOZ values(1018, pec, houska, null, ks, 3.5, 110, 0, 1); Přílohy insert into ZBOZ values(1019, ovze, banán, null, kg, 43.5, 20, 0, 1); insert into ZBOZ values(1020, ovze, citron, null, kg, 28, 2, 0, 1); insert into ZBOZ values(1021, ovze, jablko červené, červené jablko, kg, 30, 10, 0, 1); insert into ZBOZ values(1022, ovze, jablko zelené, zelené jablko, kg, 32, 5, 0, 1); insert into ZBOZ values(1023, ovze, mango, null, kg, 75, 0, 0, 0); insert into ZBOZ values(1024, ovze, brambory, null, kg, 13, 25, 0, 1); insert into ZBOZ values(1025, ovze, okurka, salátová okurka, ks, 17.5, 0, 1, 1); insert into ZBOZ values(1026, ovze, rajská jablka, null, kg, 44.5, 2, 0, 1); 55

Skripty použité pro vytvoření zákazníků Přílohy insert into ZAK values ( novotny, Antonín, Novotný, Havlíčkova 139, 35103, Velká Hleďsebe, nov.ant@seznam.cz ); insert into ZAK values ( abraham, Karel, Abrahámek, Smetanova 70, 27351, Unhošť, abraham@centrum.cz ); insert into ZAK values ( rubek, Jiří, Rubek, Janošíkova 709, 64300, Brno - Chrlice, rubi@seznam.cz ); insert into ZAK values ( bohus, Bohuslav, Rejholec, Laudova 1014, 16300, Praha 6 - Řepy, rejholec@gmail.com ); insert into ZAK values ( masin, František, Mašín, Puškinova 591, 68201, Vyškov, franta.masin@seznam.cz ); insert into ZAK values ( novota, Blanka, Novotná, Mírové náměstí 55, 55001, Broumov, novota@atlas.cz ); insert into ZAK values ( vencka, Taťána, Vencová, Ovenecká 953, 17000, Praha 7 - Bubeneč, vencova@centrum.cz ); insert into ZAK values ( skocka, Zdena, Skočdopolová, Vokrojova 3378, 14300, Praha 4 - Modřany, skocdopolova@ce ntrum.cz ); insert into ZAK values ( janouskova, Denisa, Janoušková, Dvořákova 645, 60200, Brno, xjand05@vse.cz ); insert into ZAK values ( strakova, Miluše, Straková, Žehuňská 843, 19800, Praha 9 - Kyje, strakova.miluse@sezn am.cz ); insert into ZAK values ( krec, Tomáš, Křeč, M. Pujmannové 286, 54101, Trutnov, krecek@seznam.cz ); insert into ZAK values ( ilja, Ilja, Novák, Vokrojova 3384, 14300, Praha, ilja-novak@seznam.cz ); 56

Skripty použité pro vytvoření objednávek Přílohy insert into OBJ values (1, krec, 23112006, 25112006, o, 2, 3, Tomáš, Křeč, M. Pujmannové 286, 54101, Trutnov, null); insert into OBJ values (2, krec, 10122006, 12122006, o, 1, 1, Tomáš, Křeč, M. Pujmannové 286, 54101, Trutnov, null); insert into OBJ values (3, krec, 04012007, 11012007, o, 1, 2, Tomáš, Křeč, M. Pujmannové 286, 54101, Trutnov, null); insert into OBJ values (4, strakova, 10012007, 11012007, o, 1, 2, Miluše, Straková, Žehuňská 843, 19800, Praha 9 - Kyje, null); insert into OBJ values (5, krec, 30012007, 02022007, o, 2, 3, Tomáš, Křeč, M. Pujmannové 286, 54101, Trutnov, null); insert into OBJ values (6, krec, 30012007, 04022007, o, 1, 2, Tomáš, Křeč, Pražská 4, 54101, Trutnov, zásilku mi prosím dodejte v dopoledních hodinách ); insert into OBJ values (7, krec, 10022007, 12022007, o, 2, 3, Tomáš, Křeč, M. Pujmannové 286, 54101, Trutnov, null); insert into OBJ values (8, bohus, 12022007, 13022007, o, 2, 2, Bohuslav, Rejholec, Laudova 1014, 16300, Praha 6 - Řepy, null); insert into OBJ values (9, krec, 15042007, 15042007, o, 1, 1, Tomáš, Křeč, M. Pujmannové 286, 54101, Trutnov, null); insert into OBJ values (10, bohus, 15052007, 17052007, o, 2, 1, Bohuslav, Rejholec, Laudova 1014, 16300, Praha 6 - Řepy, null); insert into OBJ values (11, krec, 16052007, 16052007, o, 1, 1, Tomáš, Křeč, M. Pujmannové 286, 54101, Trutnov, null); insert into OBJ values (12, novota, 23082007, 25082007, o, 3, 4, Blanka, Novotná, Mírové náměstí 55, 55001, Broumov, null); 57

Přílohy insert into OBJ values (13, bohus, 10102007, 10102007, o, 3, 3, Bohuslav, Rejholec, Laudova 1014, 16300, Praha 6 - Řepy, null); insert into OBJ values (14, masin, 06012008, 07012008, o, 1, 4, František, Mašín, Puškinova 591, 68201, Vyškov, null); insert into OBJ values (15, bohus, 03022008, 04022008, o, 2, 2, Bohuslav, Rejholec, Laudova 1014, 16300, Praha 6 - Řepy, null); insert into OBJ values (16, novota, 12022008, 13022008, o, 1, 2, Blanka, Novotná, mírové náměstí 55, 55001, Broumov, Prosím o dodání ve večerních hodinách ); insert into OBJ values (17, masin, 13022008, 15022008, o, 3, 3, František, Mašín, Puškinova 591, 68201, Vyškov, null); insert into OBJ values (18, masin, 17042008, 19042008, o, 3, 4, František, Mašín, Puškinova 591, 68201, Vyškov, null); insert into OBJ values (19, vencka, 13052008, 16052008, o, 3, 3, Taťána, Vencová, Ovenecká 953, 17000, Praha 7, null); insert into OBJ values (20, masin, 10102008, 11102008, o, 1, 1, František, Mašín, Puškinova 591, 68201, Vyškov, null); insert into OBJ values (21, novota, 15102008, 16102008, o, 1, 4, Blanka, Novotná, Mírové náměstí 55, 55001, Broumov, null); insert into OBJ values (22, novota, 17112008, 21112008, o, 2, 2, Blanka, Novotná, Mírové náměstí 55, 55001, Broumov, null); insert into OBJ values (23, janouskova, 12122008, 15122008, o, 2, 1, Denisa, Janoušková, Dvořákova 645, 60200, Brno, null); insert into OBJ values (24, abraham, 23122008, 29122008, o, 3, 3, Karel, Abrahámek, Smetanova 70, 27351, Unhošť, null); insert into OBJ values (25, skocka, 06012009, 06012009, o, 1, 4, Zdena, Skočdopolová, Vokrojova 3378, 14300, Praha 4 - Modřany, null); 58