Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií
Student:
Filip Valoušek
Vedoucí bakalářské práce:
RNDr. Helena Palovská, Ph.D.
Recenzent bakalářské práce:
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:
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 - Návrh databáze
3.1
Konceptuální model
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 - Návrh databáze
3.2
Fyzický model
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 nap napAl pivo vino dest napNA minVo limo pec ovze
NADR (null) nap napAl napAl napAl nap napNA napNA (null) (null)
NAZEVK nápoje nápoje alkoholické pivo víno destiláty nápoje nealkoholické minerální vody limonády pečivo ovoce, zelenina
POPISK zboží, které lze pít alkohol piva různých druhů nejrůznější druhy vína tvrdý alkohol nápoje, které neobsahují alkohol pramenité minerální a stolní vody nealkoholické nápoje nejrůznějších příchutí chléb, housky, rohlíky, sladké pečivo atd. něco dobrého pro zdraví
tabulka 4-1 - kategorie zboží
12
KOD KAT NAZEV 1000 pivo Braník 1001 pivo Budějovický Budvar 1002 pivo Gambrinus světlý 1003 pivo Staropramen 1004 vino Frankovka 1005 vino Modrý Portugal 1006 vino Svatovavřinecké 1007 minVo Mattoni broskev 1008 minVo Mattoni 1009 minVo Poděbradka 1010 limo 7UP 1011 limo Coca-cola 1012 limo Fanta divoká malina 1013 limo Fanta pomeranč 1014 limo Fanta lemonic 1015 pec rohlík 1016 pec toustový chléb 1017 pec chléb 1018 pec houska 1019 ovze banán 1020 ovze citron 1021 ovze jablko červené 1022 ovze jablko zelené 1023 ovze mango 1024 ovze brambory 1025 ovze okurka 1026 ovze rajská jablka tabulka 4-2 - zboží
POPIS světlé pivo ve skle světlý ležák ve skle světlé pivo ve skle světlé pivo ve skle suché víno (null) suché víno minerální voda s příchutí broskve minerální voda bez příchuti minerální voda bez příchuti (null) (null) limonáda s příchutí divoké maliny limonáda s příchutí pomeranče limonáda s příchutí lemonic (null) (null) (null) (null) (null) (null) červené jablko zelené jablko (null) (null) salátová okurka (null)
JEDN láhev 0,5 l láhev 0,5 l láhev 0,5 l láhev 0,5 l láhev 0,75 l láhev 0,75 l láhev 0,75 l láhev 1,5 l láhev 1,5 l láhev 1,5 l láhev 2 l láhev 2 l láhev 2 l láhev 2 l láhev 2 l ks kg kg ks kg kg kg kg kg kg ks kg
CENA 11 20 15 12.5 65 86.5 56 15 13 10 33 36 33 33 33 3 34 25 3.5 43.5 28 30 32 75 13 17.5 44.5
SKLAD 100 250 200 0 10 1 0 20 120 82 30 80 20 42 0 150 20 15 110 20 2 10 5 0 25 0 2
DOSTUP 0 0 0 1 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
AKTIV 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1
4 - Data
13
LOGIN JMEN PRIJM novotny Antonín Novotný abraham Karel Abrahámek rubek Jiří Rubek bohus Bohuslav Rejholec masin František Mašín novota Blanka Novotná vencka Taťána Vencová skocka Zdena Skočdopolová janouskova Denisa Janoušková strakova Miluše Straková krec Tomáš Křeč ilja Ilja Novák tabulka 4-3 - zákazníci
ULIC Havlíčkova 139 Smetanova 70 Janošíkova 709 Laudova 1014 Puškinova 591 Mírové náměstí 55 Ovenecká 953 Vokrojova 3378 Dvořákova 645 Žehuňská 843 M. Pujmannové 286 Vokrojova 3384
PSC 35103 27351 64300 16300 68201 55001 17000 14300 60200 19800 54101 14300
MEST Velká Hleďsebe Unhošť Brno - Chrlice Praha 6 - Řepy Vyškov Broumov Praha 7 - Bubeneč Praha 4 - Modřany Brno Praha 9 - Kyje Trutnov Praha
EMAIL [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
4 - Data
14
krec
novota
bohus
masin
bohus
11
12
13
14
15
krec
7
bohus
krec
6
10
krec
5
krec
strakova 1/10/07
4
9
krec
3
bohus
krec
2
8
11/23/06
krec
1
15
2/3/08
1/6/08
10/10/07
8/23/07
5/16/07
5/15/07
4/15/07
2/12/07
2/10/07
1/30/07
1/30/07
1/4/07
12/10/06
DAT_OB
CISO ZAK
2/4/08
1/7/08
10/10/07
8/25/07
5/16/07
5/17/07
4/15/07
2/13/07
2/12/07
2/4/07
2/2/07
1/11/07
1/11/07
12/12/06
11/25/06
DAT_OD
o
o
o
o
o
o
o
o
o
o
o
o
o
o
o
STAV
2
1
3
3
1
2
1
2
2
1
2
1
1
1
2
2
4
3
4
1
1
1
2
3
2
3
2
2
1
3
Křeč
Pražská 4 M. PujmanTomáš Křeč nové 286 Bohu- Rejho- Laudova slav lec 1014 M. PujmanTomáš Křeč nové 286 Bohu- Rejho- Laudova slav lec 1014 M. PujmanTomáš Křeč nové 286 Novot- Mírové náBlanka ná městí 55 Bohu- Rejho- Laudova slav lec 1014 FrantiPuškinova šek Mašín 591 Bohu- Rejho- Laudova slav lec 1014
Tomáš
PRIJM ULIC M. PujmanTomáš Křeč nové 286 M. PujmanTomáš Křeč nové 286 M. PujmanTomáš Křeč nové 286 Strako- Žehuňská Miluše vá 843 M. PujmanTomáš Křeč nové 286
PLAT DOPR JMEN
16300
68201
16300
55001
54101
16300
54101
16300
54101
54101
54101
19800
54101
54101
54101
PSC
(null)
(null) zásilku mi prosím dodejte v dopoledních hodinách
(null)
(null)
(null)
(null)
POZN
(null)
(null)
(null)
(null) Praha 6 - Řepy (null)
Vyškov
Praha 6 - Řepy (null)
Broumov
Trutnov
Praha 6 - Řepy (null)
Trutnov
Praha 6 - Řepy (null)
Trutnov
Trutnov
Trutnov
Praha 9 - Kyje
Trutnov
Trutnov
Trutnov
MEST
4 - Data
vencka
masin
novota
novota janouskova
abraham 12/23/08
skocka
strakova 1/6/09
novota
novotny 1/24/09
bohus
19
20
21
22
24
25
26
27
28
29
16
30
23
masin
18
(null)
1/26/09
1/14/09
1/10/09
1/6/09
12/29/08
12/15/08
11/21/08
10/16/08
10/11/08
5/16/08
4/19/08
2/15/08
2/13/08
rubek 2/1/09 (null) tabulka 4-4 - objednávky
1/30/09
1/12/09
1/6/09
12/12/08
11/17/08
10/15/08
10/10/08
5/13/08
4/17/08
2/13/08
masin
17
2/12/08
novota
16
p
v
o
o
p
o
o
o
o
o
o
o
o
o
o
1
2
2
1
3
1
3
2
2
1
1
3
3
3
1
2
2
1
4
3
4
3
1
2
4
1
3
4
3
2
Jiří
Rubek
NovotBlanka ná František Mašín František Mašín VencoTaťána vá František Mašín NovotBlanka ná NovotBlanka ná JanoušDenisa ková AbraKarel hámek SkočdopoZdena lová StrakoMiluše vá NovotBlanka ná Anto- Novotnín ný Bohu- Rejhoslav lec Vokrojova 3378 Žehuňská 843 Mírové náměstí 55 Havlíčkova 139 Laudova 1014 Janošíkova 709
mírové náměstí 55 Puškinova 591 Puškinova 591 Ovenecká 953 Puškinova 591 Mírové náměstí 55 Mírové náměstí 55 Dvořákova 645 Smetanova 70
64300
16300
35103
55001
19800
14300
27351
60200
55001
55001
68201
17000
68201
68201
55001
(null)
(null)
(null)
(null)
(null)
(null)
(null)
(null)
Prosím o dodání ve večerních hodinách
(null)
(null)
(null)
Brno
(null)
Praha 6 - Řepy (null)
Broumov Velká Hleďsebe
Praha 9 - Kyje
Praha 4 - Modřany (null)
Unhošť
Brno
Broumov
Broumov
Vyškov
Praha 7
Vyškov
Vyškov
Broumov
4 - Data
4 - Data CISO 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 4 4 6 6 6 7 8 8 9 9 9 9 10 10 10 11 12 12 12 13 14 14 15
KOD 1000 1008 1015 1017 1009 1015 1017 1022 1024 1024 1025 1026 1023 1020 1019 1021 1000 1014 1010 1007 1009 1019 1004 1005 1006 1009 1009 1016 1000 1001 1002 1003 1026 1021 1011 1016 1021 1017 1011 1017 1000 1004 1010
MNOZ 5 2 20 1 6 10 1 1 2 10 5 5 0.5 1 3 2 4 3 5 10 2 1 2 1 4 1 6 1 10 10 5 10 1 0.5 1 50 2 2 2 1 20 2 5
VCENA 55 25.5 60 25 60 30 25 30 26 130 85 225 37.5 28 130.5 60 128 99 165 150 20 43.5 130 86.5 224 10 60 34 110 200 75 125 44.5 15 36 1700 60 50 72 25 220 130 165
15 16 16 16 16 16 17 18 18 19 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 24 24 24 25 25 26 27 28 29 30 30 30
1022 1007 1016 1018 1021 1025 1002 1005 1006 1008 1003 1015 1017 1025 1015 1018 1017 1024 1003 1013 1019 1025 1024 1026 1000 1008 1018 1026 1013 1020 1005 1020 1002 1006 1024 1017 1016
2 1 2 10 1 4 4 2 2 20 6 20 1 4 10 6 1 1 2 6 1 2 2 1 10 3 10 1 1 1 1 20 30 1 2 1 2
64 10 34 35 30 70 60 173 112 260 75 60 25 70 30 21 25 13 25 33 43.5 35 26 44.5 110 39 35 44.5 33 28 86.5 560 450 56 26 25 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 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026
NAZEV Braník Budějovický Budvar Gambrinus světlý Staropramen Frankovka Modrý Portugal Svatovavřinecké Mattoni broskev Mattoni Poděbradka 7UP Coca-cola Fanta divoká malina Fanta pomeranč Fanta lemonic rohlík toustový chléb chléb houska banán citron jablko červené jablko zelené mango brambory okurka 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 nap napAl pivo vino dest napNA minVo limo pec ovze
POPISK zboží, které lze pít alkohol piva různých druhů nejrůznější druhy vína tvrdý alkohol nápoje, které neobsahují alkohol pramenité minerální a stolní vody nealkoholické nápoje nejrůznějších příchutí chléb, housky, rohlíky, sladké pečivo atd. 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 Braník Budějovický Budvar Gambrinus světlý Staropramen Frankovka Modrý Portugal Svatovavřinecké Mattoni broskev Mattoni Poděbradka 7UP Coca-cola Fanta divoká malina Fanta pomeranč Fanta lemonic rohlík toustový chléb chléb houska banán citron jablko červené jablko zelené mango brambory okurka rajská jablka
CENA 11 20 15 12.5 65 86.5 56 15 13 10 33 36 33 33 33 3 34 25 3.5 43.5 28 30 32 75 13 17.5 44.5
CENA*1.15 12.65 23 17.25 14.375 74.75 99.475 64.4 17.25 14.95 11.5 37.95 41.4 37.95 37.95 37.95 3.45 39.1 28.75 4.025 50.025 32.2 34.5 36.8 86.25 14.95 20.125 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 Braník Budějovický Budvar Gambrinus světlý Staropramen Frankovka Modrý Portugal Svatovavřinecké Mattoni broskev Mattoni Poděbradka 7UP Coca-cola Fanta divoká malina Fanta pomeranč Fanta lemonic rohlík toustový chléb chléb houska banán citron jablko červené jablko zelené mango brambory okurka rajská jablka
CENA+20 31 40 35 32.5 85 106.5 76 35 33 30 53 56 53 53 53 23 54 45 23.5 63.5 48 50 52 95 33 37.5 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ÁKAZNÍK‘ Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník Zákazník
PRIJM krec krec krec strakova krec krec krec bohus krec bohus krec novota bohus masin bohus novota masin masin vencka masin novota novota janouskova abraham skocka strakova novota novotny bohus rubek
‚Z‘ z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z
MEST Trutnov Trutnov Trutnov Praha 9 - Kyje Trutnov Trutnov Trutnov Praha 6 - Řepy Trutnov Praha 6 - Řepy Trutnov Broumov Praha 6 - Řepy Vyškov Praha 6 - Řepy Broumov Vyškov Vyškov Praha 7 Vyškov Broumov Broumov Brno Unhošť Praha 4 - Modřany Praha 9 - Kyje Broumov Velká Hleďsebe Praha 6 - Řepy Brno
22
‚PROVEDL OBJEDNÁVKU DNE‘ provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne provedl objednávku dne
DAT_OB 11/23/06 12/10/06 1/4/07 1/10/07 1/30/07 1/30/07 2/10/07 2/12/07 4/15/07 5/15/07 5/16/07 8/23/07 10/10/07 1/6/08 2/3/08 2/12/08 2/13/08 4/17/08 5/13/08 10/10/08 10/15/08 11/17/08 12/12/08 12/23/08 1/6/09 1/6/09 1/12/09 1/24/09 1/30/09 2/1/09
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 Braník Budějovický Budvar Gambrinus světlý Staropramen Frankovka Modrý Portugal Svatovavřinecké Mattoni broskev Mattoni Poděbradka 7UP Coca-cola Fanta divoká malina Fanta pomeranč Fanta lemonic rohlík toustový chléb chléb houska banán citron jablko červené jablko zelené mango brambory okurka
CENA/2 5.5 10 7.5 6.25 32.5 43.25 28 7.5 6.5 5 16.5 18 16.5 16.5 16.5 1.5 17 12.5 1.75 21.75 14 15 16 37.5 6.5 8.75
23
5 - Dotazy do databáze 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 minVo ovze vino minVo pec ovze vino ovze minVo limo ovze pivo vino ovze pec ovze pivo pec ovze pivo pivo limo pec ovze
CENA 13 44.5 86.5 10 3.5 32 65 17.5 15 36 43.5 11 56 30 3 28 20 25 75 15 12.5 33 34 13
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 1 3 9 14 23 9 28 17 9 9 22 20 6 14 18 6 26 29 6 18 3 16 19 24 1 8 2 7 4 15 3 12 10 25 22 3 20 21 1 2
NAZEV Braník Braník Braník Braník Braník Budějovický Budvar Gambrinus světlý Gambrinus světlý Gambrinus světlý Staropramen Staropramen Staropramen Frankovka Frankovka Modrý Portugal Modrý Portugal Modrý Portugal Svatovavřinecké Svatovavřinecké Svatovavřinecké Mattoni broskev Mattoni broskev Mattoni Mattoni Mattoni Poděbradka Poděbradka Poděbradka Poděbradka 7UP 7UP Coca-cola Coca-cola Fanta pomeranč Fanta pomeranč Fanta lemonic rohlík rohlík rohlík rohlík
KAT pivo pivo pivo pivo pivo pivo pivo pivo pivo pivo pivo pivo vino vino vino vino vino vino vino vino minVo minVo minVo minVo minVo minVo minVo minVo minVo limo limo limo limo limo limo limo pec pec pec pec
16 11 30 8 21 20 13 12 2 30 1 16 24 21 22 4 3 27 3 25 10 3 16 12 2 15 3 21 2 23 3 30 22 20 16 3 3 10 24 23
26
toustový chléb toustový chléb toustový chléb toustový chléb chléb chléb chléb chléb chléb chléb chléb houska houska houska banán banán banán citron citron citron jablko červené jablko červené jablko červené jablko červené jablko zelené jablko zelené mango brambory brambory brambory brambory brambory okurka okurka okurka okurka rajská jablka rajská jablka rajská jablka rajská jablka
pec pec pec pec pec pec pec pec pec pec pec pec pec pec ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze 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 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 4 4 6 6 6 7 8 8 9 9 9 9 10 10 10 11 12 12 12 13
NAZEVK pivo minerální vody pečivo pečivo minerální vody pečivo pečivo ovoce, zelenina ovoce, zelenina pivo minerální vody limonády limonády ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina ovoce, zelenina minerální vody ovoce, zelenina víno víno víno minerální vody minerální vody pečivo pivo pivo pivo pivo limonády ovoce, zelenina ovoce, zelenina pečivo limonády pečivo ovoce, zelenina pečivo
14 14 15 15 16 16 16 16 16 17 18 18 19 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 24 24 24 25 25 26 27 28 29 30 30 30
27
pivo víno limonády ovoce, zelenina minerální vody pečivo pečivo ovoce, zelenina ovoce, zelenina pivo víno víno minerální vody pivo pečivo pečivo ovoce, zelenina pečivo pečivo pečivo ovoce, zelenina pivo limonády ovoce, zelenina ovoce, zelenina pivo ovoce, zelenina ovoce, zelenina minerální vody pečivo ovoce, zelenina limonády ovoce, zelenina víno ovoce, zelenina pivo víno pečivo pečivo 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 limo limo limo limo limo limo limo minVo minVo minVo minVo minVo minVo minVo minVo minVo ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze ovze
JMEN Bohuslav Tomáš Blanka Bohuslav Zdena Blanka Tomáš Blanka Tomáš Karel Taťána Tomáš Bohuslav Tomáš Miluše Tomáš Blanka Miluše Tomáš Blanka Zdena Tomáš Blanka Blanka Bohuslav Tomáš Bohuslav Tomáš Tomáš Jiří Denisa Blanka Tomáš Tomáš Blanka František Blanka Tomáš Karel Denisa
PRIJM Rejholec Křeč Novotná Rejholec Skočdopolová Novotná Křeč Novotná Křeč Abrahámek Vencová Křeč Rejholec Křeč Straková Křeč Novotná Straková Křeč Novotná Skočdopolová Křeč Novotná Novotná Rejholec Křeč Rejholec Křeč Křeč Rubek Janoušková Novotná Křeč Křeč Novotná Mašín Novotná Křeč Abrahámek Janoušková
ovze ovze pec pec pec pec pec pec pec pec pec pec pec pec pec pec pec pec pec pec pivo pivo pivo pivo pivo pivo pivo pivo pivo pivo pivo pivo vino vino vino vino vino vino vino vino
29
Bohuslav Tomáš Blanka František Tomáš Tomáš Jiří Blanka Tomáš Bohuslav Jiří Blanka František Bohuslav Blanka Tomáš Tomáš Karel Blanka Blanka Denisa František Tomáš Tomáš Tomáš Tomáš Antonín František Tomáš Blanka František Tomáš František Tomáš Miluše František Tomáš Bohuslav František Tomáš
Rejholec Křeč Novotná Mašín Křeč Křeč Rubek Novotná Křeč Rejholec Rubek Novotná Mašín Rejholec Novotná Křeč Křeč Abrahámek Novotná Novotná Janoušková Mašín Křeč Křeč Křeč Křeč Novotný Mašín Křeč Novotná Mašín Křeč Mašín Křeč Straková Mašín Křeč Rejholec Mašín 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 1015 1016 1017 1018 1000 1001 1002 1003
NAZEV rohlík toustový chléb chléb houska Braník Budějovický Budvar Gambrinus světlý 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 1007 1008 1009 1020 1024 1025 1015 1017 1018 1000 1001 1002 1003 1004 1006
CENA 15 13 10 28 13 17.5 3 25 3.5 11 20 15 12.5 65 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 Budějovický Budvar chléb citron jablko červené
CENA 20 25 28 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 1000 1001 1002 1003 1004 1006 1007 1008 1009 1012 1013 1014 1021 1022 1025
NAZEV Braník Budějovický Budvar Gambrinus světlý Staropramen Frankovka Svatovavřinecké Mattoni broskev Mattoni Poděbradka Fanta divoká malina Fanta pomeranč Fanta lemonic jablko červené jablko zelené 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
5 - Dotazy do databáze 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 Frankovka Modrý Portugal Svatovavřinecké 7UP Coca-cola Fanta divoká malina Fanta pomeranč Fanta lemonic toustový chléb banán jablko zelené mango rajská jablka
CENA 65 86.5 56 33 36 33 33 33 34 43.5 32 75 44.5
30. Vypište názvy zboží z kategorie ovoce, zelenina 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 limo limo limo limo limo minVo minVo minVo ovze ovze ovze ovze ovze ovze ovze ovze pec pec pec pec pivo pivo pivo pivo vino vino vino
CENA 36 33 33 33 33 15 13 10 75 44.5 43.5 32 30 28 17.5 13 34 25 3.5 3 20 15 12.5 11 86.5 65 56
NAZEV Coca-cola Fanta lemonic Fanta divoká malina 7UP Fanta pomeranč Mattoni broskev Mattoni Poděbradka mango rajská jablka banán jablko zelené jablko červené citron okurka brambory toustový chléb chléb houska rohlík Budějovický Budvar Gambrinus světlý Staropramen Braník Modrý Portugal Frankovka 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 rohlík houska chléb toustový chléb
CENA 3 3.5 25 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) 86.5
MIN(CENA) 3
40
5 - Dotazy do databáze 39. Vypište celkový počet objednávek a celkovou sumu cen na objednávkách select count(distinct CISO), sum (VCENA) from OBJ left join POLOZ using (CISO); COUNT(DISTINCT CISO) 30
SUM(VCENA) 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 limo minVo ovze pec pivo vino
AVG(CENA) 33.6 12.66666666666666666666666666666666666667 35.4375 16.375 14.625 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 ovoce, zelenina destiláty pivo pečivo nápoje alkoholické nápoje nealkoholické víno minerální vody limonády nápoje
COUNT(KOD) 8 0 4 4 0 0 3 3 5 0
SUM(CENA*1.1) 311.85 64.35 72.05
228.25 41.8 184.8
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 ovze ovze pec vino pec pivo minVo limo
JEDN kg ks ks láhev 0,75 l kg láhev 0,5 l láhev 1,5 l láhev 2 l
COUNT(*) 7 1 2 3 2 4 3 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 minVo pivo pec limo ovze vino
MAX(CENA) 15 20 34 36 75 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 pec vino ovze limo
POČET 1 3 4 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 7UP Fanta divoká malina Fanta pomeranč Fanta lemonic
CENA 33 33 33 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: SQL tutorial [on-line]. [2009]. Dostupný z WWW: Three schema approach [on-line]. [2009]. Dostupný z WWW:
47
Terminologický slovník
Terminologický slovník P3A Princip tří architektur SQL (Structured Standardizovaný strukturovaný jazyk používaný pro definici a manipulaci Query Language) 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
VARCHAR2(100)
POPISK
CLOB,
not null,
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
not null,
ZAK
not null,
VARCHAR2(30)
DAT_OB
DATE
DAT_OD
DATE,
STAV CHAR(1)
not null,
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) PRIJM
not null,
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
not null,
KOD
not null,
VARCHAR2(10)
MNOZ FLOAT VCENA
not null, 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)
JMEN VARCHAR2(50) PRIJM
not null,
not null,
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)
not null,
KAT
VARCHAR2(5)
not null,
NAZEV
VARCHAR2(100)
POPIS
CLOB,
not null,
JEDN VARCHAR2(20), CENA NUMBER(8,2)
not null,
SKLAD
FLOAT
not null,
DOSTUP
SMALLINT
not null,
AKTIV
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
Přílohy
Skripty použité pro vytvoření kategorií zboží 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
Přílohy
Skripty použité pro vytvoření zboží 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
Přílohy 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); 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
Přílohy
Skripty použité pro vytvoření zákazníků insert into ZAK values (‚novotny‘, ‚Antonín‘, ‚Novotný‘, ‚Havlíčkova 139‘, ‚35103‘, ‚Velká Hleďsebe‘, ‚[email protected]‘); insert into ZAK values (‚abraham‘, ‚Karel‘, ‚Abrahámek‘, ‚Smetanova 70‘, ‚27351‘, ‚Unhošť‘, ‚[email protected]‘); insert into ZAK values (‚rubek‘, ‚Jiří‘, ‚Rubek‘, ‚Janošíkova 709‘, ‚64300‘, ‚Brno - Chrlice‘, ‚[email protected]‘); insert into ZAK values (‚bohus‘, ‚Bohuslav‘, ‚Rejholec‘, ‚Laudova 1014‘, ‚16300‘, ‚Praha 6 - Řepy‘, ‚[email protected]‘); insert into ZAK values (‚masin‘, ‚František‘, ‚Mašín‘, ‚Puškinova 591‘, ‚68201‘, ‚Vyškov‘, ‚[email protected]‘); insert into ZAK values (‚novota‘, ‚Blanka‘, ‚Novotná‘, ‚Mírové náměstí 55‘, ‚55001‘, ‚Broumov‘, ‚[email protected]‘); insert into ZAK values (‚vencka‘, ‚Taťána‘, ‚Vencová‘, ‚Ovenecká 953‘, ‚17000‘, ‚Praha 7 - Bubeneč‘, ‚[email protected]‘); 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‘, ‚[email protected]‘); 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‘, ‚[email protected]‘); insert into ZAK values (‚ilja‘, ‚Ilja‘, ‚Novák‘, ‚Vokrojova 3384‘, ‚14300‘, ‚Praha‘, ‚[email protected]‘);
56
Přílohy
Skripty použité pro vytvoření objednávek 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
Přílohy insert into OBJ values (26, ‚strakova‘, ‚06012009‘, ‚10012009‘, ‚p‘, 3, 3, ‚Miluše‘, ‚Straková‘, ‚Žehuňská 843‘, ‚19800‘, ‚Praha 9 - Kyje‘, null); insert into OBJ values (27, ‚novota‘, ‚12012009‘, ‚14012009‘, ‚o‘, 1, 4, ‚Blanka‘, ‚Novotná‘, ‚Mírové náměstí 55‘, ‚55001‘, ‚Broumov‘, null); insert into OBJ values (28, ‚novotny‘, ‚24012009‘, ‚26012009‘, ‚o‘, 2, 1, ‚Antonín‘, ‚Novotný‘, ‚Havlíčkova 139‘, ‚35103‘, ‚Velká Hleďsebe‘, null); insert into OBJ values (29, ‚bohus‘, ‚30012009‘, null, ‚v‘, 2, 2, ‚Bohuslav‘, ‚Rejholec‘, ‚Laudova 1014‘, ‚16300‘, ‚Praha 6 Řepy‘, null); insert into OBJ values (30, ‚rubek‘, ‚01022009‘, null, ‚p‘, 1, 2, ‚Jiří‘, ‚Rubek‘, ‚Janošíkova 709‘, ‚64300‘, ‚Brno‘, null);
59
Přílohy
Skripty použité pro vytvoření položek objednávek insert into POLOZ values(1, 1000, 5, 55); insert into POLOZ values(1, 1008, 2, 25.5); insert into POLOZ values(1, 1015, 20, 60); insert into POLOZ values(1, 1017, 1, 25); insert into POLOZ values(2, 1009, 6, 60); insert into POLOZ values(2, 1015, 10, 30); insert into POLOZ values(2, 1017, 1, 25); insert into POLOZ values(2, 1022, 1, 30); insert into POLOZ values(2, 1024, 2, 26); insert into POLOZ values(3, 1024, 10, 130); insert into POLOZ values(3, 1025, 5, 85); insert into POLOZ values(3, 1026, 5, 225); insert into POLOZ values(3, 1023, 0.5, 37.5); insert into POLOZ values(3, 1020, 1, 28); insert into POLOZ values(3, 1019, 3, 130.5); insert into POLOZ values(3, 1021, 2, 60); insert into POLOZ values(3, 1000, 4, 128); insert into POLOZ values(3, 1014, 3, 99); insert into POLOZ values(3, 1010, 5, 165); insert into POLOZ values(3, 1007, 10, 150); insert into POLOZ values(4, 1009, 2, 20); insert into POLOZ values(4, 1019, 1, 43.5); insert into POLOZ values(6, 1004, 2, 130); insert into POLOZ values(6, 1005, 1, 86.5); insert into POLOZ values(6, 1006, 4, 224); insert into POLOZ values(7, 1009, 1, 10); insert into POLOZ values(8, 1009, 6, 60); 60
Přílohy insert into POLOZ values(8, 1016, 1, 34); insert into POLOZ values(9, 1000, 10, 110); insert into POLOZ values(9, 1001, 10, 200); insert into POLOZ values(9, 1002, 5, 75); insert into POLOZ values(9, 1003, 10, 125); insert into POLOZ values(10, 1026, 1, 44.5); insert into POLOZ values(10, 1021, 0.5, 15); insert into POLOZ values(10, 1011, 1, 36); insert into POLOZ values(11, 1016, 50, 50*34); insert into POLOZ values(12, 1021, 2, 60); insert into POLOZ values(12, 1017, 2, 50); insert into POLOZ values(12, 1011, 2, 72); insert into POLOZ values(13, 1017, 1, 25); insert into POLOZ values(14, 1000, 20, 220); insert into POLOZ values(14, 1004, 2, 130); insert into POLOZ values(15, 1010, 5, 165); insert into POLOZ values(15, 1022, 2, 64); insert into POLOZ values(16, 1007, 1, 10); insert into POLOZ values(16, 1016, 2, 34); insert into POLOZ values(16, 1018, 10, 35); insert into POLOZ values(16, 1021, 1, 30); insert into POLOZ values(16, 1025, 4, 70); insert into POLOZ values(17, 1002, 4, 60); insert into POLOZ values(18, 1005, 2, 2*86.5); insert into POLOZ values(18, 1006, 2, 112); insert into POLOZ values(19, 1008, 20, 260); insert into POLOZ values(20, 1003, 6, 6*12.5); insert into POLOZ values(20, 1015, 20, 60); insert into POLOZ values(20, 1017, 1, 25); 61
Přílohy insert into POLOZ values(20, 1025, 4, 4*17.5); insert into POLOZ values(21, 1015, 10, 30); insert into POLOZ values(21, 1018, 6, 21); insert into POLOZ values(21, 1017, 1, 25); insert into POLOZ values(21, 1024, 1, 13); insert into POLOZ values(22, 1003, 2, 25); insert into POLOZ values(22, 1013, 6, 33); insert into POLOZ values(22, 1019, 1, 43.5); insert into POLOZ values(22, 1025, 2, 35); insert into POLOZ values(23, 1024, 2, 26); insert into POLOZ values(23, 1026, 1, 44.5); insert into POLOZ values(23, 1000, 10, 110); insert into POLOZ values(24, 1008, 3, 39); insert into POLOZ values(24, 1018, 10, 35); insert into POLOZ values(24, 1026, 1, 44.5); insert into POLOZ values(25, 1013, 1, 33); insert into POLOZ values(25, 1020, 1, 28); insert into POLOZ values(26, 1005, 1, 86.5); insert into POLOZ values(27, 1020, 20, 20*28); insert into POLOZ values(28, 1002, 30, 450); insert into POLOZ values(29, 1006, 1, 56); insert into POLOZ values(30, 1024, 2, 26); insert into POLOZ values(30, 1017, 1, 25); insert into POLOZ values(30, 1016, 2, 68);
62