Einführung

Stellen Sie sich vor, Sie versuchen, eine bestimmte Info aus einer riesigen Bibliothek zu finden, in der einige Bücher andere kleinere Bücher enthalten. Um die richtige Antwort zu finden, müssen Sie sich möglicherweise zuerst die kleineren Bücher ansehen und diese Informationen dann verwenden, um das größere zu finden. Genau so funktionieren verschachtelte Abfragen in SQL Arbeit! Indem Sie eine Abfrage in eine andere einfügen, können Sie komplexe Daten mit Leichtigkeit extrahieren. In diesem Leitfaden untersuchen wir, wie verschachtelte Abfragen funktionieren und wie Sie ihre Leistungsfähigkeit in SQL für effizientere Datenbankverwaltung.

Verschachtelte Abfragen in SQL verstehen

Lernergebnis

  • Verstehen Sie, was verschachtelte Abfragen (Unterabfragen) in SQL sind.
  • Schreiben und implementieren Sie verschachtelte Abfragen innerhalb verschiedener SQL-Anweisungen.
  • Unterscheiden Sie zwischen korrelierten und nicht korrelierten verschachtelten Abfragen.
  • Optimieren Sie SQL-Abfragen mithilfe verschachtelter Strukturen für eine bessere Leistung.

Was sind verschachtelte Abfragen in SQL?

Eine verschachtelte Abfrage, auch Unterabfrage genannt, ist eine SQL-Abfrage, die in eine andere SQL-Abfrage eingefügt wird. Das Ergebnis der inneren Abfrage (der Unterabfrage) wird von der äußeren Abfrage verwendet, um das gewünschte Ergebnis zu erzielen. Dieser Ansatz ist besonders nützlich, wenn die Ergebnisse der inneren Abfrage von den von der äußeren Abfrage abgerufenen Daten abhängen.

Grundlegende Syntax

SELECT column_name(s)  
FROM table_name  
WHERE column_name = (SELECT column_name FROM table_name WHERE situation);

Arten verschachtelter Abfragen in SQL

Verschachtelte Abfragen, auch Unterabfragen genannt, ermöglichen Ihnen die Durchführung komplexer Datenabfragen, indem Sie eine SQL-Abfrage in eine andere einbetten. Diese Funktion ist für das Schreiben effizienten SQL-Codes und die Handhabung komplexer Datenbankoperationen unerlässlich. In diesem Abschnitt werden die verschiedenen Arten verschachtelter Abfragen mit Beispielen und erwarteten Ergebnissen erläutert.

Einzeilige Unterabfrage in SQL

Eine Einzelzeilen-Unterabfrage ist ein verschachtelter Abfragetyp, der eine oder mehrere Spalten in nur einer Zeile ergibt. Dies kommt sehr häufig bei SQL-Anweisungen vor, bei denen Sie einen Vergleichsoperator oder eine Bedingung für einen einzelnen Wert verwenden möchten, z. B. =, <, > usw.

Wichtige Merkmale einzeiliger Unterabfragen

  • Gibt eine Zeile zurück: Aufgrund des vergebenen Namens kann man eine einzelne Datenzeile erwarten.
  • Normalerweise mit Vergleichsoperatoren verwendet: Wird normalerweise mit Operatoren wie =, >, <, >=, <= usw. verwendet.
  • Kann eine oder mehrere Spalten zurückgeben: Obwohl es eine einzelne Zeile zurückgibt, können dennoch mehrere Spalten zurückgegeben werden.

Beispiel: Mitarbeiter finden, die mehr als das Durchschnittsgehalt verdienen

Tisch: workers

Mitarbeiter-ID Vorname Nachname Gehalt Abteilungs-ID
1 John Damhirschkuh 90000 1
2 Julia Schmied 95000 1
3 Alice Johnson 60000 2
4 Bob Braun 65000 2
5 Charlie Davis 40000 3
6 Vorabend Adams 75000 3

Tisch: departments

Abteilungs-ID Abteilungsname Standort-ID
1 Verkäufe 1700
2 Advertising 1700
3 ES 1800
4 Personalwesen 1900
SELECT first_name, last_name, wage
FROM workers
WHERE wage > (SELECT AVG(wage) FROM workers);

Ausgabe:

