PostgreSQL Liitumistüübid: sisemine, välimine, vasak, parem

⚡ Nutikas kokkuvõte

PostgreSQL Ühendused hangivad ja ühendavad ridu kahest või enamast tabelist jagatud võtme abil ning hõlmavad sisemisi ühendusi, nagu teeta, EQUI ja naturaalne, ning väliseid ühendusi, mis hõlmavad vasakpoolseid, paremaid ja täielikke tulemusi.

  • 🔗 Ühendage: Ühendab mitme tabeli veerge ühise võtme põhjal.
  • 🎯 Sisemine liitumine: Sisemised ühendused tagastavad ainult read, mille puhul on liitumistingimus täidetud.
  • ⬅️ Vasak liitumine: LEFT OUTER JOIN säilitab kõik vasakpoolsed tabeliread, lisades NULL-id sobimatute parempoolsete ridade jaoks.
  • ➡️ Parem liitumine: RIGHT OUTER JOIN säilitab kõik parempoolsed tabeliread, lisades NULL-id sobimatute vasakpoolsete ridade jaoks.
  • ???? Täielik liitumine: FULL OUTER JOIN tagastab mõlema tabeli kõik read NULL-väärtustega, kus vastet pole.
  • 🤖 Tehisintellekti abi: Tehisintellekti assistendid valivad õige liitumistüübi ja kirjutavad SISSE-tingimuse.

PostgreSQL Liitumise tüübid

Mis on liitumised PostgreSQL?

PostgreSQL Liita kasutatakse andmete hankimiseks mitmest tabelist. Ühenduste abil on võimalik ühendada SELECT- ja JOIN-laused üheks lauseks. Lausele lisatakse JOIN-tingimus ja kõik read, mis tingimustele vastavad, tagastatakse. Erinevate tabelite väärtused ühendatakse ühiste veergude alusel. Ühine veerg on enamasti esimese tabeli primaarvõti ja teise tabeli võõrvõti.

PostgreSQL Liitumise tüübid

On kahte tüüpi liitumisi PostgreSQL:

  • Sisemised ühendused
  • Välimised ühendused

PostgreSQL Sisemine liitumine

Siseühendusi on 3 tüüpi PostgreSQL:

  • Teeta liituda
  • Loomulik liitumine
  • EQUI liitumine

Teeta Liitu

Teeta liitmine võimaldab ühendada kaks tabelit tingimusel, mida teeta esindab. Teeta ühendused võivad töötada kõigi võrdlusoperaatoritega. Enamikul juhtudel nimetatakse teeta-ühendust sisemiseks ühenduseks.

Teeta liitumine on JOIN-i kõige elementaarsem tüüp. See tagastab kõik read tabelitest, kus JOIN tingimus on täidetud.

süntaksit:

SELECT columns
FROM table-1
INNER JOIN table-2
ON table-1.column = table-2.column;

Vaadake demo andmebaasi järgmisi tabeleid:

Raamat:

PostgreSQL Teeta Liitu

Hind:

PostgreSQL Teeta Liitu

Soovime näha iga raamatu nime ja vastavat Hinda. Saame käivitada järgmise käsu:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

See tagastab järgmise:

PostgreSQL Teeta Liitu

Ainult 3 rida rahuldas liitmise tingimust.

EQUI Liitu

EQUI liit annab meile võimaluse ühendada kaks tabelit primaarvõtme/võõrvõtme suhte alusel. Näiteks:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

See tagastab järgmise:

PostgreSQL EQUI Liitu

Mõlemast tabelist on kirjed tagastatud ühiste veergude ehk id veeru alusel.

Loomulik liitumine

Seda tüüpi liitumine annab meile veel ühe viisi EQUI liitumise kirjutamiseks. Saame oma eelmist näidet täiustada, lisades märksõna LOODUSLIK, nagu allpool näidatud:

SELECT *
FROM Book
NATURAL JOIN Price;

See tagastab järgmise:

PostgreSQL Loomulik liitumine

Tagastati ainult üks ID-veerg. NATURAL JOIN märkas, et id veerg on kahes tabelis tavaline. Tagastati ainult üks.

PostgreSQL Väline liitumine

