Cum pot combina rezultatele din mai multe tabele SQL (indiciu: există trei moduri)
De multe ori într-o bază de date relațională se află informațiile pe care doriți să le afișați în interogarea dvs. mai multe mese. Aceasta pune întrebarea „Cum combinați rezultatele din mai multe tabele?”
Toate exemplele pentru această lecție se bazează pe Microsoft SQL Server Management Studio și baza de date AdventureWorks2012. Puteți începe să le utilizați gratuit instrumente folosind Ghidul meu Noțiuni introductive Utilizarea SQL Server.
Care sunt modalitățile prin care pot combina rezultatele din mai multe interogări?
SQL nu ar fi un limbaj foarte util dacă nu Nu vă oferă un mijloc ușor de a combina rezultatele din mai multe interogări. Din fericire, există trei moduri principale prin care puteți combina datele din mai multe tabele. Le vom analiza pe scurt aici și vă vom oferi linkuri către articole mai detaliate.
Trei modalități principale de a combina datele
Datele din tabelele de baze de date relaționale sunt organizate în rânduri și coloane. Pe măsură ce investigăm modalități de combinare a datelor, rețineți că rezultatul final va fi să fie adăugați mai multe coloane la un rezultat, poate dintr-un alt tabel asociat, fie rânduri, luând un set de rânduri din două sau mai multe tabele s.
Când majoritatea oamenilor învață să combine date despre care învață:
- ÎNSCRIERE – Puteți utiliza îmbinări pentru a combina coloane dintr-una sau mai multe interogări într-un singur rezultat.
- UNION – Utilizați Unions și alți operatori de seturi pentru a combina rânduri de la una sau mai multe interogări într-un singur rezultat.
- Sub Interogări – Uneori numite interogări imbricate, acestea pot fi utilizate pentru a efectua o căutare separată în baza de date a arătat că rezultatele pot fi utilizate într-o altă interogare.
Îmbinări
Îmi place să mă gândesc la îmbinări ca adezivul care pune baza de date la loc. Bazele de date relaționale sunt de obicei normalizate pentru a face datele mai ușor de întreținut și pentru a îmbunătăți performanța, dar rezultatul final este că informațiile sunt separate în mai multe tabele. Puteți utiliza Joins pentru a recombina acele informații într-un format mai ușor de citit de om. Datele sunt recombinate prin potrivirea coloanelor din fiecare tabel.
În toate cazurile, îmbinările necesită două ingrediente principale: două tabele și o condiție de îmbinare. Tabelele sunt ceea ce vom folosi pentru a trage rândurile și coloanele, iar condiția de asociere este modul în care intenționăm să potrivim coloanele între tabele.
Exemplu ÎNREGISTRARE
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
Există două tipuri principale de îmbinări. Îmbinările interioare și îmbinările exterioare.
Îmbinările interioare returnează un rând rezultat numai dacă condiția de asociere se potrivește în ambele tabele. Îmbinările interioare sunt utilizate în principal pentru a potrivi cheia primară a unei tabele cu o cheie străină în alta.
Al doilea tip de îmbinare este o îmbinare exterioară. Îmbinările exterioare returnează întotdeauna cel puțin un rând pentru tabelul principal, denumit tabelul din stânga sau din dreapta, și valori nule în coloanele corespunzătoare ale coloanei care nu se potrivesc. Îmbinările exterioare sunt utile pentru a găsi date care nu se potrivesc.
Este important să rețineți că îmbinările pot returna mai multe rânduri decât există în ambele tabele combinate. Alăturările returnează combinații de meciuri. Dacă alăturați două tabele, unul conținând 5 rânduri și celălalt 10, rezultatul poate conține de la 0 la 50 de rânduri în funcție de condiția de asociere.
Uniuni
O UNIUNE este folosit pentru a combina rândurile a două sau mai multe interogări într-un singur rezultat. Uniunea este numită operator de set.
Există câteva condiții speciale care trebuie să apară pentru ca un sindicat să funcționeze. În primul rând, fiecare interogare trebuie să aibă același număr de coloane. În al doilea rând, tipurile de date ale acestor coloane trebuie să fie compatibile. În general vorbind, fiecare interogare trebuie să returneze același număr și tip de coloane.
Un exemplu practic de unire este atunci când două tabele conțin numere de piesă și doriți să creați o listă combinată pentru un catalog. Puteți alege fie ca rezultatul final să fie o listă unică pentru interogarea combinată, fie dacă utilizați UNION ALL pentru a returna toate rândurile din fiecare tabel.
Exemplu UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
În plus față de Uniune, există și câțiva alți operatori de seturi la îndemână:
- INTERSECT – Puteți utiliza acest lucru pentru a returna numai rândurile care sunt comune între două tabele.
- EXCEPT – Puteți utiliza acest lucru pentru a returna rândurile care există pe o masă, dar care nu se găsesc în alta.
Pe măsură ce aflați mai multe SQL, găsiți că puteți utiliza îmbinări pentru a scrie instrucțiuni echivalente pentru Intersect și Except, dar nu există echivalente pentru Union.
Subconsultări
Subconsultările sunt uneori numite interogări imbricate. Sunt interogări definite în interiorul altor interogări. Subcercetările pot fi confuze. Cred că multe din acestea provin din faptul că pot fi utilizate în multe locuri într-o instrucțiune SQL select și, în mai multe scopuri!
De exemplu, iată câteva zone în care este posibil să vedeți o subinterogare:
- Clauză SELECT – Utilizată pentru a returna o valoare. De exemplu, dacă interogați un tabel de vânzări, puteți include vânzările totale returnând o sumă a tuturor vânzărilor dintr-o subinterogare.
- Clauza WHERE – Subcercetările pot fi utilizate în clauza unde în comparații. Puteți configura o comparație pentru a compara vânzările cu media generală. Media generală ar fi returnată dintr-o subinterogare. De asemenea, puteți utiliza subinterogări în operatori de membru, cum ar fi IN. Mai degrabă decât codificarea clară a clauzei in, puteți utiliza o subconsultare pentru ao face mai dinamică.
- Clauză HAVING – O comparație a clauzei HAVING include o singură valoare dintr-o subconsultare.
Exemplu de interogare
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
Când este utilizat în clauze select și operatori de comparație, cum ar fi egali, mai mari decât și mai mici decât , o interogare poate returna doar un rând. Dacă este utilizat împreună cu un operator de membru, cum ar fi IN, este OK ca interogarea să returneze unul sau mai multe rânduri.