MySQL LEFT JOIN Tutorial

LEFT JOIN koristite kada zelite izvestaj koji u sebi ukljucuje redove iz leve tabele, cak i ako nema zajednichik tacaka sa drugom, tj. desnom tabelom.

Da pogledamo strukturu LEFT JOIN komande, pa cemo obraditi i primer da nam bude jasnije:

SELECT kolona (ili vise kolona) FROM tabela1 
LEFT JOIN tabela2
ON tabela1.kolona=tabela2.kolona

Kao sto vidite, sem LEFT JOIN kljucne reci u komandi, nema drasticnije razlike u odnosu na obicni JOIN.

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>

Posto imamo pregled podataka u tabeli, hajde da izvucemo podatke za gradove i oznaku prodavnica iz tabele "prodavnice", tako da pored njih imamo ispisane i brojeve dokumenata iz tabele "poslato", koje su za njih vezane:

mysql> SELECT prodavnice.gradovi, prodavnice.prodavnice, poslato.dokument
    -> FROM prodavnice
    -> LEFT JOIN poslato
    -> ON prodavnice.p_id=poslato.p_id
    -> ORDER BY prodavnice.gradovi;
+-----------+------------+----------+
| gradovi   | prodavnice | dokument |
+-----------+------------+----------+
| Beograd   | prbg1      |    55210 |
| Beograd   | prbg1      |    32618 |
| Beograd   | prbg2      |     NULL |
| Bor       | prbor1     |     NULL |
| Jagodina  | prjg1      |     NULL |
| Kikinda   | prkik1     |    50687 |
| Kraljevo  | prkrl1     |     NULL |
| Majdanpek | prmaj1     |     NULL |
| Nis       | prnis1     |    49321 |
| Obrenovac | prob1      |     NULL |
| Smederevo | prsm1      |    41200 |
| Subotica  | prsub1     |    39658 |
| Uzice     | pruzi1     |     NULL |
| Zrenjanin | przr1      |     NULL |
+-----------+------------+----------+
14 rows in set (0.05 sec)

mysql>

Odlicno. U koloni "dokument" oznaka NULL znaci da u tu prodavnicu/grad nismo slali za sad ni jedan dokument.