SQLShack (Română)

Acest articol va oferi o imagine de ansamblu completă, cu exemple a îmbinării externe SQL, inclusiv îmbinarea exterioară completă, dreapta și stânga, precum și acoperirea uniunii dintre îmbinările externe SQL stânga și dreapta.

Este esențial să înțelegeți procesul pentru a obține datele din multiplu Mese. Este posibil ca un începător să nu aibă ideea de a se alătura în SQL Server. În acest sfat, vom face o prezentare generală a îmbinărilor SQL, vom învăța SQL OUTER JOIN împreună cu sintaxa, exemplele și cazurile de utilizare.

Într-un sistem de baze de date relaționale, este recomandată respectarea principiilor de Normalizare, în care, practic, împărțim tabele mari în tabele mai mici. Într-o declarație select, putem prelua datele din aceste tabele folosind îmbinări. Ne putem alătura tabelelor și putem obține câmpurile obligatorii din aceste tabele în setul de rezultate. Aceste tabele ar trebui să aibă un câmp comun pentru a se relaționa între ele. S-ar putea să găsiți date împărțite în mai multe baze de date și uneori este și o structură foarte complexă. Cu Joins, putem uni datele între ele din tabelele multiple, bazele de date într-un mod ușor de utilizat și să reprezentăm aceste date în aplicație.

Putem reprezenta un SQL JOIN folosind următoarea imagine

Putem multe tipuri SQL Join în SQL Server. În următoarea imagine, puteți vedea categoriile SQL Joins

Să explorăm detaliile SQL Outer Join în secțiunea viitoare.

Prezentare generală a SQL OUTER JOIN

Folosim SQL OUTER JOIN pentru a potrivi rânduri între tabele. S-ar putea să dorim să obținem rânduri de potrivire împreună cu rânduri de neegalat de la unul sau ambele tabele. Avem următoarele trei tipuri de SQL OUTER JOINS.

  1. SQL Full Outer Join
  2. SQL Left Outer Join
  3. SQL Right Outer Join

Să explorăm fiecare dintre SQL Outer Join cu exemple.

SQL Full Outer Join

În SQL Full Outer Join, toate rândurile din ambele tabele sunt incluse . Dacă există rânduri de neegalat, acesta afișează valori NULL pentru acestea.

Putem înțelege eficient folosind exemple. Să creăm un eșantion de tabel și să inserăm date în el.

Puteți consulta următorul model de date pentru ambele tabele.

Inserați date în tabelul angajaților cu următorul script.

Inserați date în tabelul Departamente

Putem reprezenta o relație logică între două tabele folosind o diagramă Venn. Într-o diagramă Venn conține mai multe cercuri suprapuse și fiecare cerc reprezintă o entitate sau un tabel. Zona comună sau zona suprapusă din diagrama Venn reprezintă valorile comune dintre ambele tabele.

De exemplu, în următoarea captură de ecran, avem două cercuri suprapuse. Fiecare cerc are un tabel (Angajat și Departamente). Să înțelegem FULL Outer Join folosind următorul exemplu.

Avem un câmp comun (EmpID) în ambele tabele; prin urmare, ne putem alătura tabelului cu această coloană. În următoarea interogare, am definit FULL OUTER JOIN între departamente și tabela Angajați pe coloana EMPID din ambele tabele.

1
2
3

SELECT *
FROM Angajat
FULL OUTER JOIN Departamente ON Employee.EmpID = Departments.EmpID;

SQL Full Outer Join oferă următoarele rânduri într-o ieșire

  • Rânduri potrivite între ambele tabele
  • Rânduri neegalate din ambele tabele (valori NULL) )

Să executăm această interogare pentru a returna rezultatul interogării Full Outer Join. Obținem următoarea ieșire.

Putem vedea și câteva înregistrări cu valori NULL. Să înțelegem acest lucru într-un mod mai bun folosind o diagramă Venn.

În următoarea captură de ecran, puteți vedea următoarele informații

  • EmpID 1, 2,3,4,5 , 6,10 există atât în tabelul Angajaților, cât și în cel al Departamentelor. În rezultatul interogării Full Outer Join, obținem toate aceste rânduri cu date din ambele tabele
  • EmpID 7, 8, 9 există în tabelul Angajați, dar nu în tabelul Departamente. Nu include niciun rând corespunzător în tabelul departamentelor; prin urmare; obținem valori NULL pentru acele înregistrări

Acum, în scop demo, să introducem încă o înregistrare în tabelele Departamente . În această interogare, inserăm EmpID 11 care nu există în tabelul Angajați.

Executați din nou interogarea SQL Full Outer Join. În imaginea următoare, primiți un rând suplimentar cu valori NULL. Nu avem nicio linie potrivită pentru EmpID 11 în tabelul angajaților.Datorită acestui fapt, obținem valori NULL în rezultat.

Ca rezumat, putem reprezenta SQL Full Outer Join folosind următoarea diagramă Venn. Obținem ceea ce este reprezentat în zona evidențiată în rezultatul Îmbinării externe complete.

SQL FULL OUTER JOIN și clauza WHERE

Putem adăuga o clauză WHERE cu un SQL FULL OUTER JOIN pentru a obține rânduri fără date potrivite între ambele tabele Join.

În următoarea interogare, adăugăm o clauză where la afișează numai înregistrări cu valori NULL.

1
2
3
4
5

SELECT *
DIN Angajat
FULL OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID
WHERE Employee.EmpID IS NULL
SAU Departments.EmpID IS NULL;

Executați această comandă și vizualizați rezultatul. Returnează numai rânduri care nu se potrivesc nici în tabelul Angajați, nici în Departamente.

SQL LEFT OUTER JOIN

