Page 1


Ryan Stephens, Ron Plew, Arie D. Jones

NauÄ?te se SQL za 28 dnĂ­

Computer Press Brno 2012

K1733_dotisk.indd 1

3.2.2012 9:52:40


Naučte se SQL za 28 dní Ryan Stephens, Ron Plew, Arie D. Jones Překlad: Lukáš Krejčí Obálka: Martin Sodomka Odpovědný redaktor: Martin Herodek Technický redaktor: Jiří Matoušek Authorized translation from the English language edition, entitled SAMS TEACH YOURSELF SQL IN ONE HOUR A DAY, 5th Edition, 0672330253 by STEPHENS, RYAN; PLEW, RON; JONES, ARIE D., published by Pearson Education, Inc, publishing as Sams Publishing, Copyright © 2009 by Pearson Education, Inc. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. CZECH language edition published by Albatros Media a.s., Copyright © 2010. Autorizovaný překlad z originálního anglického vydání SAMS TEACH YOURSELF SQL IN ONE HOUR A DAY. Originální copyright: published by Pearson Education, Inc, publishing as Sams Publishing, Copyright © 2009. Překlad: © Albatros Media a.s., 2010. Objednávky knih: http://knihy.cpress.cz www.albatrosmedia.cz eshop@albatrosmedia.cz bezplatná linka 800 555 513 ISBN 978-80-251-2700-1 Vydalo nakladatelství Computer Press v Brně roku 2012 ve společnosti Albatros Media a. s. se sídlem Na Pankráci 30, Praha 4. Číslo publikace 16 001. © Albatros Media a. s. Všechna práva vyhrazena. Žádná část této publikace nesmí být kopírována a rozmnožována za účelem rozšiřování v jakékoli formě či jakýmkoli způsobem bez písemného souhlasu vydavatele. Dotisk 1. vydání.

K1733_dotisk.indd 2

3.2.2012 9:53:08


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

Profile for Flexibooks

Naucte se SQL za 28 dni_Plew_Jones_Stephens  

Naucte se SQL za 28 dni_Plew_Jones_Stephens