Kas yra SQL JOIN
ir kokie yra skirtingi tipai?
SQL JOIN
?SQL JOIN
- tai metodas duomenims iš dviejų ar daugiau duomenų bazės lentelių gauti.
SQL JOIN
?Iš viso yra penki JOIN
. Tai :
1. JOIN or INNER JOIN
2. OUTER JOIN
2.1 LEFT OUTER JOIN or LEFT JOIN
2.2 RIGHT OUTER JOIN or RIGHT JOIN
2.3 FULL OUTER JOIN or FULL JOIN
3. NATURAL JOIN
4. CROSS JOIN
5. SELF JOIN
Atliekant tokį JOIN
, gauname visus įrašus, atitinkančius sąlygą abiejose lentelėse, o įrašai abiejose lentelėse, kurie nesutampa, nepateikiami.
Kitaip tariant, INNER JOIN
remiasi vieninteliu faktu, kad: TIK atitinkantys abiejų lentelių įrašai TURI būti išvardyti.
Atkreipkite dėmesį, kad JOIN
be jokių kitų JOIN
raktažodžių (pvz., INNER
, OUTER
, LEFT
ir t. t.) yra INNER JOIN
. Kitaip tariant, JOIN
yra
sintaksinis cukrus, skirtas INNER JOIN
(žr. https://stackoverflow.com/questions/565620/difference-between-join-and-inner-join).
OUTER JOIN
surenka
arba, suderintas eilutes iš vienos lentelės ir visas kitos lentelės eilutes arba, visas visų lentelių eilutes (nesvarbu, ar jos sutampa, ar ne).
Yra trys išorinio sujungimo rūšys :
2.1 LEFT OUTER JOIN arba LEFT JOIN
Šis sujungimas grąžina visas eilutes iš kairės lentelės kartu su atitinkančiomis eilutėmis iš kairės lentelės.
dešiniosios lentelės eilutėmis. Jei dešiniojoje lentelėje nėra sutampančių stulpelių, grąžinamos NULL
reikšmės.
2.2 RIGHT OUTER JOIN arba RIGHT JOIN
Šis JOIN
grąžina visas dešiniosios lentelės eilutes kartu su atitinkančiomis eilutėmis iš
kairėje lentelėje. Jei kairėje lentelėje nėra sutampančių stulpelių, grąžinamos NULL
reikšmės.
2.3 FULL OUTER JOIN arba FULL JOIN
Šis sujungimas sujungia LEFT OUTER JOIN
ir RIGHT OUTER JOIN
. Jis grąžina eilutes iš abiejų lentelių, kai tenkinamos sąlygos, ir grąžina NULL
reikšmę, kai nėra atitikimo.
Kitaip tariant, OUTER JOIN
remiasi tuo, kad: TIK sutampantys įrašai vienoje iš lentelių (dešinėje arba kairėje) arba abiejose lentelėse (PILNA) TURI būti išvardyti.
Note that `OUTER JOIN` is a loosened form of `INNER JOIN`.
Jis grindžiamas dviem sąlygomis :
JOIN
atliekamas visiems to paties pavadinimo stulpeliams, siekiant lygybės.Atrodo, kad tai yra daugiau teorinio pobūdžio ir dėl to (tikriausiai) dauguma DBVS net nesivargina to palaikyti.
Tai dviejų susijusių lentelių Dekarto sandauga. CROSS JOIN
rezultatas neturės prasmės
daugumoje situacijų. Be to, mums to visai nereikės (tiksliau, mažiausiai reikės).
Tai nėra kitokia JOIN
forma, greičiau tai yra lentelės JOIN
(INNER
, OUTER
ir t. t.) prijungimas prie savęs.
Priklausomai nuo operatoriaus, naudojamo JOIN
sąlygoje, gali būti dviejų tipų JOIN
. Tai
Equi JOIN
Theta JOIN
Bet kokio tipo JOIN
(INNER
, OUTER
ir t. t.), jei naudojame TIK lygybės operatorių (=), sakome, kad
JOIN
yra EQUI JOIN
.
Tai tas pats kaip EQUI JOIN
, tačiau leidžia naudoti visus kitus operatorius, tokius kaip >, <, >= ir t. t.
Daugelis mano, kad tiek EQUI JOIN
, tiek Theta JOIN
yra panašūs į INNER
, OUTER
.
ir t. t.
JOIN
. Tačiau aš tvirtai tikiu, kad tai yra klaida ir daro idėjos neaiškios. NesINNER JOIN
,OUTER JOIN
ir t. t. yra susiję su lentelėmis ir jų duomenimis, oEQUI JOIN
irTHETA JOIN
yra tik yra susiję su operatoriais, kuriuos naudojame pirmajame junginyje.Vėlgi, yra daug manančių, kad
NATURAL JOIN
yra tam tikras "savotišką"EQUI JOIN
. Iš tikrųjų tai tiesa, nes pirmoji sąlygos, kurią paminėjauNATURAL JOIN
. Tačiau mes neprivalome apsiriboti vien tikNATURAL JOIN
.INNER JOIN
s,OUTER JOIN
s ir t. t. taip pat gali būtiEQUI JOIN
.
Apibrėžimas:
Sujungimai - tai būdas vienu metu pateikti užklausą iš kelių lentelių sujungtiems duomenims.
RDBMS yra 5 jungčių tipai:
Lygiareikšmė jungtis: sujungia bendrus dviejų lentelių įrašus pagal lygybės sąlygą. Techniškai sujungimas atliekamas naudojant lygybės operatorių (=) vienos lentelės pirminio rakto ir kitos lentelės užsienio rakto reikšmėms palyginti, todėl rezultatų aibę sudaro bendri (suderinti) įrašai iš abiejų lentelių. Apie įgyvendinimą žr. INNER-JOIN.
Natural-Join: Tai patobulinta Equi-Join versija, kurioje SELECT operacija praleidžia dubliuojantį stulpelį. Apie įgyvendinimą žr. INNER-JOIN
Nevienodas sujungimas: Tai atvirkštinis lygiaverčio sujungimo variantas, kai sujungimo sąlygai naudojamas kitas nei lygybės operatorius (=), pvz., !=, <=, >=, >, < arba BETWEEN ir t. t. Apie įgyvendinimą žr. INNER-JOIN.
Self-Join:: Tai paprastai reikalinga užklausoms, susijusioms su savireferentinėmis lentelėmis (arba unarinio ryšio esybe). Apie įgyvendinimą žr. INNER-JOIN.
Karteso sandauga: Tai kryžminis visų abiejų lentelių įrašų sujungimas be jokių sąlygų. Techniškai jis grąžina užklausos rezultatų rinkinį be WHERE sąlygos.
Pagal SQL rūpestį ir pažangą, yra 3 sujungimų tipai ir visi RDBMS sujungimai gali būti atliekami naudojant šiuos sujungimo tipus.
VIENAS SUJUNGIMAS: Jis sujungia (arba sujungia) suderintas eilutes iš dviejų lentelių. Sutapatinimas atliekamas remiantis bendrais lentelių stulpeliais ir jų palyginimo operacija. Jei remiamasi lygybės sąlyga, tada: Atliekamas lygybės sujungimas, priešingu atveju - ne lygybės sujungimas.
OUTER-JOIN: Sujungiamos (arba sujungiamos) suderintos dviejų lentelių eilutės ir nesuderintos eilutės su NULL reikšmėmis. Tačiau gali pritaikyti nesuderintų eilučių atranką, pvz., nesuderintas eilutes iš pirmosios lentelės arba antrosios lentelės atrinkti pagal potipius: Kairysis išorinis sujungimas ir dešinysis išorinis sujungimas.
2.1. LIETUVOS IŠORINIS SUJUNGIMAS (dar žinomas kaip LEFT-JOIN): Grąžinamos suderintos eilutės iš dviejų lentelių ir nesuderintos tik iš LEFT lentelės (t. y. pirmosios lentelės).
2.2. Dešinysis išorinis sujungimas (dar žinomas kaip RIGHT-JOIN): Grąžinamos suderintos eilutės iš dviejų lentelių ir nesuderintos tik iš dešiniosios lentelės.
2.3. PILNASIS IŠORINIS SUJUNGIMAS (dar žinomas kaip OUTER JOIN): Grąžinamos suderintos ir nesuderintos eilutės iš abiejų lentelių.
CROSS-JOIN: Šis sujungimas nesujungia ir (arba) nesujungia, o atlieka Dekarto sandaugą.
Pastaba: Savarankišką sujungimą galima atlikti naudojant INNER-JOIN, OUTER-JOIN ir CROSS-JOIN, atsižvelgiant į reikalavimus, tačiau lentelė turi būti sujungta su pačia savimi.
1.1: INNER-JOIN: lygiareikšmio sujungimo įgyvendinimas
SELECT *
FROM Table1 A
INNER JOIN Table2 B ON A.<Primary-Key> =B.<Foreign-Key>;
1.2: INNER-JOIN: natūralaus jungimo įgyvendinimas
Select A.*, B.Col1, B.Col2 --But no B.ForeignKeyColumn in Select
FROM Table1 A
INNER JOIN Table2 B On A.Pk = B.Fk;
1.3: INNER-JOIN su NON-Equi-join įgyvendinimu
Select *
FROM Table1 A INNER JOIN Table2 B On A.Pk <= B.Fk;
1.4: INNER-JOIN su SELF-JOIN
Select *
FROM Table1 A1 INNER JOIN Table1 A2 On A1.Pk = A2.Fk;
2.1: OUTER JOIN (visiškas išorinis sujungimas)
Select *
FROM Table1 A FULL OUTER JOIN Table2 B On A.Pk = B.Fk;
2.2: LEFT JOIN
Select *
FROM Table1 A LEFT OUTER JOIN Table2 B On A.Pk = B.Fk;
2.3: DEŠINYSIS SUJUNGIMAS
Select *
FROM Table1 A RIGHT OUTER JOIN Table2 B On A.Pk = B.Fk;
3.1: CROSS JOIN
Select *
FROM TableA CROSS JOIN TableB;
3.2: CROSS JOIN-Self JOIN
Select *
FROM Table1 A1 CROSS JOIN Table1 A2;
//OR///
Select *
FROM Table1 A1,Table1 A2;