| first_name | last_name | wage |
|------------|-----------|--------|
| John       | Doe       | 90000  |
| Jane       | Smith     | 95000  |

Im Beispiel ermittelt die innere Abfrage (SELECT AVG(wage) FROM workers) die Durchschnittsgehälter aller Mitarbeiter. Die äußere Abfrage ermittelt Vor- und Nachnamen sowie das Gehalt aller Mitarbeiter, deren Verdienst über dieser Zahl liegt.

Mehrzeilige Unterabfrage in SQL

Eine mehrzeilige Unterabfrage ist eine Artwork verschachtelte Abfrage, die daher mehr als eine Datenzeile zurückgibt. Sie wird normalerweise mit den Operatoren IN, ANY oder ALL verwendet, um eine Spalte mit einer Reihe von Werten zu vergleichen, die von der Unterabfrage zurückgegeben werden. Einer der Vorteile der Verwendung einer mehrzeiligen Unterabfrage besteht darin, dass sie die Ergebnisse einer Werteliste kombiniert und bei der Berechnung mehrere Zeilen anwendet.

Beispiel: Mitarbeiter in bestimmten Abteilungen finden

SELECT first_name, last_name
FROM workers
WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1700);

Ausgabe:

| first_name | last_name |
|------------|-----------|
| Alice      | Johnson   |
| Bob        | Brown     |

Hier ruft die innere Abfrage ab department_ids aus dem departments Tabelle, in der die location_id beträgt 1700. Die äußere Abfrage findet dann Mitarbeiter, die in diesen Abteilungen arbeiten.

Korrelierte Unterabfrage in SQL

Eine korrelierte Unterabfrage ist eine Artwork verschachtelter Abfrage in SQL. Ihre Werte hängen von der äußeren Abfrage ab. Während eine normale Unterabfrage unabhängig ausgeführt werden kann, berechnet eine korrelierte Unterabfrage in Bezug auf jede Zeile, die von der äußeren Abfrage verarbeitet wird, und ist daher dynamisch und kontextsensitiv.

Merkmale korrelierter Unterabfragen

  • Abhängigkeit: Die innere Abfrage verweist auf Spalten der äußeren Abfrage und stellt so eine direkte Abhängigkeit her.
  • Zeilenweise Ausführung: Die innere Abfrage wird mehrmals ausgeführt – einmal für jede Zeile, die von der äußeren Abfrage verarbeitet wird.
  • Überlegungen zur Leistung: Da die innere Abfrage wiederholt ausgeführt wird, können korrelierte Unterabfragen langsamer sein als ihre nicht korrelierten Gegenstücke, insbesondere bei großen Datensätzen.

Beispiel: Mitarbeiter mit Gehältern über dem Durchschnitt ihrer Abteilung finden

SELECT first_name, wage
FROM workers e1
WHERE wage > (SELECT AVG(wage) FROM workers e2 WHERE e1.department_id = e2.department_id);

Ausgabe:

| first_name | wage |
|------------|--------|
| John       | 90000  |
| Jane       | 95000  |

In diesem Fall berechnet die innere Abfrage das Durchschnittsgehalt für jede Abteilung, während die äußere Abfrage jeden Mitarbeiter verarbeitet. Die äußere Abfrage wählt Mitarbeiter aus, die mehr als das Durchschnittsgehalt ihrer Abteilung verdienen.

Verschachtelte Unterabfragen in SQL

Eine verschachtelte Unterabfrage wird auch als verschachtelte Abfrage bezeichnet. Dabei handelt es sich um eine innere Abfrage oder eine Abfrage, die innerhalb einer anderen Abfrage platziert ist, wobei eine Abfrage innerhalb einer anderen erscheint. Solche Abfragen sind sehr praktisch, um auf schwierige Daten zuzugreifen und sie auf recht spezifische Weise zu transformieren. Dadurch können komplexe Probleme in mehrere Bestandteile zerlegt und überschaubarere Teile verarbeitet werden, was die Abfrage relationaler Datenbanken erheblich vereinfacht.

Struktur verschachtelter Unterabfragen

