Wie kombiniere ich Ergebnisse aus mehreren SQL-Tabellen (Hinweis: Es gibt drei Möglichkeiten)
In einer relationalen Datenbank befinden sich häufig die Informationen, die Sie in Ihrer Abfrage anzeigen möchten mehr als ein Tisch. Dies wirft die Frage auf: „Wie kombinieren Sie Ergebnisse aus mehr als einer Tabelle?“
Alle Beispiele für diese Lektion basieren auf Microsoft SQL Server Management Studio und der AdventureWorks2012-Datenbank. Sie können diese kostenlos verwenden Tools mit meinem Handbuch Erste Schritte mit SQL Server.
Wie kann ich Ergebnisse aus mehr als einer Abfrage kombinieren?
SQL wäre keine sehr nützliche Sprache, wenn dies nicht der Fall wäre Es gibt keine einfache Möglichkeit, Ergebnisse aus mehr als einer Abfrage zu kombinieren. Glücklicherweise gibt es drei Möglichkeiten, Daten aus mehreren Tabellen zu kombinieren. Wir werden diese hier kurz durchgehen und Links zu ausführlicheren Artikeln bereitstellen.
Drei Hauptmethoden zum Kombinieren von Daten
Daten in relationalen Datenbanktabellen sind in Zeilen und Spalten organisiert. Beachten Sie bei der Untersuchung der Möglichkeiten zum Kombinieren von Daten, dass das Endergebnis zu lautet Fügen Sie einem Ergebnis entweder mehr Spalten hinzu, möglicherweise aus einer anderen verwandten Tabelle, oder Zeilen, indem Sie eine Reihe von Zeilen aus zwei oder mehr Tabellen übernehmen s.
Wenn die meisten Leute lernen, Daten zu kombinieren, lernen sie Folgendes:
- JOIN – Sie können Joins verwenden, um Spalten aus einer oder mehreren Abfragen zu einem Ergebnis zu kombinieren.
- UNION – Verwenden Sie Unions und andere Mengenoperatoren, um Zeilen aus einer oder mehreren Abfragen zu einem Ergebnis zu kombinieren.
- Unterabfragen – Manchmal als verschachtelte Abfragen bezeichnet, können diese verwendet werden, um eine separate Suche in durchzuführen Die in der Datenbank angezeigten Ergebnisse können in einer anderen Abfrage verwendet werden.
Verknüpfungen
Ich stelle mir Verknüpfungen gerne als den Klebstoff vor, der die Datenbank wieder zusammensetzt. Relationale Datenbanken werden normalerweise normalisiert, um die Wartung der Daten zu vereinfachen und die Leistung zu verbessern. Das Endergebnis ist jedoch, dass die Informationen in viele Tabellen unterteilt sind. Sie können Joins verwenden, um diese Informationen wieder zu einem besser lesbaren Format zusammenzufassen. Die Daten werden durch Übereinstimmen der Spalten aus jeder Tabelle neu kombiniert.
In allen Fällen erfordern Verknüpfungen zwei Hauptbestandteile: Zwei Tabellen und eine Verknüpfungsbedingung. Die Tabellen werden zum Abrufen der Zeilen und Spalten verwendet. Mit der Verknüpfungsbedingung möchten wir die Spalten zwischen den Tabellen abgleichen.
Beispiel JOIN
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
Es gibt zwei Haupttypen von Verknüpfungen. Innere Verknüpfungen und äußere Verknüpfungen.
Innere Verknüpfungen geben nur dann eine resultierende Zeile zurück, wenn die Verknüpfungsbedingung in beiden Tabellen übereinstimmt. Innere Verknüpfungen werden hauptsächlich verwendet, um dem Primärschlüssel einer Tabelle einen Fremdschlüssel in einer anderen zuzuordnen.
Die zweite Art der Verknüpfung ist eine äußere Verknüpfung. Äußere Verknüpfungen geben immer mindestens eine Zeile für die Haupttabelle zurück, die als linke oder rechte Tabelle bezeichnet wird, und Nullwerte in den entsprechenden Spalten der nicht übereinstimmenden Spalte. Äußere Verknüpfungen sind nützlich, um nicht übereinstimmende Daten zu finden.
Es ist wichtig zu beachten, dass Verknüpfungen mehr Zeilen zurückgeben können, als in beiden Tabellen zusammen vorhanden sind. Die Joins geben Kombinationen von Übereinstimmungen zurück. Wenn Sie zwei Tabellen verbinden, eine mit 5 Zeilen und die andere mit 10 Zeilen, kann das Ergebnis je nach Verknüpfungsbedingung zwischen 0 und 50 Zeilen enthalten.
Gewerkschaften
Eine UNION ist wird verwendet, um die Zeilen von zwei oder mehr Abfragen zu einem Ergebnis zu kombinieren. Die Union wird als Set-Operator bezeichnet.
Es müssen einige spezielle Bedingungen erfüllt sein, damit eine Union funktioniert. Erstens muss jede Abfrage dieselbe Anzahl von Spalten haben. Zweitens müssen die Datentypen dieser Spalten kompatibel sein. Im Allgemeinen muss jede Abfrage dieselbe Anzahl und denselben Spaltentyp zurückgeben.
Ein praktisches Beispiel für die Vereinigung ist, wenn zwei Tabellen Teilenummern enthalten und Sie eine kombinierte Liste für einen Katalog erstellen möchten. Sie können entweder festlegen, dass das Endergebnis eine eindeutige Auflistung für die kombinierte Abfrage ist, oder wenn Sie UNION ALL verwenden, werden alle Zeilen aus jeder Tabelle zurückgegeben.
Beispiel UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
Zusätzlich zu Union gibt es einige andere nützliche Mengenoperatoren:
- INTERSECT – Mit dieser Option können Sie nur Zeilen zurückgeben, die zwischen zwei Tabellen gemeinsam sind.
- EXCEPT – Sie können dies verwenden, um Zeilen zurückzugeben, die in einer Tabelle vorhanden sind, aber in einer anderen nicht gefunden werden.
Wenn Sie weitere Informationen zu SQL erhalten, finden Sie diese Sie können Joins verwenden, um äquivalente Anweisungen für Intersect und Except zu schreiben, aber es gibt keine Äquivalente für Union.
Unterabfragen
Unterabfragen werden manchmal als verschachtelte Abfragen bezeichnet. Sie sind Abfragen, die in anderen Abfragen definiert sind. Unterabfragen können verwirrend sein. Ich denke, ein Großteil davon beruht auf der Tatsache, dass sie an vielen Stellen in einer SQL-Select-Anweisung und für verschiedene Zwecke verwendet werden können!
In einigen Bereichen wird möglicherweise eine Unterabfrage angezeigt:
- SELECT-Klausel – Wird verwendet, um einen Wert zurückzugeben. Wenn Sie beispielsweise eine Verkaufstabelle abfragen, können Sie den Gesamtumsatz einbeziehen, indem Sie eine Summe aller Verkäufe aus einer Unterabfrage zurückgeben.
- WHERE-Klausel – Unterabfragen können in der where-Klausel in Vergleichen verwendet werden. Sie können einen Vergleich erstellen, um den Umsatz mit dem Gesamtdurchschnitt zu vergleichen. Der Gesamtdurchschnitt würde aus einer Unterabfrage zurückgegeben. Sie können Unterabfragen auch in Mitgliedschaftsoperatoren wie IN verwenden. Anstatt die in-Klausel fest zu codieren, können Sie eine Unterabfrage verwenden, um sie dynamischer zu gestalten.
- HAVING-Klausel – Ein einzelner Wert aus einer Unterabfrage ist in den HAVING-Klauselvergleichen enthalten.
Beispielunterabfrage
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
Bei Verwendung in Auswahlklauseln und Vergleichsoperatoren wie gleich, größer als und kleiner als kann eine Unterabfrage nur eine Zeile zurückgeben. In Verbindung mit einem Mitgliedschaftsoperator wie IN kann die Abfrage eine oder mehrere Zeilen zurückgeben.