MySQL INNER JOIN Tutorial

MySQL INNER JOIN je u stvari obicni-prosti JOIN.

INNER JOIN koristimo kada zelimo dobiti izvestaj iz vise tabela kada postoji bar jedno poklapanje u tim tabelama.

Struktura INNER JOIN-a je sledeca:

SELECT kolona
FROM tabela1
INNER JOIN tabela2
ON tabela1.kolona=tabela2.kolona

Da se prisetimo sadrzaja obe tabele pre nastavka lekcije:

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>

Sada cemo koristiti INNER JOIN da izvucemo sve Prodavnice za koje su vezani neki dokumenti:

mysql> SELECT prodavnice.gradovi, prodavnice.prodavnice, poslato.dokument
    -> FROM prodavnice
    -> INNER JOIN poslato
    -> ON prodavnice.p_id=poslato.p_id
    -> ORDER BY prodavnice.gradovi;
+-----------+------------+----------+
| gradovi   | prodavnice | dokument |
+-----------+------------+----------+
| Beograd   | prbg1      |    55210 |
| Beograd   | prbg1      |    32618 |
| Kikinda   | prkik1     |    50687 |
| Nis       | prnis1     |    49321 |
| Smederevo | prsm1      |    41200 |
| Subotica  | prsub1     |    39658 |
+-----------+------------+----------+
6 rows in set (0.38 sec)

mysql>

Objasnjenje redova:

SELECT prodavnice.gradovi, prodavnice.prodavnice, poslato.dokument = Ovim redom definisemo strukturu kolona u izvestaju koji pravimo.

FROM prodavnice = izvlacimo podatke iz tabele "prodavnice"

INNER JOIN poslato = tabelu "prodavnice" uparujemo (preklapamo) sa tabelom "poslato".

ON prodavnice.p_id=poslato.p_id = Pravimo kriterijum. Povezujemo kolone p_id iz obe tabele, pa cemo na osnovu p_id POSTOJANJA u obe tabele dobiti izvestaj.

ORDER BY prodavnice.gradovi = Listing izvestaja ce se prevashodno bazirati na selekciji po gradovima iz tabele "prodavnice".