Eine verschachtelte Unterabfrage besteht normalerweise aus zwei Hauptkomponenten:

  • Äußere Abfrage: Dies ist die Hauptabfrage, die die Unterabfrage enthält. Sie verwendet das Ergebnis der Unterabfrage, um Daten zu filtern oder zu bearbeiten.
  • Innere Abfrage (Unterabfrage): Diese Abfrage ist in die äußere Abfrage eingebettet und stellt einen Ergebnissatz bereit, der von der äußeren Abfrage verwendet werden kann.

Beispiel: Abteilungen mit Mitarbeitern finden, die mehr als das Durchschnittsgehalt verdienen

SELECT department_id, department_name
FROM departments
WHERE department_id IN (
    SELECT department_id
    FROM workers
    WHERE wage > (SELECT AVG(wage) FROM workers)
);

Ausgabe:

| department_id | department_name |
|---------------|------------------|
| 1             | Gross sales            |
| 2             | Advertising        |

In diesem Beispiel ermittelt die innerste Abfrage (SELECT AVG(wage) FROM workers) den Durchschnitt. Die mittlere Abfrage holt die Abteilungs-IDs der Mitarbeiter ab, die über diesem Durchschnitt verdienen, und die äußere Abfrage ruft die ihr zugewiesenen Abteilungsnamen ab.

Skalare Unterabfrage

Eine skalare Unterabfrage ist als eine Unterabfrage definiert, die einen einzelnen Wert, eine einzelne Zeile und eine einzelne Spalte ausgibt. Skalare Unterabfragen sind daher überall dort sehr praktisch, wo in der Hauptabfrage ein einzelner Wert erforderlich ist. Skalare Unterabfragen können in vielen SQL-Klauseln wie SELECT, WHERE und HAVING verwendet werden.

Eigenschaften skalarer Unterabfragen

  • Gibt einen Wert zurück: Wie der Identify schon sagt, gibt eine skalare Unterabfrage nur einen einzigen Wert zurück. Jede Unterabfrage, die versucht, eine andere als eine Zeile oder eine andere als eine Spalte zurückzugeben, führt zu einem Fehler.
  • Wird in verschiedenen Klauseln verwendet: Abgeleitete Spalten können in den SELECT-Anweisungen berechnet werden, indem die Ergebnisse in WHERE-Klauseln eingegrenzt werden und indem Bedingungen für eine Datensammlung innerhalb einer HAVING-Klausel hinzugefügt werden – alles mit Hilfe dieser skalaren Unterabfragen innerhalb dieser Klausel.
  • Effizient für Vergleiche: Sie werden häufig verwendet, um Vergleiche mit einem einzelnen Wert anzustellen, der aus einer anderen Abfrage abgeleitet wurde.

Beispiel: Mitarbeiter und Gehaltsdifferenz zum Durchschnittsgehalt abrufen

SELECT first_name, last_name, wage - (SELECT AVG(wage) FROM workers) AS salary_difference
FROM workers;

Ausgabe:

| first_name | last_name | salary_difference |
|------------|-----------|-------------------|
| John       | Doe       | 10000             |
| Jane       | Smith     | 15000             |

In diesem Fall berechnet die skalare Unterabfrage einmal das Durchschnittsgehalt und die äußere Abfrage berechnet die Differenz des Gehalts jedes Mitarbeiters zum Durchschnitt.

Anwendungsfälle für verschachtelte Abfragen

Verschachtelte Abfragen oder Unterabfragen sind leistungsstarke Instruments in SQL, mit denen sich eine Vielzahl komplexer Herausforderungen beim Datenabruf lösen lassen. Hier sind einige häufige Anwendungsfälle:

Datenfilterung

Mit verschachtelten Abfragen können Ergebnisse basierend auf Werten gefiltert werden, die aus einer anderen Tabelle abgeleitet wurden.

Beispiel: Finden Sie Mitarbeiter, deren Gehalt über dem Durchschnittsgehalt ihrer jeweiligen Abteilung liegt.

SELECT first_name, last_name, wage
FROM workers e1
WHERE wage > (SELECT AVG(wage) FROM workers e2 WHERE e1.department_id = e2.department_id);

Berechnen von Aggregaten

Sie können berechnen Combination in einer verschachtelten Abfrage und verwenden Sie diese Ergebnisse in der äußeren Abfrage.

