[[oktatas:adatbázis-kezelés:sql|< SQL]]
====== SQL több tábla ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2012, 2014
* Licenc: GNU Free Documentation License 1.3
* Web: http://szit.hu
===== Több táblát többféle módon köthetünk össze =====
Logikus az JOIN használata. De megoldható a WHERE direktívával is.
===== INNER JOIN =====
Legyen egy Vevők és egy Rendelések táblánk.
^ Vevok ^^^^^^^
^ vevoAz ^ vevoNev ^ kapcsolatNev ^ varos ^ cim ^ iranyitoSzam ^ orszag ^
| 1 | Trend Bt | Nagy János | Miskolc | Pokol u. 35. | 3400 | Magyarország |
| 2 | Tompa Kft. | Kis Péter | Szolnok | Piros tér 22. | 4233 | Magyarország |
| 3 | Bocs Bt. | Bocs Ernő | Szolnok | Tekerentyű u. 48. | 4832 | Magyarország |
^ Rendelesek ^^^^^
^ rendelesAz ^ vevoAz ^ dolgozoAz ^ datum ^ szallitoAz ^
| 10201 | 2 | 5 | 2014-09-15 | 4 |
| 10203 | 27 | 3 | 2014-09-16 | 3 |
| 10204 | 48 | 8 | 2014-09-17 | 3 |
SELECT vevoNev, rendelesAz, dolgozoAz
FROM Vevok
INNER JOIN Rendelesek
ON Vevok.vevoAz = Rendelesek.vevoAz
Eredmény:
^ vevoNev ^ rendelesAz ^ dolgozoAz ^
| Tompa Kft. | 10201 | 5 |
{{:oktatas:adatbázis-kezelés:sql:sql_inner_join.png|}}
===== Három tábla INNER JOIN =====
SELECT helyseg.orszag, szalloda.nev, szalloda.besorolas
FROM (helyseg INNER JOIN szalloda ON helyseg.az = szalloda.helyseg_az)
INNER JOIN tavasz ON szalloda.az = tavasz.szalloda_az
WHERE tavasz.indulas >= #3/1/2011#
AND tavasz.indulas <=#3/31/2011#
AND szalloda.tengerpart_tav = 0
===== Három tábla WHERE direktíván belül =====
SELECT helyseg.orszag, szalloda.nev, szalloda.besorolas
FROM helyseg, szalloda, tavasz
WHERE helyseg.az = szalloda.helyseg_az
AND szalloda.az = tavasz.szalloda_az
AND tavasz.indulas >= #3/1/2011#
AND tavasz.indulas <=#3/31/2011#
AND szalloda.tengerpart_tav = 0
===== LEFT JOIN =====
Legyen egy Vevők és egy Rendelések táblánk.
^ Vevok ^^^^^^^
^ az ^ vevoNev ^ kapcsolatNev ^ telepules ^ cim ^ iranyitoszam ^ orszag ^
| 1 | Trend Bt | Nagy János | Miskolc | Pokol u. 35. | 3400 | Magyarország |
| 2 | Tompa Kft. | Kis Péter | Szolnok | Piros tér 22. | 4233 | Magyarország |
| 3 | Bocs Bt. | Bocs Ernő | Szolnok | Tekerentyű u. 48. | 4832 | Magyarország |
^ Rendelesek ^^^^^
^ rendelesAz ^ vevoAz ^ dolgozoAz ^ datum ^ szallitoAz ^
| 10201 | 2 | 5 | 2014-09-15 | 4 |
| 10203 | 27 | 3 | 2014-09-16 | 3 |
| 10204 | 48 | 8 | 2014-09-17 | 3 |
Szeretnénk megtudni, mely vevők rendeltek és mi a rendelés azonosítójuk.
SELECT vevoNev, rendelesAz
FROM Vevok
LEFT JOIN Rendelesek
ON Vevok.vevoAz = Rendelesek.vevoAz
Az eredmény:
^ vevoNev ^ rendelesAz ^
| Trend Bt | NULL |
| Tompa Kft. | 10201 |
| Bocs Bt. | NULL |
Az eredményből kiderül, hogy vannak olyan vevőink akik soha nem rendeltek, de benne vannak az adatbázisban.
{{:oktatas:adatbázis-kezelés:sql:sql_left_join.png|}}
===== RIGHT JOIN =====
Legyen egy Vevők és egy Rendelések táblánk, ami LEFT JOIN részben is volt.
^ Vevok ^^^^^^^
^ az ^ vevoNev ^ kapcsolatNev ^ telepules ^ cim ^ iranyitoszam ^ orszag ^
| 1 | Trend Bt | Nagy János | Miskolc | Pokol u. 35. | 3400 | Magyarország |
| 2 | Tompa Kft. | Kis Péter | Szolnok | Piros tér 22. | 4233 | Magyarország |
| 3 | Bocs Bt. | Bocs Ernő | Szolnok | Tekerentyű u. 48. | 4832 | Magyarország |
^ Rendelesek ^^^^^
^ rendelesAz ^ vevoAz ^ dolgozoAz ^ datum ^ szallitoAz ^
| 10201 | 2 | 5 | 2014-09-15 | 4 |
| 10203 | 27 | 3 | 2014-09-16 | 3 |
| 10204 | 48 | 8 | 2014-09-17 | 3 |
Szeretnénk megtudni, kik azok a dolgozók akik felvettek olyan rendeléseket, ahol nincs vevő megadva,
de azokat is akik megadták.
SELECT vevoNev, rendelesAz, dolgozoAz
FROM Vevok
RIGHT JOIN Rendelesek
ON Vevok.vevoAz = Rendelesek.vevoAz
Eredmény:
^ vevoNev ^ rendelesAz ^ dolgozoAz ^
| Tompa Kft. | 10201 | 5 |
| NULL | 10203 | 3 |
| NULL | 10204 | 8 |
Az eredményből láthatjuk, hogy a 3 és 8-as azonosítójú dolgozó nem vette fel a vevő nevét.
{{:oktatas:adatbázis-kezelés:sql:sql_right_join.png|}}