Come combino i risultati di più tabelle SQL (suggerimento: ci sono tre modi)
Molte volte in un database relazionale si trovano le informazioni che vuoi mostrare nella tua query più di un tavolo. Ciò solleva la domanda “Come combini i risultati di più di una tabella?”
Tutti gli esempi di questa lezione sono basati su Microsoft SQL Server Management Studio e sul database AdventureWorks2012. Puoi iniziare a utilizzarli gratuitamente strumenti utilizzando la mia guida Introduzione all’uso di SQL Server.
Quali sono i modi in cui posso combinare i risultati di più di una query?
SQL non sarebbe un linguaggio molto utile se non lo facesse Non fornisce un mezzo semplice per combinare i risultati di più di una query. Fortunatamente, ci sono tre modi principali per combinare i dati di più tabelle. Li esamineremo brevemente qui e forniremo collegamenti ad articoli più approfonditi.
Tre modi principali per combinare i dati
I dati nelle tabelle del database relazionale sono organizzati in righe e colonne. Mentre esaminiamo i modi per combinare i dati, tieni presente che il risultato finale sarà quello di aggiungere più colonne a un risultato, magari da un’altra tabella correlata, o righe, prendendo un insieme di righe da due o più tabelle s.
Quando la maggior parte delle persone impara a combinare i dati che apprende:
- PARTECIPA – Puoi utilizzare i join per combinare le colonne di una o più query in un unico risultato.
- UNION – Utilizza le unioni e altri operatori di gruppo per combinare le righe di una o più query in un unico risultato.
- Sottoquery: a volte chiamate query nidificate, possono essere utilizzate per eseguire una ricerca il database ha mostrato che i risultati possono essere usati in un’altra query.
Join
Mi piace pensare ai join come il collante che rimette insieme il database. I database relazionali sono generalmente normalizzati per rendere i dati più facili da mantenere e per migliorare le prestazioni, ma il risultato finale è che le informazioni sono separate in molte tabelle. Puoi utilizzare i join per ricombinare queste informazioni in un formato più leggibile dall’uomo. I dati vengono ricombinati facendo corrispondere le colonne di ciascuna tabella.
In tutti i casi, i join richiedono due ingredienti principali: due tabelle e una condizione di join. Le tabelle sono ciò che useremo per estrarre le righe e le colonne e la condizione di join è il modo in cui intendiamo abbinare le colonne tra le tabelle.
Esempio JOIN
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
Esistono due tipi principali di join. Inner join e Outer join.
Inner join restituiscono una riga risultante solo se la condizione di join corrisponde in entrambe le tabelle. I join interni vengono utilizzati principalmente per abbinare la chiave primaria di una tabella a una chiave esterna in un’altra.
Il secondo tipo di join è un join esterno. Gli outer join restituiscono sempre almeno una riga per la tabella principale, denominata tabella Left o Right, e valori null nelle colonne corrispondenti della colonna non corrispondente. I join esterni sono utili per trovare dati non corrispondenti.
È importante notare che i join possono restituire più righe di quante ne esistono in entrambe le tabelle combinate. I join restituiscono combinazioni di partite. Se unisci due tabelle, una contenente 5 righe e l’altra 10, il risultato può contenere da 0 a 50 righe a seconda della condizione di unione.
Unioni
Un’UNIONE è utilizzato per combinare le righe di due o più query in un unico risultato. L’unione è chiamata operatore di gruppo.
Ci sono alcune condizioni speciali che devono verificarsi affinché un’unione funzioni. Innanzitutto, ogni query deve avere lo stesso numero di colonne. In secondo luogo, i tipi di dati di queste colonne devono essere compatibili. In generale, ogni query deve restituire lo stesso numero e tipo di colonne.
Un esempio pratico di unione è quando due tabelle contengono numeri di parte e si desidera creare un elenco combinato per un catalogo. Puoi scegliere di fare in modo che il risultato finale sia un elenco univoco per la query combinata oppure, se utilizzi UNION ALL, restituire tutte le righe di ciascuna tabella.
Esempio UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
Oltre a Union ci sono un paio di altri pratici operatori di insiemi:
- INTERSECT – Puoi usarlo per restituire solo righe comuni tra due tabelle.
- EXCEPT – Puoi usarlo per restituire righe che esistono su una tabella, ma non si trovano in un’altra.
Man mano che vai avanti per saperne di più SQL trovi che puoi usare i join per scrivere istruzioni equivalenti per Intersect e Except, ma non ci sono equivalenti per Union.
Sottoquery
Le sottoquery sono talvolta chiamate query nidificate. Sono query definite all’interno di altre query. Le sottoquery possono creare confusione. Penso che molto di questo derivi dal fatto che possono essere usati in molti posti in un’istruzione SQL select e per diversi scopi!
Ad esempio, qui ci sono alcune aree in cui potresti vedere una sottoquery:
- clausola SELECT: utilizzata per restituire un valore. Ad esempio, se esegui una query su una tabella delle vendite, potresti includere le vendite totali restituendo la somma di tutte le vendite all’interno di una sottoquery.
- Clausola WHERE – Le sottoquery possono essere utilizzate nella clausola where nei confronti. È possibile impostare un confronto per confrontare le vendite con la media complessiva. La media complessiva verrebbe restituita da una sottoquery. È inoltre possibile utilizzare sottoquery in operatori di appartenenza come IN. Anziché codificare in modo rigido la clausola in, è possibile utilizzare una sottoquery per renderla più dinamica.
- Clausola HAVING: nei confronti delle clausole HAVING è incluso un singolo valore di una sottoquery.
Sottoquery di esempio
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
Se utilizzato in clausole select e operatori di confronto come uguale, maggiore di e minore di , una sottoquery può restituire solo una riga. Se utilizzato insieme a un operatore di appartenenza, come IN, è consentito che la query restituisca una o più righe.