SQL - Care este diferența dintre intrarea internă, intrarea în stânga, integrarea dreaptă și integrarea completă

Aceste imagini nu fac asta pentru mine. De ce imaginea din dreapta sus nu este doar SELECT * FROM TableA; De ce fotografia din stânga sus nu este doar SELECT * FROM TableB; De ce este fotografia superioară din mijloc nu SELECTĂ * DE LA O SELECTARE INTERSECT * DE LA B. etc - onedaywhen la 20 mai 17 la 19:08







Am o problemă cu întregul concept: acestea sunt reprezentări vizuale ale unirii, intersecții, excepții etc. Nu au o reprezentare vizuală a proiecției, prin urmare nu pot fi sindicate. Cred că acest lucru se va confunde mai mult decât bine atunci când contextul se conectează. - în zilele de 20 mai 17 la 19:08

@onlinewhen - tu ești prima persoană pe această temă care a fost greu de înțeles - Pranay Rana 20 mai 17 la 19:08

Hmm, nici o idee despre ce este roșu. - Jonathon Wisnoski 20 mai 17 la 19:08

Trebuie să fiu de acord, numele asociațiilor (stânga și dreapta) este complet prostie, deoarece implică direcții specifice. FULL ÎNSCRIEȚI trebuie să fie UNION JOIN, INTERIOARĂ JOIN pentru a fi INTERSECT JOIN și STÂNGA / DREAPTA pentru a fi conexiuni suplimentare [RELATIVE] în cazul în care să specificați care masa este partea complementară. Puteți spune că designerul a venit dintr-o limbă care citește de la stânga la dreapta. - Rahly pe 20 mai 17 la 19:08

SQL este limba care citește de la stânga la dreapta - da. ) - bjedrzejewski Mai 20 '17 la 19:08

Această diagramă are o problemă serioasă, că ignoră complet diferența dintre semicupluri și sindicate. Asta este: selectați a. * De la o intrare internă b pe a.id = b.id față de selectați a. * De la un id unde se află în (selectați id de la b). Acest lucru se datorează faptului că conexiunile SQL nu sunt o intersecție a două seturi - uniunea poate fi una -> una, una -> multe sau multe -> multe. Astfel, este practic imposibil să vă imaginați diagrama Venn: întreaga diagrama vă arată "care parte a tabelului va participa la fuziune". În acest caz, selectați a. * De la o conexiune transversală b trebuie să aibă aceeași diagramă ca și cea externă completă. - ubanerjea 20 mai 17 la 19:08

@ubanerjea dreapta: Diagrama nu se poate descrie o metodă pentru combinarea compușilor LEFT în rânduri duplicat ale unui comportament (potențial neintenționat) din „una la mai multe“ în cazul în care B are mai mult de o cheie aparținând A.key. Răspunde Arunprasantesha K.V. în opinia mea, mai cuprinzătoare. - Eric 20 mai la 19:08







Și despre "asociațiile naturale". Poate cineva să-și adauge imaginea la această imagine, te rog? - skan 20 mai 17 la 19:08

Nu cred că aceste diagrame explică nimic, chiar și vizual, dacă nu aveți o înțelegere profundă și concretă a ceea ce încearcă să arate. Pentru cineva care încearcă să studieze asociațiile pentru prima dată, nu cred că sunt utile deloc. - BadHorsie 20 mai la 17:08

@on timp ce 1) Veți amesteca roșu și alb, roșu - elemente selectate. Stânga sus este echivalentul selectării * din tabelul A. Dacă în tabelul B nu există elemente care să corespundă condiției. 2) selectați a.x din TableAa include doar coloanele din tabelul A. și selectați a.x, b.x din tabelul A, un tabel de îmbinare stânga b pe a.abs = b.bas poate avea, de asemenea, rezultate cu TableB. În cazul 1: n linia TABLEA poate să apară de mai multe ori (cu rezultate suplimentare de la TableB), în cazul n: m, puteți obține chiar și la n * m rânduri, în cazul n: 1 Tu sunt susceptibile de a vedea rânduri TableB multiplica. - Tino 20 mai 17 la 19:08

@Tino: IMO - cea mai bună descriere a conexiunii externe „, un fel de căsătorie pusca cu: ea face ca masa la un Union - Da, vreau să spun alianța, nu o uniune, chiar dacă tabelul nu corespunde cerințelor normale pentru asociere este de fapt se face prin completarea una sau ambele tabele valori NULL înainte de efectuarea asociației, astfel, în cele din urmă, ei trebuie să îndeplinească aceste cerințe normale. " (Data CJ) - pe data de 20 mai 17 la 19:08

oricum, OMG, este prea inexactă. Deoarece uniunea este termenul SQL, aceste cuvinte vor confunda foarte mult demaratorii nostri scumpi! În plus, dreapta imaginea de jos poate fi văzută ca „real“ al Uniunii, pentru că există doar părți care nu au legătură - și este pentru mine ca o căsătorie tipic pusca este mult mai bine;) - Tino 20 mai '17 la 19:08

@Pranay rana Eu cred că am putea avea nevoie să condiționeze „I“ este secțiunea în care ultima cifră «Excluderea exterioară Participați», astfel încât să obținem rezultatul dorit al interacțiunii B cu Uniunea B. Minus A. consider că cererea este necesar să se actualizeze pentru a selecta din Table_A O FULL OUTER JOIN Table_B B ON A.Key = B.Key UNDE A.Key este nul B.Key IS NULL Dacă folosim SAU, atunci vom obține toate rezultatele a Union B - vinsinraw 20 mai în '17 19:08

INNER JOIN primește toate înregistrările care sunt comune între ambele mese

LEFT JOIN obține toate intrările din tabelul LEFT legat, dar dacă ați selectat mai multe coloane din tabelul RIGHT, dacă nu există înregistrări înrudite, aceste coloane vor conține NULL

RIGHT JOIN este similar cu cele de mai sus, dar obține toate intrările din tabelul RIGHT

FULL JOIN primește toate înregistrările din ambele tabele și din locurile NULL în coloanele în care intrările corespunzătoare nu există în tabelul opus

răspunsul dat de Brian Leeming în 20 mai 17 la 19:07

Vă mulțumim pentru explicația textului! Acest lucru a lucrat pentru mine mult mai bine decât imaginile. - Richard Connamacher 20 mai 17 la 19:07

Acest lucru este incorect din punct de vedere tehnic: "INNER JOIN primește toate înregistrările dintr-un tabel care are o intrare asociată în al doilea tabel" - INNER JOIN nu întoarce doar înregistrări dintr-un tabel. - nietaki 20 mai 17 la 19:07







Trimiteți-le prietenilor: