[[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|}}