[MySQL] JOIN Stavki
Včeraj zvečer sva z Ranntom govorila o MySQL JOIN stavkih … Ker nisem bil ravno prepričan, kateri je ustrezen za moj problem, sem po priporočilu Rannta prebral eno zadevščino, delni prevod pa je tukajle:
Najprej vzorčni podatki:
Podatkovna tabela ‘demo_ljudje’:
1, Janez Novak, telefon 123456 2, Peter Novak, telefon 234567 3, Ice-Heki, telefon 456789
Podatkovna tabela ‘demo_prodaja’:
Oseba 1 prodaja zadevo stevilka 1 - Stara farma Oseba 3 prodaja zadevo stevilka 2 - Vrba (drevo) Oseba 3 prodaja zadevo stevilka 3 - Visoka drevesa Oseba 3 prodaja zadevo stevilka 3 - Prirocnik Oseba 4 prodaja zadevo stevilka 5 - Ribisko palico
ÄŚe v Mysql konzoli naredimo dve poizvedbi dobimo naslednje izpise:
Tabela demo_ljudje;
mysql> select * from demo_ljudje; +-------------+---------+------+ | ime | telefon | pid | +-------------+---------+------+ | Janez Novak | 123456 | 1 | | Peter Novak | 234567 | 2 | | Ice-Heki | 456789 | 3 | +-------------+--- -----+------+ 3 rows in set (0.00 sec) mysql>
Tabela demo_prodaja;
mysql> select * from demo_prodaja; +------+------+----------------+ | pid | spid | predmet | +------+------+----------------+ | 1 | 1 | Stara farma | | 3 | 2 | Vrba | | 3 | 3 | Visoka drevesa | | 3 | 4 | Prirocnik | | 4 | 5 | Ribiska palica | +------+------+----------------+ 5 rows in set (0.00 sec) mysql>
Sedaj pa recimo, da bi želeli pogledati, kateri uporabniki prodajajo te predmete - zanima nas torej lastnik predmeta skupaj s telefonsko številko:
mysql> SELECT ime, telefon, predmet FROM demo_ljudje JOIN demo_prodaja ON demo_ljudje.pid=demo_prodaja.pid; +-------------+---------+----------------+ | ime | telefon | predmet | +-------------+---------+----------------+ | Janez Novak | 123456 | Stara farma | | Ice-Heki | 456789 | Vrba | | Ice-Heki | 456789 | Visoka drevesa | | Ice-Heki | 456789 | Prirocnik | +-------------+---------+----------------+ 4 rows in set (0.01 sec) mysql>
Kot vidimo, v zgornji tabeli manjka Peter Novak - zato ker on ne prodaja nobenega predmeta, ga mysql ne prikaže.
ÄŚe bi želeli kljub temu prikazati vse osebe in njihove predmete, moramo uporabiti LEFT JOIN:
mysql> select ime,telefon,predmet from demo_ljudje left join demo_prodaja on demo_ljudje.pid = demo_prodaja.pid; +-------------+---------+----------------+ | ime | telefon | predmet | +-------------+---------+----------------+ | Janez Novak | 123456 | Stara farma | | Peter Novak | 234567 | NULL | | Ice-Heki | 456789 | Vrba | | Ice-Heki | 456789 | Visoka drevesa | | Ice-Heki | 456789 | Prirocnik | +-------------+---------+----------------+ 5 rows in set (0.01 sec) mysql>
V zgornji tabeli se res pojavi Peter Novak, ki sicer nič ne prodaja, še vedno pa nam manjka Ribiška palica. Ker je to predmet brez lastnika, ga MySQL tokrat ni pokazal. ÄŚe želimo prikazati vse stvari (tudi take brez lastnikov) in njihove lastnike (če jih imajo) pa uporabimo RIGHT JOIN:
mysql> select ime,telefon,predmet from demo_ljudje RIGHT join demo_prodaja on demo_ljudje.pid = demo_prodaja.pid; +-------------+---------+----------------+ | ime | telefon | predmet | +-------------+---------+----------------+ | Janez Novak | 123456 | Stara farma | | Ice-Heki | 456789 | Vrba | | Ice-Heki | 456789 | Visoka drevesa | | Ice-Heki | 456789 | Prirocnik | | NULL | NULL | Ribiska palica | +-------------+---------+----------------+ 5 rows in set (0.01 sec) mysql>
V zgornji tabeli so prikazani vsi predmeti in lastniki predmetov, lastniki, ki pa ne prodajajo nobenega predmeta pa ne.
INNER JOIN vrne rezultat popolnoma enak prvemu primeru (kjer je uporabljen samo JOIN).
ÄŚe komu še kaj ni jasno pa več na www.mysql.org
Lahko noč
Informacije o zapisu
Trenutno si ogledujete zapis
[MySQL] JOIN Stavki
- Objavljeno:
- Sreda, 1. 8. 2007 ob 00:25
- Kategorije:
- Spletno programiranje, Računalništvo, Krneki
Ni komentarjev
Želim dodati komentar | Želim prejemati komentarje [RSS]