Hlavná stránka · Diskusné Fórum · Pracovné príležitosti · Zoznam

 Main Menu
o Hlavná stránka
o Zoznam tém
o Zoznam
o Odporučte nás
o Užívatelia
o Vaše konto
o Pridaj článok
o Štatistiky
o Top 10

 Reklama


 Developer Zone's
o Internet
o Tools
o Linux
o CGI Zone
o ASP Zone
o ASP.net
o PHP Zone
o CSS Zone
o JavaScript
o MySQL
o WAP / WML
o WML / WMLScript
o XML / XHTML
o Tipy a triky
o Best of web
o WebServers
o WebDesign
o Grafika

 Servis
o Vyhľadávanie
o Fórum
o Workoffice
o Zoznam článkov
o Reklama
o Pridaj článok
o Pridaj novinku

Napíšte nám
Homepage Do favoritov

 LinkExpres
Interval.cz · Pc.sk
Builder.cz · Mobilmania
PCSvet.cz · Asp.cz
Webdnes · Živě.sk
Zoznam.sk · Atlas.sk
Inzine.sk · PHP.sk
Agent.sk · Lupa.cz
Code.box.sk · Root.cz
Pixel32 · Grafika.cz

 forum.developer.sk
o Fórum ::
o Markup languages
o Scriptové jazyky
o CGI
o PHP/MySQL
o Perl
o Grafika
o Webservery
o HTML Editory
o Browsery
o Bookmarx
o ASP
o Vytvor tému ::

 Pracovné príležitosti
o Ponúkate prácu?
o Hľadáte prácu?

 Autori developer.sk
o Martin Nemeček
o Sväťo Straka
o Jany Masaryk
o Jozef Murín

 
MySQL [ 11. July 2001] - Martin_Nemecek
MySQL časť šestnásta - Spájanie tabuliek v MySQL (I)
V určitých okamihoch pri práci s rozsiahlejšou databázou zistíme, že s jednoduchými SQL dotazmi nevystačíme a potrebujeme získať naraz údaje z viacerých tabuliek, ktoré sú navzájom prepojené určitou závislosťou.



Zoberme si prípad, že máme jednu tabuľku v ktorej máme zoznam našich pracovníkov s osobnými číslami. Táto tabuľka nám poskytuje iba statický pohľad na evidenciu pracovníkov, ich počet a označenie jedinečným identifikačným číslom. V druhej tabuľke (pracoviska) máme zotriedené a pomenované všetky pracoviská na ktorých sa vyskytujú naši zamestnanci. Na občerstvenie pamäti uvádzam celý postup vytvorenia tabuliek:
create table pracovnici (pracovnik_id int, pracovnik_meno varchar(25))

create table pracoviska (pracovisko_id int, pracovnik_id int, 
pracovisko_nazov varchar(25))

INSERT INTO pracovnici (pracovnik_id, pracovnik_meno) VALUES ('07', 'Jozef 3'); 
INSERT INTO pracovnici (pracovnik_id, pracovnik_meno) VALUES ('08', 'Peter 1');  
INSERT INTO pracovnici (pracovnik_id, pracovnik_meno) VALUES ('02', 'Andrej 1');  
INSERT INTO pracoviska (pracovisko_id, pracovnik_id, pracovisko_nazov) 
VALUES ('11', '02', 'kniznica');  
INSERT INTO pracoviska (pracovisko_id, pracovnik_id, pracovisko_nazov) 
VALUES ('14', '02', 'uctaren');  
INSERT INTO pracoviska (pracovisko_id, pracovnik_id, pracovisko_nazov) 
VALUES ('19', '07', 'sklad');  

mysql> select * from pracovnici;
+--------------+----------------+
| pracovnik_id | pracovnik_meno |
+--------------+----------------+
|            2 | Andrej 1       |
|            7 | Jozef 3        |
|            8 | Peter 1        |
+--------------+----------------+
3 rows in set (0.11 sec)

mysql> select * from pracoviska;
+---------------+--------------+------------------+
| pracovisko_id | pracovnik_id | pracovisko_nazov |
+---------------+--------------+------------------+
|            11 |            2 | kniznica         |
|            14 |            2 | uctaren          |
|            19 |            7 | sklad            |
+---------------+--------------+------------------+
3 rows in set (0.06 sec)

Jednoduchým selectom môžeme zistiť zoznam našich pracovníkov z tabuľky (pracovnici) a napriklad zoznam pracovísk z druhej tabuľky (pracoviska). Problém nastáva v prípade že chceme zistiť meno pracovníka ktorý pracuje napríklad v sklade. Druhá tabuľka totiž neobsahuje údaje o menách pracovníkov. Riešenie by mohlo spočívať v spojení našich dvoch tabuliek do jednej, ale ... no ale najskôr si to ukážme:

pracovisko_id pracovisko_nazov pracovnik_id meno
11 kniznica 2 Andrej 1
14 uctaren 2 Andrej 1
19 sklad 8 Peter 1

Keď máme takto pekne spojené dve tabuľky, nebude pre nás problém vyselektovať pracovisko určitého pracovníka:
SELECT pracovisko_nazov FROM (spojena_tabulka) WHERE pracovnik_meno='Andrej 1'

No dobre, ale čo tak použiť jeden príkaz SELECT bez nutnosti spájania našich dvoch tabuliek do jednej. Samozrejme aj to je možné a ukážeme si to na následovnom príklade:
mysql> SELECT pracovisko_nazov FROM pracovnici,pracoviska
    -> WHERE (pracovnici.pracovnik_id=pracoviska.pracovnik_id)
    -> AND (pracovnik_meno='Andrej 1');

A výsledok by mohol vypadať asi takto:
+------------------+
| pracovisko_nazov |
+------------------+
| kniznica         |
| uctaren          |
+------------------+
2 rows in set (0.00 sec)

V tomto selecte sme spojili dve tabuľky prostredníctvom spoločného kľúča za časťou WHERE a v ďalšej časti príkazu sme odfiltrovali požadovaného pracovnika. Tento proces sa nazýva (v pôvodnomm tvare) "Cartesian-filter join", čiže ho môžeme prirovnať ku Kartezianskému súčinu dvoch matíc (v našom prípade tabuliek) kde je výsledok vrátený na základe ďalších kritérií. Ale to už zachádzame trochu do Lineaárnej algebry a teraz v lete to nie je určite príjemné ;-) V budúcej časti si povieme trochu hlbšie o spájaní SQL tabuliek.

 
 Príslušné odkazy k téme
Viac o téme: MySQL | Iné články od: Admin | Pošli komentár | Stránka vhodná na tlač width=15 height=11  Pošli tento článok priateľovi, známemu width=15 height=11


Najčítanejšie články MySQL:
MySQL časť štrnásta - najčastejšie kladené otázky

Ďalšie články v rubrike MySQL:

 

"MySQL časť šestnásta - Spájanie tabuliek v MySQL (I)" | Login / vytvor konto | 0 Komentárov
Prah
Za obsah komentárov je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.



Autorské práva:   ©1999 - 2001 Developer Zone [developer@developer.sk]

Všetky články sú vlastníctvom autorov Developer Zone. Všetky práva vyhradené. Stránky Developer.sk sú vytvorené pomocou PHP-Nuke.
Odkazy na nové články je možné preberať pomocou:Backend.php.