MySQL RIGHT JOIN koristimo kada nam treba izvestaj iz baze kojim izvlacimo podatke iz vise tabela tako da za sve redove u desnoj tabeli trazimo odgovarajuce redove u levoj tabeli.
Naravno, moze se desiti da naidjemo na nepopunjene redove u levoj tabeli, bez obzira sto imamo podatke u desnoj.
Struktura MySQL RIGHT JOIN komande se, sem upotrebe kljucne reci RIGHT JOIN, ne razlikuje se od LEFT ili INNER (obicnog) JOIN-a:
SELECT prodavnice.gradovi, prodavnice.prodavnice, poslato.dokument
FROM prodavnice
RIGHT JOIN poslato
ON prodavnice.p_id=poslato.p_id
ORDER BY prodavnice.gradovi;
Da se prisetimo sadrzaja obe tabele:
mysql> SELECT * FROM prodavnice;
+------+-----------+------------+-----------+-------------+------+
| p_id | gradovi | prodavnice | proizvod | raspolozivo | cena |
+------+-----------+------------+-----------+-------------+------+
| 1 | Beograd | prbg1 | Kafa | 121 | 150 |
| 2 | Beograd | prbg2 | Cigare | 50 | 300 |
| 3 | Subotica | prsub1 | Hleb | 43 | 45 |
| 4 | Nis | prnis1 | Hleb | 23 | 55 |
| 5 | Kraljevo | prkrl1 | Pavlaka | 155 | 50 |
| 6 | Uzice | pruzi1 | Mleko | 68 | 90 |
| 7 | Majdanpek | prmaj1 | Mleko | 91 | 87 |
| 8 | Bor | prbor1 | Pavlaka | 155 | 50 |
| 9 | Kikinda | prkik1 | Ajzaklija | 38 | 650 |
| 10 | Obrenovac | prob1 | Jabuke | 35 | 120 |
| 11 | Smederevo | prsm1 | Ajvar | 28 | 270 |
| 12 | Zrenjanin | przr1 | Somun | 10 | 59 |
| 13 | Jagodina | prjg1 | Bakalar | 29 | 400 |
+------+-----------+------------+-----------+-------------+------+
13 rows in set (0.03 sec)
mysql>
Sadrzaj tabele "poslato":
mysql> SELECT * FROM poslato;
+------+----------+------+
| s_id | dokument | p_id |
+------+----------+------+
| 1 | 55210 | 1 |
| 2 | 32618 | 1 |
| 3 | 50687 | 9 |
| 4 | 49321 | 4 |
| 5 | 39658 | 3 |
| 6 | 41200 | 11 |
+------+----------+------+
6 rows in set (0.00 sec)
mysql>
Pre nego pokrenemo MySQL RIGHT JOIN, potrebno je da unesemo jos neke podatke u tabelu "poslato". Radi se o nekim dokumentima kojima smo dodelili sifre (25527 i 42931), ali ih nismo jos nikom poslali:
mysql> INSERT INTO poslato (s_id, dokument, p_id)
-> VALUES (NULL, 25527, NULL);
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO poslato (s_id, dokument, p_id)
-> VALUES (NULL, 42931, NULL);
Query OK, 1 row affected (0.05 sec)
mysql>
Stanje tabele "poslato" nakon unosa novih dokumenata:
mysql> SELECT * FROM poslato;
+------+----------+------+
| s_id | dokument | p_id |
+------+----------+------+
| 1 | 55210 | 1 |
| 2 | 32618 | 1 |
| 3 | 50687 | 9 |
| 4 | 49321 | 4 |
| 5 | 39658 | 3 |
| 6 | 41200 | 11 |
| 7 | 25527 | NULL |
| 8 | 42931 | NULL |
+------+----------+------+
8 rows in set (0.02 sec)
mysql>
Idemo konacno pokrenuti RIGHT JOIN:
mysql> SELECT prodavnice.gradovi, prodavnice.prodavnice, poslato.dokument
-> FROM prodavnice
-> RIGHT JOIN poslato
-> ON prodavnice.p_id=poslato.p_id
-> ORDER BY prodavnice.gradovi;
+-----------+------------+----------+
| gradovi | prodavnice | dokument |
+-----------+------------+----------+
| NULL | NULL | 42931 |
| NULL | NULL | 25527 |
| Beograd | prbg1 | 55210 |
| Beograd | prbg1 | 32618 |
| Kikinda | prkik1 | 50687 |
| Nis | prnis1 | 49321 |
| Smederevo | prsm1 | 41200 |
| Subotica | prsub1 | 39658 |
+-----------+------------+----------+
8 rows in set (0.00 sec)
mysql>
Dakle, imamo sve dokumente u izvestaju, cak i one koji nisu nikom dodeljeni.
2014 © webprogramianje.net - Sva prava su zadržana. 