Beispiel: Rufen Sie Abteilungen mit einem Durchschnittsgehalt ab, das über dem Gesamtdurchschnittsgehalt liegt.

SELECT department_id, AVG(wage) AS average_salary
FROM workers
GROUP BY department_id
HAVING AVG(wage) > (SELECT AVG(wage) FROM workers);

Bedingte Logik

Mit verschachtelten Abfragen können Sie bedingte Logik in Ihre SQL-Anweisungen implementieren.

Beispiel: Hear Sie Mitarbeiter auf, die zu Abteilungen in einer bestimmten Stadt gehören.

SELECT first_name, last_name
FROM workers
WHERE department_id IN (SELECT department_id FROM departments WHERE metropolis = 'New York');

Korrelierte Unterabfragen für Berechnungen auf Zeilenebene

Korrelierte Unterabfragen ermöglichen Berechnungen auf Zeilenebene basierend auf Werten aus der aktuellen Zeile in der äußeren Abfrage.

Beispiel: Erhalten Sie eine Liste von Produkten mit einem höheren Preis als dem Durchschnittspreis von Produkten in der gleichen Kategorie.

SELECT product_name, value
FROM merchandise p1
WHERE value > (SELECT AVG(value) FROM merchandise p2 WHERE p1.category_id = p2.category_id);

Unterschiede zwischen verschachtelten Abfragen und anderen SQL-Abfragen

Sehen wir uns nun den Unterschied zwischen verschachtelten Abfragen und anderen SQL-Abfragen an:

Besonderheit Verschachtelte Abfragen Verknüpfungen Einfache Abfragen
Definition Eine Abfrage, die in eine andere Abfrage eingefügt ist Kombiniert Zeilen aus zwei oder mehr Tabellen basierend auf einer verknüpften Spalte Eine einzelne SQL-Anweisung, die Daten abruft
Ausführung Führt die innere Abfrage für jede Zeile aus, die von der äußeren Abfrage verarbeitet wird. Wird gleichzeitig für alle Zeilen aus beiden Tabellen ausgeführt Wird unabhängig und ohne Abhängigkeiten ausgeführt
Anwendungsfall Nützlich für komplexe Berechnungen und Filterung basierend auf einer anderen Abfrage Best zum Kombinieren verwandter Daten aus mehreren Tabellen Geeignet für den einfachen Datenabruf
Leistung Kann aufgrund der wiederholten Ausführung der inneren Abfrage zu einer Leistungseinbuße führen Im Allgemeinen effizienter, da die Daten in einem Durchgang verarbeitet werden Am schnellsten für den einfachen Datenabruf
Komplexität Kann komplex und schwer lesbar werden Kann auch komplex sein, ist aber normalerweise klarer, wenn explizite Beziehungen vorliegen Einfach und leicht verständlich
Datenabhängigkeit Die innere Abfrage kann vom Ergebnis der äußeren Abfrage abhängen Daten aus verknüpften Tabellen sind voneinander unabhängig Die abgerufenen Daten sind unabhängig, es sind keine Unterabfragen beteiligt
Beispiel SELECT first_name FROM workers WHERE wage > (SELECT AVG(wage) FROM workers); SELECT e.first_name, d.department_name FROM workers e JOIN departments d ON e.department_id = d.department_id; SELECT * FROM workers;

Häufige Fehler bei verschachtelten Abfragen

Obwohl verschachtelte Abfragen unglaublich nützlich sein können, bergen sie auch Fallstricke. Hier sind einige häufige Fehler, auf die Sie achten sollten:

Mehrere Zeilen zurückgeben

Eine skalare Unterabfrage muss einen einzelnen Wert zurückgeben. Wenn sie mehrere Zeilen zurückgibt, tritt ein Fehler auf.

Fehler:

SELECT first_name
FROM workers
WHERE wage = (SELECT wage FROM workers);

Lösung: Stellen Sie sicher, dass die innere Abfrage Aggregation oder Filterung verwendet, um einen einzelnen Wert zurückzugeben.

Leistungsprobleme

Verschachtelte Abfragen können manchmal zu Leistungsengpässen führen, insbesondere wenn sie für jede Zeile in der äußeren Abfrage ausgeführt werden.