Välisühendusi on 3 tüüpi PostgreSQL:

  • Vasakpoolne välimine liitekoht
  • Parempoolne ühendus
  • Täielik väline liitumine

PostgreSQL Vasakpoolne välimine liitekoht

LEFT OUTTER JOIN tagastab kõik tabeli vasakpoolsed read ja ainult need read parempoolses külgtabelis, kus liitumise tingimus on täidetud.

süntaksit:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

Peame nägema iga raamatu nime ja vastavat hinda. Saame käivitada järgmise käsu:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

See tagastab järgmise:

PostgreSQL Vasakpoolne välimine liitekoht

Kõik 4 raamatu tabeli rida on tagastatud. Ainult 3 rida tabelist Hind vastas liitumise tingimusele. Seetõttu nad tagastati. Viimasel raamatul puudub vastav hinnaväärtus.

PostgreSQL Parempoolne ühendus

RIGHT OUTTER JOIN tagastab kõik tabeli parempoolsed read ja vasakpoolses tabelis olevad read, kus liitumise tingimus on täidetud.

süntaksit:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

Näiteks:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

See tagastab järgmise:

PostgreSQL Parempoolne ühendus

Kõik Price tabeli read on tagastatud. Book tabelist tagastati ainult need read, mis vastasid liitmistingimusele. 3. real pole name jaoks väärtust, kuna vastet ei leitud.

Täielik välimine liitumine PostgreSQL

Seda tüüpi JOIN tagastab kõik tabeli vasakpoolsed read ja kõik tabeli paremas servas olevad read nullidega, kui liitumise tingimus ei ole täidetud.

süntaksit:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

Näiteks:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

See tagastab järgmise:

PostgreSQL Täielik väline liitumine

Kõikide tabelite kõik read on tagastatud nullidega, kus vastet ei leitud.

pgAdmini kasutamine

Ülaltoodud ülesandeid saab pgAdminis täita järgmiselt. Järgmistes osades käsitletakse iga liitmistüüpi samm-sammult.

pgAdmini sisemine liitumine

Allolevad sammud näitavad, kuidas pgAdminis iga sisemise liitumise varianti käivitada.

Kuidas Thetat kasutada Liituge PostgreSQL kasutades pgAdminit

Allpool on toodud sammud Theta Join'i kasutamiseks. PostgreSQL pgAdmini abil:

Samm 1) Logige sisse oma pgAdmini kontole

Avage pgAdmin ja logige oma mandaatide abil sisse

Samm 2) Loo demo andmebaas

  • Vasakpoolsel navigeerimisribal klõpsake nuppu Andmebaasid.
  • Klõpsake Demo.

pgAdmini sisemine liitumine

Samm 3) Sisestage päring

Tippige päringuredaktorisse allolev päring:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Samm 4) Käivitage päring

Klõpsake nuppu Käivita

pgAdmini sisemine liitumine

See peaks tagastama järgmise:

pgAdmini sisemine liitumine

EQUI Liitu

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  • Vasakpoolsel navigeerimisribal klõpsake nuppu Andmebaasid.
  • Klõpsake Demo.

pgAdmin EQUI Liitu

Step 3) Sisestage päring päringuredaktorisse:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Step 4) Klõpsake nuppu Käivita.

pgAdmin EQUI Liitu

See peaks tagastama järgmise:

pgAdmin EQUI Liitu

Loomulik liitumine

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  • Vasakpoolsel navigeerimisribal klõpsake nuppu Andmebaasid.
  • Klõpsake Demo.

pgAdmin Loomulik Liitu

Step 3) Sisestage päring päringuredaktorisse:

SELECT *
FROM Book
NATURAL JOIN Price;

Step 4) Klõpsake nuppu Käivita.

pgAdmin Loomulik Liitu

See peaks tagastama järgmise:

pgAdmin Loomulik Liitu

pgAdmin Lihtne sisemine liitumine

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  • Vasakpoolsel navigeerimisribal klõpsake nuppu Andmebaasid.
  • Klõpsake Demo.

pgAdmin Lihtne sisemine liitumine

Step 3) Sisestage päring päringuredaktorisse:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Step 4) Klõpsake nuppu Käivita.

