Mis vahe on tabelite ühendamisel (join) ja ühendi leidmisel (union)?

Postitas Erki Eessaar 13.03.2022 10:53
Ühendamine (join) on selleks, et saada tabelist loetud ritta juurde uusi andmeid (enamasti mõnest teisest tabelist, ehki ka tabeli ühendamine iseendaga - self-join - on võimalik).

Näiteks oletame, et andmebaasis on järgmise struktuuriga tabelid.

[Tudeng]-1----------0..*-[Oppimine]

Iga õppimine on seotud täpselt ühe tudengiga. Loen ridu tabelist Oppimine ja tahan, et igas saadud reas oleks ka selle õppimisega seotud tudengi perenimi. Selleks pean ühendada õppimise tabeli read tudengi tabeli ridadega. Pean seda tegema nii, et iga õppimise tabeli rida ühendatakse just ja ainult selle tudengi tabeli reaga, kus vastav tudeng on seotud vastava õppimisega.

Vanem süntaks:
SELECT Oppimine.*, Tudeng.perenimi AS tudengi_perenimi
FROM Oppimine, Tudeng
WHERE Oppimine.tudeng=Tudeng.tudkood;


Uuem süntaks:
SELECT Oppimine.*, Tudeng.perenimi AS tudengi_perenimi
FROM Oppimine INNER JOIN Tudeng ON Oppimine.tudeng=Tudeng.tudkood;

Ühendi (union) leidmine on selleks, et leida hulkade ühend.

SELECT eesnimi, perenimi
FROM Tudeng
UNION SELECT eesnimi, perenimi
FROM Oppejoud;

Eelnev päring moodustab tabeli, kus on nii õppejõudude kui tudengite ees- ja perenimed. Vaikimisi eemaldatakse kordused.

UNION operatsioonis osaleb kaks hulka (antud juhul ridade hulka). Nende hulga elementidel peab olema ühesugune struktuur.

SELECT eesnimi, perenimi
FROM Tudeng

leiab read, kus on kaks tekstitüüpi välja.

SELECT eesnimi, perenimi
FROM Oppejoud;

leiab read, kus on kaks tekstitüüpi välja.

Seega kahes ridade hulgas, mida UNION'iga kokku panen, peavad olema samasuguse struktuuriga read.

Hästi piltlikult rääkides.
  • Ühendamine (join) on nagu rongile vagunite lisamine, kusjuures rongile tuleb lisada õiged vagunid, mis peavad jõudma rongi sihtkohta.
  • Ühendi (union) leidmine on nagu ühesuguse kujuga kastide üksteise otsa virna laadimine.

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!