Fehler: Verwenden einer verschachtelten Abfrage innerhalb einer großen äußeren Abfrage ohne Berücksichtigung der Auswirkungen auf die Leistung.

Lösung: Analysieren Sie Abfrageausführungspläne und ziehen Sie beim Umgang mit großen Datensätzen various Methoden wie Verknüpfungen in Betracht.

Unsachgemäße Verwendung von Klammern

Eine falsche Platzierung der Klammern kann zu unerwarteten Ergebnissen oder Fehlern führen.

Fehler:

SELECT first_name
FROM workers
WHERE wage > (SELECT AVG(wage) FROM workers WHERE department_id);

Lösung: Stellen Sie sicher, dass die Logik Ihrer Abfrage klar ist und dass Klammern zum Gruppieren von Bedingungen angemessen verwendet werden.

Keine Berücksichtigung von NULL-Werten

Verschachtelte Abfragen können unerwartete Ergebnisse erzeugen, wenn in den Daten NULL-Werte vorhanden sind.

SELECT first_name
FROM workers
WHERE wage > (SELECT AVG(wage) FROM workers WHERE department_id IS NOT NULL);

Lösung: Behandeln Sie NULL-Werte explizit mit Funktionen wie COALESCE um unbeabsichtigtes Filtern zu vermeiden.

Abschluss

Verschachtelte SQL-Abfragen, auch Unterabfragen genannt, sind sehr nützlich, um hochkomplexe Datenabrufvorgänge effizient durchzuführen. Sie können eine Abfrage in eine andere einbetten, um Berechnungen an Daten durchzuführen, die allein durch einfache Abfragen nicht möglich sind. Kenntnisse über die vier Haupttypen dieser Abfragen sind hilfreich: einzeilige, mehrzeilige, korrelierte und skalare Unterabfragen. Indem Sie bewährte Methoden anwenden und einige häufige Fehler vermeiden, können Sie das volle Potenzial verschachtelter Abfragen ausschöpfen und so Ihre Datenbankverwaltung und -leistung verbessern.

Häufig gestellte Fragen

F1. Was ist eine verschachtelte Abfrage in SQL?

A. Eine verschachtelte Abfrage oder Unterabfrage ist eine SQL-Abfrage, die in eine andere Abfrage eingefügt wird. Das Ergebnis der inneren Abfrage wird von der äußeren Abfrage verwendet, um komplexe Daten abzurufen.

F2. Welche Typen verschachtelter Abfragen gibt es?

A. Zu den Haupttypen gehören einzeilige Unterabfragen, mehrzeilige Unterabfragen, korrelierte Unterabfragen und skalare Unterabfragen, die jeweils unterschiedlichen Anwendungsfällen dienen.

F3. Wann sollte ich eine korrelierte Unterabfrage verwenden?

A. Verwenden Sie eine korrelierte Unterabfrage, wenn die innere Abfrage auf eine Spalte der äußeren Abfrage verweisen muss, um dynamische zeilenweise Auswertungen zu ermöglichen.

F4. Können verschachtelte Abfragen die Leistung beeinträchtigen?

A. Ja, verschachtelte Abfragen können zu Leistungsproblemen führen, insbesondere wenn sie für jede Zeile in der äußeren Abfrage ausgeführt werden. Die Analyse von Ausführungsplänen und die Berücksichtigung von Alternativen wie Verknüpfungen können zur Verbesserung der Effizienz beitragen.

Mein Identify ist Ayushi Trivedi. Ich habe einen Bachelor of Expertise-Abschluss. Ich habe 3 Jahre Erfahrung als Pädagogin und Inhaltsredakteurin. Ich habe mit verschiedenen Python-Bibliotheken gearbeitet, wie Numpy, Pandas, Seaborn, Matplotlib, Scikit, Imblearn, lineare Regression und viele mehr. Ich bin auch Autorin. Mein erstes Buch mit dem Titel #turning25 wurde veröffentlicht und ist bei Amazon und Flipkart erhältlich. Hier bin ich technische Inhaltsredakteurin bei Analytics Vidhya. Ich bin stolz und glücklich, AVian zu sein. Ich habe ein großartiges Group, mit dem ich zusammenarbeiten kann. Ich liebe es, die Brücke zwischen der Technologie und dem Lernenden zu bauen.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert