SQL Outer Join

Sql Outer Join



On ütlematagi selge, et liitumised on üks relatsiooniandmebaaside kõige paremini tuvastatavaid funktsioone. Ühendused võimaldavad meil sidusa andmetoimingu loomiseks ühendada ühest või mitmest tabelist pärinevaid andmeid seotud tingimuse alusel.

SQL-is on erinevat tüüpi liitumisi, millest igaühel on ainulaadne viis osalevate tabelite või saadud komplekti andmete käsitlemiseks. Üks levinumaid SQL-i liitumistüüpe on OUTER JOIN.







OUTER JOIN SQL-is hangib kõik vastavad read kaasatud tabelitest ja ka sobitamatud read ühest või mõlemast tabelist. See on kasulik, kui tegelete tabelitega, mis sisaldavad NULL-väärtusi või puuduvad komplektid.



Uurime lähemalt, mida need ühendused teevad, kuidas nad töötavad ja kuidas saame neid SQL-andmebaasis kasutada.



Nõuded:

Selle õpetuse jaoks töötame MySQL 8.0-ga ja kasutame Sakila näidisandmebaasi. Siiski võite vabalt kasutada mis tahes muud andmestikku, mida peate kohaldatavaks.





Välisühenduste tüübid

SQL-is on kolm peamist tüüpi VÄLISJOONIS. Seda tüüpi VÄLISED ÜHENDUSED hõlmavad järgmist:

  1. Lahkus OUTER JOINS

  2. LEFT OUTTER JOINS puhul hangib liitmine kõik read vasakpoolsest tabelist ja ainult sobivad read paremast tabelist. Kui paremast tabelist pole sobivaid ridu, tagastab liit parempoolse tabeli veergude jaoks NULL väärtused.



  3. Õiged VÄLISED LIITUMID

  4. See sarnaneb PAREMA VÄLISE LIITUMISEga. Siiski hangib see parempoolsest tabelist kõik read, kuid vasakpoolsest tabelist ainult vastavad read. Kui vasakpoolsest tabelist pole sobivaid ridu, sisaldab liitmine vasakpoolse tabeli veergude NULL-väärtusi.

  5. TÄIELIK VÄLISÜHENDID

  6. Lõpuks on meil TÄIELIK VÄLISLIIDE. Seda tüüpi ühendus ühendab nii PAREMA kui VASAKU välimise ühenduse. Selle tulemusena hangib liit kõik read, kui vasak- või parempoolses tabelis on vaste. Kui vastet pole, tagastab liitmine tabeli veergude NULL väärtused ilma vasteta.

SQL OUTER JOIN süntaks

Järgmine väljendab SQL OUTER JOIN süntaksit. Siiski on hea meeles pidada, et süntaks võib olenevalt sihtandmebaasi mootorist veidi erineda.

Järgmine on üldine struktuur:

VALI veerud
tabelist1
[VASAKULE | ÕIGE | TÄIS] VÄLILINE LIITUMINE tabel2
ON tabel1.veeru_nimi = tabel2.veeru_nimi;

OUTER JOINi süntaks SQL-is on üsna iseenesestmõistetav.

Näited:

Vaatame mõningaid kasutusnäidiseid selle kohta, kuidas saaksime SQL-is rakendada erinevat tüüpi VÄLISJOONIS.

Nagu mainisime, kasutame demonstreerimiseks Sakila näidisandmebaasi. Sel juhul kasutame tabeleid “klient” ja “makse”.

Näide 1: VASAKU VÄLIMISE LIITUMINE

Alustame VÄLISTE LIITUMISEGA. Oletame, et tahame hankida kogu klienditeabe koos makseteabega, kui see on saadaval.

See muudab LEFT OUTTER JOIN kohaldatavaks, kuna soovime kogu klienditeavet (vasakul) ja makseteavet, kui see on saadaval (paremal).

Kui klient pole makset teinud, kuvatakse liitumisel maksega seotud veergude väärtused NULL.

Näide on järgmine:

VALI
c.customer_id,
c.first_name,
c.last_name,
p.summa,
p.makse_kuupäev
FROM
klient c
LEFT OUTTER JOIN makse lk
PEAL
c.kliendi_id = p.kliendi_id;

Antud päringusse kaasame tabelist 'klient' veerud 'customer_id', 'first_name' ja 'last_name'. Lisame tabelist 'makse' ka summa ja 'makse_kuupäev'.

Seejärel teostame tabelite “klient” ja “makse” vahel LEFT OUTTER JOIN “kliendi_id” alusel.

Need on kõik kliendid (olenemata sellest, kas makse on tehtud või mitte) koos nende makseandmetega (kui neid on).

Näidisväljund on järgmine:

Näide 2: PAREM VÄLILINE LIITUMINE

Liigume nüüd PAREMALE VÄLISE LIITUMISE juurde. Oletame, et soovime sel juhul kaasata kogu makseteabe ja seotud kliendi, kui see on olemas.

Sel juhul, kui makse teeb klient, kuvatakse liitumisel selle kliendi andmed. Kui maksel pole seotud kliente, kuvatakse kliendiga seotud veergude väärtused NULL.

VALI
c.customer_id,
c.first_name,
c.last_name,
p.summa,
p.makse_kuupäev
FROM
klient c
RIGHT OUTTER JOIN makse lk
PEAL
c.kliendi_id = p.kliendi_id;

Saadud komplekt on järgmine:

Näide 3: TÄIELIK VÄLILINE LIITUMINE

FULL OUTTER JOIN seevastu hangib kogu klienditeabe ja maksed. See hõlmab kõiki kliente ja kõiki makseid ning näitab NULL-väärtusi, kui tabelid ei ühti.

VALI
c.customer_id,
c.first_name,
c.last_name,
p.summa,
p.makse_kuupäev
FROM
klient c
FULL OUTER JOIN makse lk
PEAL
c.kliendi_id = p.kliendi_id;

Hea on meeles pidada, et MySQL ei toeta algselt FULL OUTTER JOIN'i. Peate tegema jiujitsu maagiat LEFT JOIN, UNION ja RIGHT JOIN abil. Üsna tüütu, võime lisada.

Järeldus

Selles õpetuses õppisime kõike VÄLISTE ÜHENDUSTE kohta. Õppisime, mis on VÄLISÜHEND SQL-is, OUTER JOINS-i tüüpe ja näiteid, kuidas seda tüüpi VÄLISJIIDES kasutada.