Stručný obsah Úvod
K1733.indd 3
25
ČÁST I Úvod do SQL 1. Seznámení s jazykem SQL 2. Začínáme s dotazy 3. Výrazy, podmínky a operátory 4. Klauzule v dotazech jazyka SQL 5. Spojování tabulek 6. Vkládání poddotazů do dotazů 7. Formování dat pomocí vestavěných funkcí
29 31 45 61 103 135 161 185
ČÁST II Návrh databáze 8. Normalizace databáze 9. Tvorba a údržba tabulek 10. Řízení integrity dat
229 231 241 263
ČÁST III Manipulace s daty 11. Manipulace s daty 12. Datum a čas v jazyku SQL 13. Tvorba pohledů 14. Řízení transakcí
279 281 303 321 341
ČÁST IV Administrace databáze 15. Tvorba indexů na tabulkách pro zlepšení výkonu 16. Racionalizace příkazů jazyka SQL pro zlepšení výkonu 17. Databázová bezpečnost 18. Datový slovník (systémový katalog)
355 357 373 393 413
18.1.2010 16:17:14
4
K1733.indd 4
Stručný obsah
ČÁST V Další SQL objekty 19. Dočasné tabulky, uložené procedury, spouštěče a kurzory 20. Nové objekty v současném standardu
439 441 459
ČÁST VI Pokročilé techniky SQL 21. Generování příkazů jazyka SQL pomocí jazyka SQL 22. Tvorba komplexních dotazů jazyka SQL 23. Ladění příkazů jazyka SQL 24. Vkládání kódu jazyka SQL při programování aplikací
473 475 497 515 535
ČÁST VII SQL v různých databázových implementacích 25. Použití nástroje SQL*Plus databázového systému Oracle pro generování zpráv 26. Úvod do jazyka PL/SQL databázového systému Oracle 27. Seznámení s jazykem Transact-SQL 28. Databázový systém MySQL na unixovém systému
547 585 613 635
ČÁST VIII Přílohy A. Odpovědi B. Ukázky kódu pro vytvoření tabulek C. Ukázky kódu pro naplnění tabulek D. Instalace databázového systému MySQL pro cvičení E. Přehled nejčastěji používaných příkazů jazyka SQL F. Přehled nejčastěji používaných funkcí jazyka SQL
647 649 677 689 703 705 711
545
18.1.2010 16:17:14
Obsah O autorech Věnování Poděkování Poznámka redakce českého vydání
Úvod
23 24 24 24
25
Komu je kniha určena Uspořádání knihy Použité konvence Praktická cvičení v databázovém systému MySQL Zdrojový kód
25 25 26 27 27
ČÁST I Úvod do SQL LEKCE 1 Seznámení s jazykem SQL Stručná historie jazyka SQL Stručná historie databází Současná podoba databází Jazyk pro více produktů Prvotní implementace Jazyk SQL a vývoj aplikací typu klient-server
Přehled jazyka SQL Populární implementace jazyka SQL MySQL Oracle Microsoft SQL Server a Sybase IBM DB2
ODBC Pozice kódu jazyka SQL ve vytvářené aplikaci Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
K1733.indd 5
31 31 32 36 37 37 38
38 39 39 39 40 40
40 41 43 43 44 44 44
18.1.2010 16:17:14
6
Obsah
LEKCE 2 Začínáme s dotazy Pozadí jazyka SQL Osvojení základní syntaxe dotazů Stavební bloky pro získávání dat: SELECT a FROM Dotazy v praxi Píšeme první dotaz Ukončení příkazu jazyka SQL Vybírání jednotlivých sloupců Změna pořadí sloupců Vybírání jiných tabulek
Vybírání odlišných hodnot Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
45 45 47 48 49 50 51 51 53
54 56 56 56 58 59
LEKCE 3 Výrazy, podmínky a operátory
61
Pracujeme s dotazovými výrazy Podmínky v dotazech Jak používat operátory
61 62 63
Aritmetické operátory Porovnávací operátory Znakové operátory Logické operátory Množinové operátory Ostatní operátory: IN a BETWEEN
Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 4 Klauzule v dotazech jazyka SQL Specifikace kritérií pomocí klauzule WHERE Klauzule ORDER BY Klauzule GROUP BY Klauzule HAVING
K1733.indd 6
45
64 75 83 89 93 97
99 99 100 101 101
103 104 106 115 121
18.1.2010 16:17:14
Obsah
Kombinování klauzulí Příklad 4.1 Příklad 4.2 Příklad 4.3 Příklad 4.4
Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 5 Spojování tabulek Spojování více tabulek v jediném příkazu SELECT Křížové spojování tabulek Hledání správného sloupce
Spojování tabulek na základě rovnosti Spojování tabulek na základě nerovnosti Vnější a vnitřní spojení Spojení tabulky se sebou Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 6 Vkládání poddotazů do dotazů Sestavujeme poddotazy Agregační funkce v poddotazech Vnořování poddotazů Vnější reference s korelovanými poddotazy Klíčová slova EXISTS, ANY a ALL Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
K1733.indd 7
7
127 127 128 128 130
132 132 132 133 133
135 135 136 141
142 149 151 155 157 157 158 159 160
161 163 168 170 173 176 181 181 182 182 183
18.1.2010 16:17:14
8
Obsah
LEKCE 7 Formování dat pomocí vestavěných funkcí Agregační funkce pro sumarizaci dat Funkce COUNT Funkce SUM Funkce AVG Funkce MAX Funkce MIN Funkce VARIANCE Funkce STDDEV
185 186 186 188 189 189 190 191
Funkce pro formátování data a času
192
Funkce ADD_MONTHS/DATE_ADD Funkce LAST_DAY Funkce MONTHS_BETWEEN Funkce NEXT_DAY Funkce SYSDATE
192 194 195 196 197
Funkce pro aritmetické operace Funkce ABS Funkce CEIL a FLOOR Funkce EXP Funkce LN a LOG Funkce MOD Funkce POWER Funkce SIGN Funkce SQRT
Funkce pro změnu vzhledu znakových hodnot Funkce CHR Funkce CONCAT Funkce INITCAP Funkce LOWER a UPPER Funkce LPAD a RPAD Funkce LTRIM a RTRIM Funkce REPLACE Funkce SUBSTR Funkce TRANSLATE Funkce INSTR Funkce LENGTH
Převodní funkce Funkce TO_CHAR Funkce TO_NUMBER
Ostatní funkce
K1733.indd 8
185
198 198 199 200 200 201 202 202 203
204 204 204 206 206 207 208 209 211 215 215 216
216 217 218
218
18.1.2010 16:17:14
Obsah
Funkce GREATEST a LEAST Funkce USER
9
218 219
Doplňující příklady znakových funkcí databázového systému MySQL Funkce LENGTH Funkce LOCATE Funkce INSTR Funkce LPAD Funkce RPAD Funkce LEFT Funkce RIGHT Funkce SUBSTRING Funkce LTRIM Funkce RTRIM Funkce TRIM
219 220 220 220 220 221 221 221 221 222 222 222
Doplňující příklady funkcí databázového systému MySQL pro práci s datem Funkce DATE_FORMAT Funkce TIME_FORMAT Funkce CURDATE Funkce CURTIME
222 223 224 224 224
Shrnutí Otázky a odpovědi Úkoly pro vás
224 225 225
Kvíz Cvičení
226 227
ČÁST II Návrh databáze LEKCE 8 Normalizace databáze Normalizace databáze Holá databáze Logický návrh databáze Potřeby koncového uživatele Redundance dat
Normální formy První normální forma Druhá normální forma Třetí normální forma
Normalizace v praxi Referenční integrita
Výhody normalizace
K1733.indd 9
231 231 231 231 232 232
233 233 234 235
236 236
237
18.1.2010 16:17:14
10
Obsah
Nevýhody normalizace Denormalizace databáze Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 9 Tvorba a údržba tabulek Začínáme příkazem CREATE DATABASE
239 239
241 241
Možnosti příkazu CREATE DATABASE Návrh databáze Tvorba datového slovníku (systémového katalogu) Tvorba klíčových polí Rozbití dat
242 243 244 245 245
Definování tabulek pomocí příkazu CREATE TABLE
246
Název tabulky Název pole Datové typy pole Umístění a velikost tabulky Vytvoření tabulky ze stávající tabulky
Změna struktury tabulky pomocí příkazu ALTER TABLE Příkaz DROP TABLE Příkaz DROP DATABASE Práce s příkazy DROP TABLE a DROP DATABASE
Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 10 Řízení integrity dat
247 247 247 252 253
255 258 259 259
259 259 260 260 261
263
Seznámení s omezeními
263
Integrita dat Proč používat omezení
263 264
Typy omezení Omezení NOT NULL Omezení ve formě primárního klíče Omezení ve formě jedinečnosti
K1733.indd 10
237 238 238 239 239
264 265 266 268
18.1.2010 16:17:14
Obsah
Omezení ve formě cizího klíče Omezení ve formě kontroly
Správa omezení
11
269 270
272
Správné pořadí omezení Různé přístupy ke tvorbě omezení Ukázková hlášení referenční integrity databázového systému Oracle
Shrnutí Otázky a odpovědi Úkoly pro vás
272 273 273
276 277 277
Kvíz Cvičení
278 278
ČÁST III Manipulace s daty LEKCE 11 Manipulace s daty Seznámení s příkazy pro manipulaci s daty Zadávání dat pomocí příkazu INSERT Zadávání jednoho záznamu pomocí příkazu INSERT...VALUES Vkládání hodnot NULL Vkládání jedinečných hodnot Zadávání většího počtu záznamů pomocí příkazu INSERT...SELECT
Modifikace stávajících dat pomoc příkazu UPDATE Odstraňování informací pomocí příkazu DELETE Importování a exportování dat z cizích zdrojů Microsoft Access Microsoft SQL Server Oracle MySQL
Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
281 281 282 282 284 285 286
289 292 296 296 297 298 298
299 299 300 300 301
LEKCE 12 Datum a čas v jazyku SQL
303
Způsob uložení data a času
303
Datové typy standardu ANSI pro datum a čas Prvky datového typu DATETIME Implementace specifických datových typů
K1733.indd 11
303 304 304
18.1.2010 16:17:15
12
Obsah
Aplikace funkcí pro práci s časem v dotazech
305
Aktuální datum Časová pásma Přičítání času ke kalendářním datům Odečítání kalendářních dat Porovnávání datových a časových období Další funkce pro práci s datem
305 307 307 309 311 311
Převod mezi formáty kalendářních dat Datové obrazy Převod kalendářních dat na znakové řetězce Převod znakových řetězců na kalendářní data
Shrnutí Otázky a odpovědi Úkoly pro vás
313 315 316
317 317 317
Kvíz Cvičení
318 318
LEKCE 13 Tvorba pohledů
321
Seznámení s pohledy Používáme pohledy Jednoduchý pohled Přejmenování sloupců Zpracování pohledů Omezení klauzule SELECT Modifikace dat v pohledu Nejčastější využití pohledů Odstranění pohledu příkazem DROP VIEW
Shrnutí Otázky a odpovědi Úkoly pro vás
321 322 324 326 327 331 331 334 337
338 338 339
Kvíz Cvičení
339 339
LEKCE 14 Řízení transakcí
341
Správa transakcí Bankovní aplikace Zahájení transakce Dokončení transakce Zrušení transakce
K1733.indd 12
312
341 342 343 345 347
18.1.2010 16:17:15
Obsah
Záchytné body transakce Shrnutí Otázky a odpovědi Úkoly pro vás
13
350 352 353 353
Kvíz Cvičení
353 353
ČÁST IV Administrace databáze LEKCE 15 Tvorba indexů na tabulkách pro zlepšení výkonu Seznámení s indexy Rady pro práci s indexy Vytváření indexů na více než jednom poli
Klíčové slovo UNIQUE v příkazu CREATE INDEX Indexy a spojování tabulek Klastrované indexy Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 16 Racionalizace příkazů jazyka SQL pro zlepšení výkonu Pište příkazy jazyka SQL čitelně Nepoužívejte skenování celé tabulky Přidání nového indexu Uspořádání prvků v dotazu Procedury Nepoužívejte operátor OR
OLAP a OLTP Dolaďování systému OLTP Dolaďování systému OLAP
Dávkové zátěže a transakční zpracování Optimalizace načítání dat zahozením indexů Příkaz COMMIT Přestavování tabulek a indexů v dynamickém prostředí Dolaďování databáze Identifikování výkonnostních překážek
K1733.indd 13
357 357 365 365
368 369 370 371 371 371 371 372
373 374 375 375 376 378 378
379 380 380
380 382 382 384 385 388
18.1.2010 16:17:15
14
Obsah
Použití vestavěných dolaďovacích nástrojů Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 17 Databázová bezpečnost Role bezpečnosti při správě databáze Oblíbené databázové produkty a bezpečnost Bezpečnost v databázových systémech Oracle Express a MySQL Tvorba uživatelů Tvorba rolí Uživatelská oprávnění Použití pohledů pro účely zabezpečení Synonyma místo pohledů Řešení bezpečnostních problémů pomocí pohledů Klauzule WITH GRANT OPTION
Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 18 Datový slovník (systémový katalog) Seznámení s datovým slovníkem Identifikování uživatelů datového slovníku Obsah datového slovníku Datový slovník databázového systému Oracle Datový slovník databázového systému MySQL
Pohled do datového slovníku databázového systému Oracle Pohledy pro uživatele Pohledy pro správce databáze Pohledy dynamického výkonu
390 391
393 393 394 395 395 397 399 406 407 408 409
410 410 411 411 411
413 413 414 414 415 415
415 416 423 431
Pohled do datového slovníku databázového systému MySQL
432
Příkazy pro zobrazení tabulek v databázovém systému MySQL Databáze INFORMATION_SCHEMA
433 433
Shrnutí Otázky a odpovědi
K1733.indd 14
389 389 390 390
435 436
18.1.2010 16:17:15
Obsah
15
Úkoly pro vás
436
Kvíz Cvičení
436 437
ČÁST V Další SQL objekty LEKCE 19 Dočasné tabulky, uložené procedury, spouštěče a kurzory Vytváříme dočasné tabulky Používáme kurzory Vytvoření kurzoru Otevření kurzoru Posouvání kurzoru Testování stavu kurzoru Uzavření kurzoru Rozsah platnosti kurzorů
Vytváříme a používáme uložené procedury Odstranění uložené procedury
441 445 446 446 446 447 448 448
449 450
Navrhujeme a používáme spouštěče Spouštěče a transakce
451 452
Omezení při používání spouštěčů Vnořené spouštěče
453 453
Používáme vložený kód jazyka SQL Statický a dynamický kód jazyka SQL
Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 20 Nové objekty v současném standardu Příkaz CREATE ROLE Tvorba spouštěčů Příkaz CREATE TYPE Regulární výrazy Datový typ BLOB Krátký příklad kódu jazyka XML Shrnutí Otázky a odpovědi
K1733.indd 15
441
453 454
455 456 456 456 457
459 459 461 463 467 468 469 470 470
18.1.2010 16:17:15
16
Obsah
Úkoly pro vás
470
Kvíz Cvičení
471 471
ČÁST VI Pokročilé techniky SQL LEKCE 21 Generování příkazů jazyka SQL pomocí jazyka SQL Generování příkazů jazyka SQL Nové povely nástroje SQL*Plus Povel SET ECHO Povel SET FEEDBACK Povel SET HEADING Povel SPOOL Povel START Povel EDIT
Počítání řádků v tabulkách Udělení systémových práv více uživatelům Udělení práv na vlastní tabulky jinému uživateli Deaktivace omezení tabulky kvůli načtení dat Tvorba více synonym jednou ranou Tvorba pohledů na svých tabulkách Vyprázdnění všech tabulek v daném schématu Generování systémových skriptů pomocí jazyka SQL Praktická aplikace generování kódu jazyka SQL a dalších principů Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 22 Tvorba komplexních dotazů jazyka SQL Příkazy CREATE TABLE Příklady složitých dotazů Výpočet věku z data narození Rozdělení části dne na hodiny, minuty a vteřiny Převod bajtů na kilobajty a megabajty Zpráva o fragmentaci databáze Poddotazy v jazyku DML
K1733.indd 16
475 475 476 477 477 477 477 478 478
478 482 484 486 487 490 491 492 493 494 494 495 495 496
497 497 500 500 501 503 504 504
18.1.2010 16:17:15
Obsah
Formátování kalendářních dat Poddotaz zahrnující maximální hodnotu Více poddotazů Formátování číselných hodnot pomocí lomítek a mezer Zvyšování číselných hodnot o zadaný podíl Zjištění další nejvyšší hodnoty ve sloupci Práce s hodnotami NULL
Tipy pro sestavování komplexních dotazů Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 23 Ladění příkazů jazyka SQL Běžné chyby v příkazech jazyka SQL Neexistující tabulka či pohled Neplatné uživatelské jméno nebo heslo Chybí klíčové slovo FROM Nesprávně použitá seskupující funkce Neplatný název sloupce Chybějící klíčové slovo Chybějící levá závorka Chybějící pravá závorka Chybějící čárka Nejednoznačně definovaný sloupec Nesprávně ukončený příkaz jazyka SQL Chybějící výraz Nedostatek argumentů pro funkci Nedostatek hodnot Porušení integritního omezení – rodičovský klíč nenalezen Databáze Oracle není k dispozici Vkládaná hodnota je pro sloupec příliš velká TNS: Posluchač nemohl vyhodnotit identifikátor SID uvedený v deskriptoru připojení Nedostatečné právo pro udělování práv Přepínací znak v příkazu – neplatný znak Nelze vytvořit soubor operačního systému
K1733.indd 17
17
505 506 507 507 508 508 510
512 513 513 514 514 514
515 515 515 516 516 517 518 519 519 520 520 521 521 522 522 523 523 524 524 525 525 525 526
18.1.2010 16:17:15
18
Obsah
Běžné logické chyby Rezervovaná slova v příkazech jazyka SQL Příkaz DISTINCT při výběru více sloupců Zahození nekvalifikované tabulky Veřejná synonyma v databázi s více schématy Obávaný kartézský součin Neschopnost prosadit vstupní standardy Neschopnost prosadit konvence v oblasti struktury systému souborů Rozsáhlé tabulky a výchozí parametry úložiště Umisťování objektů do systémového prostoru tabulek Neschopnost zkomprimovat rozsáhlé soubory zálohy Neschopnost rozplánovat systémové prostředky
Jak se vyhnout problémům s daty Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 24 Vkládání kódu jazyka SQL při programování aplikací Letmý pohled na několik nástrojů pro vývoj aplikací ODBC Oracle Express SQL v jazyku Java přes rozhraní JDBC SQL v prostředí .NET přes rozhraní OleDB Přípravy pro databázový systém Oracle
Tvorba databáze Jazyk SQL v prostředí Javy Jazyk SQL v prostředí .NET Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
K1733.indd 18
526 526 527 527 528 528 529 529 529 530 531 531
531 531 532 532 532 533
535 535 535 536 536 536 536
537 540 542 543 543 544 544 544
18.1.2010 16:17:16
Obsah
19
ČÁST VII SQL v různých databázových implementacích LEKCE 25 Použití nástroje SQL*Plus databázového systému Oracle pro generování zpráv
547
Seznámení s nástrojem SQL*Plus Paměť nástroje SQL*Plus Zobrazení struktury tabulky pomocí příkazu DESCRIBE Zobrazení nastavení pomocí příkazu SHOW Souborové příkazy pro manipulaci se soubory
547 547 552 553 554
Příkazy SAVE, GET a EDIT Zahájení souboru Nasměrování výstupu dotazu
Přizpůsobení pracovního prostředí pomocí příkazů SET Vynulování nastavení příkazem CLEAR Formátování výstupu
558 561 561
TTITLE a BTITLE Formátování sloupců (COLUMN, HEADING, FORMAT)
561 562
Tvorba zprávy a skupinových souhrnů Příkaz BREAK ON Příkaz COMPUTE
564 564 565
Proměnné v nástroji SQL*Plus
567
Substituční proměnné (&) Příkaz DEFINE Příkaz ACCEPT Povel NEW_VALUE
568 568 569 571
Tabulka DUAL Funkce DECODE Převody kalendářních dat Spuštění série souborů s kódem jazyka SQL Komentáře ve skriptech jazyka SQL Tvorba pokročilých zpráv Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
K1733.indd 19
554 555 556
572 573 575 578 579 580 581 582 582 582 582
18.1.2010 16:17:16
20
Obsah
LEKCE 26 Úvod do jazyka PL/SQL databázového systému Oracle Seznámení s jazykem PL/SQL Struktura bloku jazyka PL/SQL Oddíl DECLARE Oddíl PROCEDURE Oddíl EXCEPTION
Řízení transakcí v jazyku PL/SQL Praktické příklady Ukázkové tabulky a data Jednoduchý blok jazyka PL/SQL Rozvinutější příklad bloku jazyka PL/SQL
Používáme uložené procedury, balíčky a spouštěče Ukázková procedura Ukázkový balíček Ukázkový spouštěč
Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
LEKCE 27 Seznámení s jazykem Transact-SQL Přehled jazyka Transact-SQL Rozšíření standardu ANSI SQL Kdo může používat jazyk Transact-SQL Základní prvky jazyka Transact-SQL
Datové typy
585 586 587 590 595
598 598 599 599 602
606 606 607 608
610 610 611 611 611
613 613 614 614 614
614
Znakové řetězce Číselné datové typy Datové typy pro práci s kalendářním datem Datové typy pro práci s finančními částkami Binární řetězce Logický datový typ bit
615 615 615 615 616 616
Přístup k databázi pomocí jazyka Transact-SQL
616
Databáze BASEBALL Tabulka BATTERS Tabulka PITCHERS Tabulka TEAMS Deklarace lokálních proměnných
K1733.indd 20
585
617 617 618 618 619
18.1.2010 16:17:16
Obsah
Deklarace globálních proměnných Praktické použití proměnných Příkaz PRINT
Řízení toku programu
619 621 622
623
Příkazy BEGIN a END Příkazy IF...ELSE Podmínka EXISTS Testování výsledku dotazu Cyklus WHILE Příkaz BREAK Příkaz CONTINUE Průchod tabulkou pomocí cyklu WHILE
623 623 625 626 626 627 627 628
Zástupné symboly v jazyku Transact-SQL Převody kalendářních dat Příkazy SET jakožto diagnostické nástroje Shrnutí Otázky a odpovědi Úkoly pro vás
629 630 631 631 631 632
Kvíz Cvičení
LEKCE 28 Databázový systém MySQL na unixovém systému Správa databázového systému MySQL Instalace databázového systému MySQL Spuštění a zastavení databázového systému MySQL Počáteční práva v databázového systému MySQL
Terminálový monitor databázového systému MySQL Připojení k databázi Volby příkazového řádku Zadávání příkazů monitoru databázového systému MySQL Historie příkazového řádku Dávkový režim Příkaz SHOW
Pomocné nástroje databázového systému MySQL Shrnutí Otázky a odpovědi Úkoly pro vás Kvíz Cvičení
K1733.indd 21
21
632 632
635 635 636 637 637
638 638 639 641 643 643 644
645 645 646 646 646 646
18.1.2010 16:17:16
22
Obsah
ČÁST VIII Přílohy PŘÍLOHA A Odpovědi
649
PŘÍLOHA B Ukázky kódu pro vytvoření tabulek
677
PŘÍLOHA C Ukázky kódu pro naplnění tabulek
689
PŘÍLOHA D Instalace databázového systému MySQL pro cvičení
703
Pokyny pro instalaci v systému Windows Pokyny pro instalaci v systému Linux
PŘÍLOHA E Přehled nejčastěji používaných příkazů jazyka SQL
705
PŘÍLOHA F Přehled nejčastěji používaných funkcí jazyka SQL
711
Řetězcové funkce Číselné funkce Agregační funkce Funkce pro práci s datem a časem
Rejstřík
K1733.indd 22
703 704
711 713 713 714
715
18.1.2010 16:17:16
O autorech Již více než 10 let se autoři věnují studiu, aplikaci a dokumentaci standardu jazyka SQL a jeho praktického použití na kritické databázové systémy v této knize. Ryan Stephens a Ron Plew jsou provozovateli, mluvčími a spoluzakladateli rychle se rozvíjející firmy Perpetual Technologies, Inc. (PTI), která se orientuje na management a poradenství v oblasti informačních technologií. Společnost PTI se specializuje na databázové technologie, především pak na databázové systémy Oracle a SQL Server provozované na platformách UNIX, Linux a Microsoft. Oba autoři začínali jako analytici dat a správci databáze a nyní vedou tým skvělých odborníků, kteří se starají o databáze klientů po celém světě. Vytvořili kurzy databází pro univerzitu Purdue v Indianapolis a pět let je vyučovali a napsali více než desítku knih o databázovém systému Oracle, jazyku SQL, návrhu databází a o zajištění vysoké dostupnosti kritických systémů. Arie D. Jones je hlavním konzultantem společnosti Microsoft pro firmu PTI. Vede tým společnosti PTI složený z expertů na plánování, návrh, vývoj, nasazení a správu databázových prostředí a aplikací s cílem dosáhnout pro každého z klientů co nejlepší kombinace nástrojů a služeb. Pravidelně přednáší na setkání odborníků a napsal několik knih a článků, v nichž se věnuje tématům souvisejícím s databázemi. Jeho nejnovější kniha vydaná nakladatelstvím Wrox Publishing nese název „SQL Functions Programmer’s Reference“ (Funkce jazyka SQL – příručka programátora).
K1733.indd 23
18.1.2010 16:17:16
Věnování Tato kniha je věnována mým rodičům, Thomasu a Karlyn Stephensovým, kteří mě vždy vedli k tomu, že pokud budu chtít, tak dosáhnu čehokoliv. Tato kniha je věnována také mému úžasnému synu Danielovi a mým nádherným dcerám Autumn a Alivii – nikdy se nespokojte s ničím menším než se svými sny. —Ryan Tato kniha je věnována mé rodině: mé ženě Lindě, mé matce Betty, mým dětem Leslie, Nancy, Angele a Wendy, mým vnukům Andymu, Ryanovi, Holly, Morgan, Schyler, Heather, Gavinovi, Regan, Caleigh a Cameron a mým zeťům Jasonovi a Dallasovi. Děkuji vám, že jste se mnou během tohoto rušného období měli trpělivost. Všechny vás mám rád. —Poppy Tuto knihu bych rád věnoval mé ženě Jackie za to, že mi během těch dlouhých hodin, které jsem věnoval práci na této knize, projevovala pochopení a podporu. —Arie
Poděkování Děkujeme všem lidem v našich životech, kteří byli během všech vydání této knihy nesmírně trpěliví – především našim ženám Tině a Lindě. Děkujeme Ariemu Jonesovi za jeho nedocenitelnou pomoc při práci na tomto vydání. Děkujeme také všem v redakci vydavatelství Sams za jejich tvrdou práci, aby toto vydání bylo ještě lepší než to předchozí. Bylo pro nás potěšení s každým z vás pracovat.
Poznámka redakce českého vydání Nakladatelství Computer Press, které pro vás tuto knihu přeložilo, stojí o zpětnou vazbu a bude na vaše podněty a dotazy reagovat. Můžete se obrátit na následující adresy: Computer Press redakce počítačové literatury Holandská 8 639 00 Brno nebo
[email protected]. Další informace a případné opravy českého vydání knihy najdete na internetové adrese http://knihy.cpress.cz/K1733. Prostřednictvím uvedené adresy můžete též naší redakci zaslat komentář nebo dotaz týkající se knihy. Na vaše reakce se srdečně těšíme.
K1733.indd 24
18.1.2010 16:17:16
Úvod V průběhu poslední dekády se prostor informačních technologií výrazným způsobem posunul ke světu zaměřenému na data. Společnosti začaly více než kdy předtím hledat způsoby pro využití své vlastní datové sítě k provádění rozumných obchodních rozhodnutí. To zahrnuje schopnost efektivně shromažďovat, uchovávat a vybírat údaje na potenciálně rozsáhlé množině dat v mnoha formátech. Proto nabyla role správců a vývojářů databáze v náležité implementaci a správa těchto systémů přímo strategický význam. Základním kamenem jakéhokoliv databázového projektu je jazyk, který se bude používat pro interakci s databázovým systémem. Naštěstí jisté sdružení ustanovilo standardní dotazovací jazyk pro databázová prostředí známý jako standard ANSI SQL. Dodržováním tohoto známého standardu se všechny databázové dotazovací jazyky setkávají ve společných rysech, což umožňuje vývojářům, aby se tento standard naučili a poté pracovali v libovolném počtu databázových systémů jen s drobnými změnami. V této knize se zaměříme především na to, aby čtenáři získali základní znalosti o jazyku SQL, díky čemuž budou mít pevný základ pro budoucí studium. V současném podnikovém prostředí je na osvojení nových věcí mnohdy velmi málo času, neboť většinu času zhltnou každodenní pracovní činnost. Kniha se soustředí na lekce menšího rozsahu a na logické členění částí ve stylu odrazového můstku, což čtenářům umožní učit se jazyk SQL jejich vlastním tempem a v rámci jejich vlastních časových možností.
Komu je kniha určena Kniha je určena všem, kteří se chtějí rychle naučit základy jazyka SQL (Structured Query Language – strukturovací dotazovací jazyk). Prostřednictvím bezpočtu příkladů jsou představeny všechny hlavní složky jazyka SQL společně s možnostmi, které jsou k dispozici v nejrůznějších databázových implementacích. Takto získané znalosti byste pak měli být schopni využít v relačních databázích tradičního podnikového prostředí.
Uspořádání knihy Kniha je rozdělena na sedm částí, které logicky rozčleňují strukturu jazyka ANSI SQL na snadno osvojitelné celky: Část I, tvořená prvními sedmi lekcemi, se věnuje základním koncepcím v pozadí jazyka SQL a zaměřuje se především na dotazy jazyka SQL. Část II je věnována tématu umění návrhu databáze, jako je správné vytváření databází a databázových objektů, což je často základem pro vývoj aplikace v prostředí relačního databázového systému. Část III se soustřeďuje na manipulaci s daty a na používání jazyka SQL pro aktualizaci (UPDATE), vkládání (INSERT) a mazání (DELETE) dat v databázi. Jedná se o základní příkazy, které budete používat při každodenní práci s databází.
K1733.indd 25
18.1.2010 16:17:16
26
Úvod Část IV je věnována správě databáze, což zahrnuje témata, jako je bezpečnost, řízení a výkon, která vám umožňují udržovat integritu a výkon své databáze. Část V se zaměřuje na pokročilejší objekty jazyka SQL, kam patří spouštěče a uložené procedury. Díky těmto objektům můžete sáhnout po důmyslnějších technikách pro manipulaci s daty, jejichž realizace by ve standardní syntaxi jazyka SQL byla velice obtížná. Část VI se zabývá pokročilejším programováním v jazyku SQL. Pomocí pokročilejšího programování v jazyku SQL můžete provádět složitější dotazy a manipulaci s daty v databázi. Část VII vám představí jazyk SQL v nejrůznějších databázových implementacích. Rozšíření jazyka SQL (např. PL/SQL) vám umožňují využít jedinečných rysů konkrétního databázového prostředí (např. databázový systém Oracle). V knize se nachází také šest příloh, v nichž kromě správných řešení cvičení každé lekce najdete také ukázky kódu pro vytvoření a naplnění tabulek používaných v celé knize. Po prostudování této knihy se budete skvěle orientovat v jazyku SQL a tyto znalosti budete schopni aplikovat v praxi. POZNÁMKA
Pokud již základy a historii jazyka SQL znáte, pak první lekci jen tak přeleťte očima a začněte naostro až od lekce 2.
Po vysvětlení syntaxe jazyka SQL si ji procvičíme prostřednictvím příkladů pro databázový systém MySQL, jehož implementace se nejvíce přibližuje standardu ANSI SQL, a také pro databázový systém Oracle, na němž si ukážeme některá rozšíření jazyka ANSI SQL.
Použité konvence Kniha používá pro snazší čitelnost a přehlednost textu následující typografické zásady: Názvy nabídek jsou od položek odděleny zvláštním znakem >. Například Soubor > Otevřít znamená zvolit položku Otevřít v nabídce Soubor. Nové pojmy jsou zvýrazněny. V některých výpisech je jak vstup, tak i výstup (Vstup/výstup ). V těchto případech je veškerý kód, který píšete (vstup), zvýrazněn tučným písmem, zatímco výstup zůstává ve standardním písmu se stejnou roztečí. Nadpisy Vstup a Výstup označují povahu uvedeného kódu. Řada termínů souvisejících s kódem jazyka SQL je v textu vysázena také písmem se stejnou roztečí. Zástupné symboly v kódu jsou uváděny skloněným písmem se stejnou roztečí. Odstavce nadepsané jako Analýza vysvětlují předcházející ukázku kódu. Nadpis Syntaxe uvádí syntaxi příkazu. Text knihy je dále doplněn speciálními prvky:
K1733.indd 26
18.1.2010 16:17:17
Úvod
POZNÁMKA
Poznámky vysvětlují zajímavé nebo důležité body, které mohou pomoci při porozumění technikám a koncepcím v pozadí jazyka SQL.
TIP
Tipy jsou malé útržky informací, které vám pomohou v praktických situacích. Tipy často nabízejí zkratky, díky nimž lze danou činnost provést snadněji nebo rychleji.
UPOZORNĚNÍ
Upozornění poskytují informace o problémech s negativním dopadem na výkon nebo o nebezpečných chybách. Varováním proto věnujte zvýšenou pozornost.
27
Praktická cvičení v databázovém systému MySQL V této edici jsme pro praktická cvičení zvolili databázový systém MySQL. V předchozích edicích jsme nechali na čtenáři, aby si zajistil přístup k libovolné implementaci jazyka SQL. Rozhodli jsme se, že by bylo lepší nabídnout databázi SQL s otevřeným zdrojovým kódem, která by všem čtenářům umožnila začít na stejné úrovni se stejným softwarem. Zvolili jsme databázový systém MySQL, protože jde v současnosti o nejoblíbenější databázi s otevřeným zdrojovým kódem, kterou lze snadno stáhnout a používat. Databázový systém MySQL má však i svá omezení. Existuje několik prvků standardního jazyka SQL, které vůbec nepodporuje. Proto jsme se snažili rozlišovat mezi cvičeními, která databázový systém MySQL podporují, a cvičeními, která jej nepodporují. Ve cvičeních, která MySQL nepodporují, se zaměříme především na edici Express databázového systému Oracle. Krása jazyka SQL spočívá v tom, že se jedná o standardní jazyk, i když každá implementace má své odlišnosti. Pokud si budete základy jazyka SQL procvičovat v databázovém systému MySQL, budete schopni osvojené znalosti snadno využít v libovolné implementaci jazyka SQL.
Zdrojový kód V přílohách najdete zdrojový kód pro vytvoření všech objektů používaných v této knize. To zahrnuje všechny používané tabulky a data. Kromě toho je zdrojový kód možné stáhnout z webové stránky knihy (http://knihy.cpress.cz/K1733). Záznamy si tak můžete jednoduše zkopírovat do svého rozhraní, takže nemusíte trávit většinu svého času psaním, a můžete se tak soustředit na probíranou látku.
K1733.indd 27
18.1.2010 16:17:17