Într-un SQL Left Outer Join, obținem următoarele rânduri în rezultatul nostru.

  • Oferă ieșirea rândului care se potrivește între ambele tabele
  • Dacă nu se potrivesc înregistrări din tabelul din stânga, arată, de asemenea, acele înregistrări cu valori NULL

Executați următorul cod pentru a returna ieșirea SQL LEFT OUTER JOIN

1
2
3

SELECT *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

În imaginea următoare, puteți vedea că avem valori NULL pentru EmpID 7,8 și 9. Aceste EmpID nu există în partea dreaptă Tabel departament.

Trebuie să notăm poziția plasării tabelului în instrucțiunea Join. În prezent, avem un tabel pentru angajați în partea stângă și tabelul Departamente în partea dreaptă.

Să rescriem interogarea și să schimbăm poziția tabelelor în interogare. În această interogare, avem tabelul Departament în poziția stânga, astfel încât Unirea exterioară stângă ar trebui să verifice valorile pentru acest tabel și să returneze o valoare NULL în caz de nepotrivire.

În următoarea captură de ecran, puteți vezi că o singură valoare NULL pentru EmpID 11. Acest lucru se datorează faptului că EmpID 11 nu este disponibil în tabelul angajaților.

As un rezumat, putem reprezenta SQL Left Outer Join folosind următoarea diagramă Venn. Obținem zona evidențiată în ieșirea SQL Left Outer Join.

SQL Right OUTER JOIN

În SQL Right Outer Join, obținem următoarele rânduri în rezultatul nostru.

  • Oferă ieșirea rândului care se potrivește între ambele tabele
  • Dacă nu se potrivesc înregistrări din tabelul din dreapta, arată, de asemenea, acele înregistrări cu valori NULL

Executați următoarea interogare pentru a obține ieșirea Îmbinării externe dreapta

1
2
3

SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

În imaginea următoare, puteți vedea că obținem toate rândurile potrivite împreună cu un rând cu valori NULL. Rândul cu valoare nulă are EmpID 11, deoarece nu există în tabelul Angajați. De asemenea, puteți observa că poziția tabelului Departament este în poziția corectă în Alăturați-vă. Datorită acestui fapt, nu obținem valori din tabelul Angajaților (poziția din stânga) care nu se potrivește cu tabelul Departamentului (partea din dreapta).

După cum sa evidențiat mai devreme, poziția tabelului este importantă în instrucțiunea JOIN. Dacă schimbăm pozițiile tabelului, obținem rezultate diferite. În următoarea interogare, avem tabelul Departamente (stânga) și tabelul angajaților (dreapta).

1
2
3
4

SELECT *
FROM Departments
RIGHT OUTER JOIN Employee ON Departments.EmpID = Employee.EmpID

Puteți observa diferența în Unirea exterioară dreaptă după schimbarea pozițiilor tabelelor în interogarea de mai sus.

Ca rezumat, putem reprezenta îmbinarea exterioară dreaptă SQL utilizând următoarea diagramă Venn. Obținem zona evidențiată în ieșirea SQL Right Outer Join.

Uniunea dintre SQL Left Outer Join și SQL Right Outer Join

În exemplele anterioare, am explorat SQL Left Outer Join și SQL Right Outer Join cu diferite exemple. Putem face o uniune a rezultatului atât al SQL Left Outer Join, cât și al SQL Right Outer Join. Oferă ieșirea SQL Full Outer Join.

Executați următoarea interogare ca alternativă la SQL Full Outer Join.

1
2
3
4
5
6
7

SELECT *
DIN Angajat
STÂNGA EXTERA ÎNREGISTRARE Departamente ON Employee.EmpID = Departments.EmpID
UNION ALL
SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

În rezultatul următor, obținem toate înregistrări de potrivire, înregistrări de neegalat din tabelul din stânga și înregistrări de neegalat din tabelul din dreapta. Este similar cu o ieșire a SQL Full Outer Join.

Concluzie

În acest articol, am explorat SQL Outer Join și tipurile sale împreună cu exemple. Sper că ți s-a părut util acest articol. Simțiți-vă liber să oferiți feedback în comentariile de mai jos.

  • Autor
  • Postări recente
În calitate de trainer certificat MCSA și certificat Microsoft în Gurgaon, India, cu o experiență de 13 ani, Rajendra lucrează pentru o varietate de companii mari concentrându-se pe optimizarea performanței, monitorizarea, disponibilitatea ridicată și strategiile și implementarea recuperării în caz de dezastru. El este autorul a sute de articole autorizate despre SQL Server, Azure, MySQL, Linux, Power BI, Tuning de performanță, AWS / Amazon RDS, Git și tehnologii conexe care au fost vizualizate de peste 10 milioane de cititori până în prezent.
El este creatorul uneia dintre cele mai mari colecții online gratuite de articole pe un singur subiect, cu seria sa de 50 de părți despre SQL Server Always On Availability Groups. Pe baza contribuției sale la comunitatea SQL Server, a fost recunoscut cu diverse premii, inclusiv prestigiosul „Cel mai bun autor al anului” continuu în 2020 și 2021 la SQLShack.
Raj este mereu interesat de noi provocări, deci dacă aveți nevoie de consultanță ajutor cu privire la orice subiect acoperit în scrierile sale, el poate fi contactat la [email protected]
Vezi toate mesajele lui Rajendra Gupta

Ultimele postări ale lui Rajendra Gupta (vezi toate)
  • Timpul sesiunii în SQL Server întotdeauna disponibil Grupuri – 8 februarie 2021
  • Efectuarea actualizărilor versiunii minore și majore pentru AWS RDS SQL Server – 29 ianuarie 2021
  • Implementarea instanțelor AWS RDS PostgreSQL – 27 ianuarie 2021

Write a Comment

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *