MySQL SubQuery Tutorial mit Beispielen

Anonim

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 bestimmen.

Schauen wir uns die Syntax der Unterabfrage an -

Eine häufige Kundenbeschwerde in der MyFlix-Videobibliothek ist die geringe Anzahl von Filmtiteln. Das Management möchte Filme für eine Kategorie mit der geringsten Anzahl von Titeln kaufen.

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

Mal sehen, wie diese Abfrage funktioniert

Das Obige ist eine Form der Zeilenunterabfrage . In 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 haben und diese noch nicht zurückgeben müssen. Sobald Sie Namen und Telefonnummer erhalten haben, rufen Sie diese an, um eine Erinnerung zu geben. Sie können eine Abfrage wie verwenden

SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );

Mal sehen, wie diese Abfrage funktioniert

In diesem Fall gibt die innere Abfrage mehr als ein Ergebnis zurück. Das Obige ist die Art der Tabellenunterabfrage .

Bis jetzt haben wir zwei Abfragen gesehen, sehen wir uns jetzt ein Beispiel für eine dreifache Abfrage an !!!

Angenommen, das Management möchte das bestbezahlte Mitglied belohnen.

Wir können eine Abfrage wie ausführen

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 ergibt das folgende Ergebnis:

Unterabfragen gegen Beitritte!

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 SQL-Anfängern verwendet.

Unterabfragen weisen jedoch Leistungsprobleme auf. Die Verwendung eines Joins anstelle einer Unterabfrage kann zuweilen zu einer bis zu 500-fachen Leistungssteigerung führen.

Wenn Sie die Wahl haben, wird empfohlen, JOIN für eine Unterabfrage zu verwenden.

Unterabfragen sollten nur als Fallback-Lösung verwendet werden, wenn Sie keine JOIN-Operation verwenden können, um die oben genannten Ziele zu erreichen

Zusammenfassung

  • Unterabfragen sind eingebettete Abfragen in 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 unterteilt werden, aus denen die Abfrage besteht. Dies ist sehr nützlich beim Testen 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 jedoch mehr als eine Spalte enthalten.
  • Tabellenunterabfragen können mehrere Zeilen sowie Spalten zurückgeben.
  • Unterabfragen können auch in INSERT-, UPDATE- und DELETE-Abfragen verwendet werden.
  • Bei Leistungsproblemen wird beim Abrufen von Daten aus mehreren Tabellen dringend empfohlen, JOINs anstelle von Unterabfragen zu verwenden. Unterabfragen sollten nur aus gutem Grund verwendet werden.