MySQL SubQuery-Tutorial mit Beispielen
Was sind Unterabfragen?
Eine Unterabfrage ist eine Auswahlabfrage, die in einer anderen Abfrage enthalten ist. Die innere Auswahlabfrage wird normalerweise verwendet, um die Ergebnisse der äußeren Auswahlabfrage zu ermitteln.
Schauen wir uns die Syntax der Unterabfrage an –
Eine häufige Kundenbeschwerde bei der MyFlix-Videobibliothek ist die geringe Anzahl an Filmtiteln. Das Management möchte Filme für eine Kategorie kaufen, die die geringste Anzahl an Titeln aufweist.
Sie können eine Abfrage wie verwenden
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Es gibt ein Ergebnis
Sehen wir uns an, wie diese Abfrage funktioniert
Das Obige ist eine Form von Zeilenunterabfrage. Bei solchen Unterabfragen kann die innere Abfrage nur EIN Ergebnis liefern. Die zulässigen Operatoren bei der Arbeit mit Zeilenunterabfragen sind [=, >, =, <=, ,!=, ]
Schauen wir uns ein anderes Beispiel an:
Angenommen, Sie möchten Namen und Telefonnummern von Mitgliedern von Personen, die einen Film ausgeliehen und noch nicht zurückgegeben haben. Sobald Sie Namen und Telefonnummer haben, rufen Sie sie an, um sie daran zu erinnern. Sie können eine Abfrage wie folgt verwenden:
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Sehen wir uns an, wie diese Abfrage funktioniert
In diesem Fall gibt die innere Abfrage mehr als ein Ergebnis zurück. Das Obige ist Typ Tfähiger Unterabfragey.
Bisher haben wir zwei Abfragen gesehen, sehen wir uns nun ein Beispiel dafür an Dreifache Abfrage!!!
Angenommen, das Management möchte das bestbezahlte Mitglied belohnen.
Wir können eine Abfrage ausführen wie
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Die obige Abfrage liefert das folgende Ergebnis:
Unterabfragen vs. Joins!
Im Vergleich zu Joins sind Unterabfragen einfach zu verwenden und leicht zu lesen. Sie sind nicht so kompliziert wie Joins
Daher werden sie häufig von verwendet SQL-Anfänger.
Unterabfragen weisen jedoch Leistungsprobleme auf. Die Verwendung eines Joins anstelle einer Unterabfrage kann manchmal zu einer bis zu 500-fachen Leistungssteigerung führen.
Wenn Sie die Wahl haben, wird empfohlen, einen JOIN für eine Unterabfrage zu verwenden.
Unterabfragen sollten nur als Fallback-Lösung verwendet werden, wenn Sie eine JOIN-Operation nicht verwenden können, um das oben genannte zu erreichen
Zusammenfassung
- Unterabfragen sind eingebettete Abfragen innerhalb einer anderen Abfrage. Die eingebettete Abfrage wird als innere Abfrage und die Containerabfrage als äußere Abfrage bezeichnet.
- Unterabfragen sind einfach zu verwenden, bieten große Flexibilität und können leicht in einzelne logische Komponenten zerlegt werden, aus denen die Abfrage besteht, was sehr nützlich ist, wenn Tests und Debuggen der Abfragen.
- MySQL unterstützt drei Arten von Unterabfragen: Skalar-, Zeilen- und Tabellenunterabfragen.
- Skalare Unterabfragen geben nur eine einzelne Zeile und eine einzelne Spalte zurück.
- Zeilenunterabfragen geben nur eine einzelne Zeile zurück, können aber mehr als eine Spalte haben.
- Tabellenunterabfragen können sowohl mehrere Zeilen als auch Spalten zurückgeben.
- Unterabfragen können auch in INSERT-, UPDATE- und DELETE-Abfragen verwendet werden.
- Aus Leistungsgründen wird beim Abrufen von Daten aus mehreren Tabellen dringend empfohlen, JOINs anstelle von Unterabfragen zu verwenden. Unterabfragen sollten nur aus gutem Grund verwendet werden.






