MySQL aneb u?íme se SQL jazyk (XIII.)

Autor: Ji?í Luká? <jirilukas(at)supersvet.cz>, Téma: MySQL, Vydáno dne: 28. 06. 2002

Po del?í pauze op?t vítám v?echny databázové nad?ence u dal?ího v po?adí ji? t?ináctého dílu na?eho seriálu "MySQL aneb u?íme se SQL jazyk", ve kterém vám uká?i, jak velmi jednodu?e naplnit tabulku A daty z tabulky B bez pou?ití jakéhokoliv meziskladu ?i jiné pomocné "berli?ky" a také vám p?edvedu, jak získat z MySQL DB serveru n?jaké zajímavé informace o va?í databázi a tabulkách.

Vno?ený poddotaz aneb jak naplnit tabulku A daty z tabulky B

Jak ji? samotný nadpis této kapitoly napovídá, elegantnost ?e?ení tohoto problému spo?ívá ve vno?eném poddotazu, který získá data ze zdrojové tabulky prost?ednictvím klasického SELECT dotazu a tyto data ihned p?edá na?emu p?idávacímu SQL p?íkazu, jen? za?ídí, aby se získaná data ulo?ila do cílové tabulky.

Syntaxe p?íkazu:
INSERT INTO jméno_tabulky(jména_sloupc?) SELECT specifikace_výstupních_sloupc? FROM seznam_tabulek omezení_výpisu

Pro lep?í pochopení tohoto p?íkazu si ho m??ete rozd?lit na dv? ?ásti (INSERT INTO ... a SELECT ...), p?i?em? stavba (syntaxe) samotného p?íkazu ka?dé jednotlivé ?ásti se v podstat? ?ídí stejnými pravidly, kterými se ?ídi v p?ípad? svého samostatného pou?ití.

P?íkaz INSERT INTO ... viz. 5. díl
P?íkaz SELECT ... viz. 6. díl

V?e si nyní uká?eme na malé p?íkladu, jen? vám doká?e jednoduchost a efektivnost tohoto velmi u?ite?ného p?íkazu.

Ukázkový p?íklad:
P?edstavte si dv? tabulky "zbozi" a "objednavky", které obsahují informace o produktech, se kterými obchoduje n?jaká firma. Proto?e se tato firma zabývá prodejem zbo?í, tak n?kolikrát za den vstoupí do svého informa?ního systému (dále IS) a jeho prost?ednictvím upraví hodnoty aktuálního mno?ství zbo?í na sklad? v tabulce "zbozi", aby vyjád?ila aktuální stav svého skladu ve svém IS. To v?ak není v?e. Jeliko? má tato firma velmi chytrý informa?ní systém, tak tento systém n?kolikrát denn? provede sám kontrolu aktuálního mno?ství zbo?í na sklad? a p?ípadné nízké stavy sám doplním vystavením objednávky, kterou ulo?í do fronty objednávek reprezentované tabulkou "objednavky".

?e?ení:
(Pro zjednodu?ení p?íkladu jsem vynechal v obou tabulkách spoustu d?le?itých informací a nepopsal dal?í návazné akce, ale jde mi opravdu jen o ukázku pou?ití vý?e popsaného p?íkazu a ne o komplexní vy?e?ení tohoto ukázkového p?íkladu.)

1.) Zalo?íme si tabulky "zbozi" a "objednavky" a do tabulky "zbozi" vlo?íme t?i polo?ky.

mysql> CREATE TABLE zbozi (
    -> idz int unsigned not null auto_increment primary key,
    -> cis_zbozi char(6) not null,
    -> nazev char(20) not null,
    -> mnozstvi int not null);

mysql> INSERT INTO zbozi
    -> VALUES (null,'T00123','Rukavice, ?erné',30);

mysql> INSERT INTO zbozi
    -> VALUES (null,'T00211','Tri?ko, modré, potisk',340);

mysql> INSERT INTO zbozi
    -> VALUES (null,'Z02324','Rý?, st?ední, 80 cm',15);

mysql> CREATE TABLE objednavky (
    -> ido int unsigned not null auto_increment primary key,
    -> cis_zbozi char(6) not null,
    -> nazev char(20) not null);

2.) Provedeme "simulaci automatického spu?t?ní" námi vytvo?eného kontrolního SQL p?íkazu, který se podívá do tabulky "zbozi" a pokud zjistí n?jaký nízký stav (= mén? ne? 40 jednotek), tak nám to oznámí prost?ednictvím nového ?ádku v tabulce "objednavky".

mysql> INSERT INTO objednavky(cis_zbozi,nazev)
    -> SELECT cis_zbozi,nazev FROM zbozi
    -> WHERE mnozstvi<40;

3.) Prove?te výpis tabulky "objednavky" a ov??te si, zda i vám v této tabulce p?ibyly dv? nové polo?ky. Pokud ANO, tak v?e funguje, tak jak má a od te? se m??ete pustit do velkého "businessu".

mysql> SELECT * FROM objednavky;
+-----+-----------+---------------------+
| ido | cis_zbozi | nazev               |
+-----+-----------+---------------------+
|   1 | T00123    | Rukavice, ?erné     |
|   2 | Z02324    | Rý?, st?ední, 80 cm |
+-----+-----------+---------------------+
2 rows in set (0.00 sec)

Výpis definice sloupc? tabulky

Výpis definice sloupc? tabulky vám m??e prozradit o konkrétní tabulce velkou ?adu informací po?ínaje mno?ství a názvy jednotlivých sloupc? a kon?e zobrazením v?ech p?ednastavených (default) hodnot.

Syntaxe p?íkazu:
SHOW [FULL] COLUMNS FROM jméno_tabulky [FROM jméno_databáze]

?ásti, které jsou uzav?eny v hranatých závorkách jsou tzv. "nepovinné sou?ásti p?íkazu" a nemusí se uvád?t. - V p?ípad? za?azení slova FULL do p?íkazu bude výpis obohacen navíc o výpis v?ech privilegií p?i?azených k této tabulce a jejím sloupc?m.

V?e si m??ete vyzkou?et nap?íklad zápisem následujícího p?íkazu, který se týká tabulky "objednavky", její? definice je uvedena vý?e v tomto ?lánku.

mysql> SHOW COLUMNS FROM objednavky;

P?eji p?íjemné dotazování ...




Copyright supersvet.cz, 1998-2005