pgAdmin Lihtne sisemine liitumine

See peaks tagastama järgmise:

pgAdmin Lihtne sisemine liitumine

pgAdmini välimine liitumine

Seejärel käivitage pgAdminis kolm välimist liitumisvarianti, järgides alltoodud samme.

Vasakpoolne välimine liitekoht

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  • Vasakpoolsel navigeerimisribal klõpsake nuppu Andmebaasid.
  • Klõpsake Demo.

pgAdmini vasakpoolne välimine liitumine

Step 3) Sisestage päring päringuredaktorisse:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

Step 4) Klõpsake nuppu Käivita.

pgAdmini vasakpoolne välimine liitumine

See peaks tagastama järgmise:

pgAdmini vasakpoolne välimine liitumine

Parempoolne ühendus

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  • Vasakpoolsel navigeerimisribal klõpsake nuppu Andmebaasid.
  • Klõpsake Demo.

pgAdmini parem välimine liitumine

Step 3) Sisestage päring päringuredaktorisse:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

Step 4) Klõpsake nuppu Käivita.

pgAdmini parem välimine liitumine

See peaks tagastama järgmise:

pgAdmini parem välimine liitumine

Täielik väline liitumine

Step 1) Logige sisse oma pgAdmini kontole.

Step 2)

  • Vasakpoolsel navigeerimisribal klõpsake nuppu Andmebaasid.
  • Klõpsake Demo.

pgAdmin Täielik välimine liitumine

Step 3) Sisestage päring päringuredaktorisse:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

Step 4) Klõpsake nuppu Käivita.

pgAdmin Täielik välimine liitumine

See peaks tagastama järgmise:

pgAdmin Täielik välimine liitumine

Laadige alla selles õpetuses kasutatud andmebaas

KKK

SISEMINE LIITMINE tagastab ainult read, mis vastavad mõlemas tabelis. VÄLINE LIITMINE säilitab samuti vastavuseta read, täites puuduvad veerud NULL-iga, ning see võib olla vasak-, parem- või täisliide, olenevalt sellest, millist tabelit säilitatakse.

JOIN (liitumisvõte) ühendab erinevate tabelite veerud kõrvuti, kasutades sobivat võtit, laiendades iga rida. UNION (ühendamisvõte) virnastab kahe tulemuskomplekti read vertikaalselt ja nõuab sama arvu veerge.

Iseliitumine ühendab tabeli iseendaga, kasutades kahte tabeli aliast. See on kasulik ühe tabeli ridade võrdlemiseks, näiteks töötajate sobitamiseks samas tabelis talletatud juhtidega.

RISTLIITMINE tagastab Cartesiuse korrutise, sidudes esimese tabeli iga rea ​​teise tabeli iga reaga. See ei kasuta SISSE-tingimust, seega saab kiiresti luua väga suuri tulemuskogumeid.

Jah. Ühes päringus saab aheldada mitu JOIN-klauslit, lisades igale lisatabelile uue JOIN- ja ON-tingimuse. PostgreSQL hindab neid, et luua ühtne kombineeritud tulemuste komplekt.

Tehisintellekti assistendid, näiteks GitHub Copilot, soovitavad õiget liitumistüüpi, kirjutavad võõrvõtmetest ON-tingimuse ja märgistavad puuduva tingimuse, mis võiks põhjustada juhusliku Cartesiuse korrutise, vähendades seeläbi levinud liitumisvigu.

Jah. Tehisintellekti assistendid saavad lugeda päringuplaani, soovitada liitumisveergude indekseid ja ümber kirjutada liitumisjärjekorda või -tingimusi. Andmebaas tagab endiselt õigsuse, seega vaadake iga soovitus enne selle tootmiskeskkonnas käivitamist üle.

Ükski ühendus pole alati kiireim; jõudlus sõltub indeksitest, ridade arvust ja filtritest. Indekseeritud võtmete SISEMISED LIITUMISED on tavaliselt tõhusad, samas kui suurte indekseerimata tabelite TÄIELIKUD VÄLISED LIITUMISED kipuvad olema kõige kulukamad.

Võta see postitus kokku järgmiselt: