Adatbázisok‎ > ‎

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ása

Ö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.