SQL: Unterabfragen vs. JOIN
Unterabfragen und Verknüpfungen sind zwei wichtige Konzepte in SQL, der Standardprogrammiersprache zum Verwalten und Bearbeiten von Datenbanken. In diesem Blog werden wir untersuchen, was Unterabfragen und Verknüpfungen sind, wie sie sich unterscheiden und wann sie in Ihren SQL-Abfragen verwendet werden.
Was sind Unterabfragen?
Eine Unterabfrage ist eine Abfrage innerhalb einer Abfrage. Es ist eine Möglichkeit, eine SELECT-Anweisung in eine andere SELECT-, INSERT-, UPDATE- oder DELETE-Anweisung oder in eine CREATE VIEW-Anweisung zu verschachteln. Unterabfragen können verwendet werden, um eine Vielzahl von Aufgaben auszuführen, wie zum Beispiel:
- Filtern von Zeilen basierend auf einer Bedingung
- Berechnen von Werten zur Verwendung in der äußeren Abfrage
- Zurückgeben eines einzelnen Werts oder mehrerer Werte als Teil der äußeren Abfrage
Ein Join ist eine Möglichkeit, Zeilen aus zwei oder mehr Tabellen basierend auf einer verwandten Spalte zwischen ihnen zu kombinieren. Es gibt verschiedene Arten von Joins, darunter INNER JOIN, OUTER JOIN und CROSS JOIN.
Ein INNER JOIN gibt nur die Zeilen zurück, die der Join-Bedingung entsprechen.
Ein OUTER JOIN gibt alle Zeilen aus beiden Tabellen zurück, einschließlich derjenigen, die nicht der Join-Bedingung entsprechen. Es gibt zwei Arten von Outer Joins: LEFT JOIN und RIGHT JOIN. Ein LEFT JOIN gibt alle Zeilen aus der linken Tabelle (der ersten Tabelle in der Abfrage) und alle übereinstimmenden Zeilen aus der rechten Tabelle zurück. Ein RIGHT JOIN gibt alle Zeilen aus der rechten Tabelle (der zweiten Tabelle in der Abfrage) und alle übereinstimmenden Zeilen aus der linken Tabelle zurück.
Ein CROSS JOIN gibt das kartesische Produkt der beiden Tabellen zurück, das eine Kombination aller Zeilen aus beiden Tabellen ist.
Praxisbeispiel:
In diesem Szenario haben wir eine Hogwarts-Datenbank und die folgenden Tabellen sind unten aufgeführt:
- course_table: Diese Tabelle enthält Daten zu Kursnamen und wird über einen eindeutigen Primärschlüssel identifiziert
- student_table: Diese Tabelle enthält Daten zu Studentennamen, die durch einen eindeutigen Primärschlüssel identifiziert werden
- enrollment_table: Diese Tabelle ist die JOIN-Tabelle, die die Beziehung zwischen Studenten und Kursen herstellt. Jedes Mal, wenn sich ein Student in einen Kurs einschreibt, wird ein neuer Datensatz erstellt. die course_id ist der Fremdschlüssel zum Identifizieren eines Kurses aus der course_table, und die student_id ist ein Fremdschlüssel zum Identifizieren eines Studenten aus der student_table.
course:
+─────+────────────────────────────────+
| id | course |
+─────+────────────────────────────────+
| 1 | Defense against the dark arts |
| 2 | Potions |
| 3 | History of magic |
+─────+────────────────────────────────+
student:
+─────+────────────────────────────────+
| id | student |
+─────+────────────────────────────────+
| 1 | Harry Potter |
| 2 | Hermione Granger |
| 3 | Ron Weasly |
| 4 | Voldemort |
| 5 | Draco Malfoy |
+─────+────────────────────────────────+
enrollment:
+─────+────────────+─────────────+
| id | course_id | student_id |
+─────+────────────+─────────────+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 2 |
| 4 | 2 | 3 |
| 5 | 3 | 4 |
| 6 | 1 | 5 |
| 7 | 3 | 1 |
| 8 | 1 | 4 |
+─────+────────────+─────────────+
Unten aufgeführt ist ein Beispiel für den Subquery-Ansatz.
SELECT * FROM enrollment
WHERE enrollment.course_id IN (SELECT * FROM courses WHERE course_id = 1);
BEITRETEN
Nachfolgend ist der Join-Ansatz aufgeführt.
SELECT * FROM course AS c
LEFT JOIN enrollment AS e ON c.id = e.course_id
WHERE e.course_id = 1
Wann Sie Unterabfragen und Joins verwenden sollten
Unterabfragen und Verknüpfungen können beide verwendet werden, um Daten aus mehreren Tabellen abzurufen, aber sie haben unterschiedliche Anwendungsfälle. Unterabfragen werden im Allgemeinen verwendet, wenn Sie die Ergebnisse der inneren Abfrage in der WHERE- oder HAVING-Klausel der äußeren Abfrage verwenden möchten. Sie sind auch nützlich, wenn Sie einen einzelnen Wert oder mehrere Werte als Teil der äußeren Abfrage zurückgeben möchten.
Verknüpfungen werden im Allgemeinen verwendet, wenn Sie Daten aus mehreren Tabellen basierend auf einer verwandten Spalte zwischen ihnen abrufen möchten. Sie sind auch nützlich, wenn Sie alle Zeilen aus beiden Tabellen zurückgeben möchten, einschließlich derjenigen, die nicht der Join-Bedingung entsprechen.
Im Allgemeinen sind Unterabfragen effizienter, wenn Sie nur wenige Zeilen zurückgeben müssen, während Joins effizienter sind, wenn Sie eine große Anzahl von Zeilen zurückgeben müssen. Der Leistungsunterschied zwischen den beiden kann jedoch je nach Größe der Tabellen und Komplexität der Abfragen variieren.
Zusammenfassend sind Unterabfragen und Verknüpfungen zwei wichtige Tools zum Abrufen von Daten aus mehreren Tabellen in SQL. Unterabfragen sind nützlich, um Zeilen zu filtern und Werte als Teil der äußeren Abfrage zurückzugeben, während Joins nützlich sind, um Zeilen aus mehreren Tabellen basierend auf einer verwandten Spalte zu kombinieren. Beide können verwendet werden, um ähnliche Ziele zu erreichen, aber die Wahl der zu verwendenden Methode hängt von den spezifischen Anforderungen Ihrer Abfrage ab.

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































