Táblák összekapcsolása
Jól megtervezett (normalizált) adatbázisokban az összetartozó
információk sokszor több táblába vannak szétosztva. Ezzel elkerülhető
a redundancia, továbbá az adatok módosításnál vagy törlésénél
így egyszerűbb elkerülni bizonyos hibákat (inkozisztens adatok, információvesztés).
Amikor lekérdezünk az adatbázisból, össze kell szednünk az összetartozó adat-töredékeket. Erre szolgál a
táblák összekapcsolása. Alapvetően kétféle összekapcsolást használunk:
- belső összekapcsolás (INNER JOIN)
- külső összekapcsolás (OUTER JOIN)
Az összekapcsolás lényege, hogy több táblából egyet csinál oly módon, hogy az eredmény tábla sorai az eredeti táblák megfelelő sorainak egymás mellé írásával keletkeznek.
Hogy mit jelent a "megfelelő", az az összekapcsolás feltételében adható meg. Ez leggyakrabban abból áll, hogy az egyik tábla rekordjaiban található valamelyik mező meg kell egyezzen a másik tábla rekordjának egy mezőjével. Itt tipikusan a feltételben szereplő egyik mező kulcs szokott lenni, de ez nem kötelező.
Példa
Tekintsük a következő táblákat:
Diák(név,of)
név | of |
Aladár | 1 |
Bori | 2 |
Csilla | 2 |
Tanár(sor,név)
sor | név |
1 | Kiss Lenke |
2 | Gálos László |
3 | Konta Gyula |
Ha a Diák tábla "of" mezőjét rendeljük a Tanát tábla "sor" mezőjéhez, akkor a következő
összekapcsolt táblát kapjuk.
Diák.név | of | sor | Tanár.név |
Aladár | 1 | 1 | Kiss Lenke |
Bori | 2 | 2 | Gálos László |
Csilla | 2 | 2 | Gálos László |
Belső összekapcsolás
Összekapcsolás a "WHERE" záradékban
SELECT *
FROM T1, T2
WHERE T1.kulcs = T2.kulcs
Összekapcsolás a "FROM" záradékban
SELECT *
FROM T1 INNER JOIN T2 ON T1.kulcs = T2.kulcs
Több tábla összekapcsolása
SELECT *
FROM T1, T2, T3
WHERE T1.ka = T2.ka AND T2.kb = T3.kb
SELECT *
FROM (T1 INNER JOIN T2 ON T1.ka=T2.ka) INNER JOIN T3 ON T2.kb=T3.kb
Külső összekapcsolás
Asszimetrikus, lehet jobb (RIGHT) vagy bal (LEFT).
SELECT *
FROM T1 LEFT OUTER JOIN T2 ON T1.kulcs=T2.kulcs
Ha a T1 tábla adott rekordjához nincs "pár" T2-ben, akkor is bekerül
az eredmény táblába, és T2 mezői "NULL" értéket kapnak.