Tartalomjegyzék

< SQL

SQL több tábla

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

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.

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.