Verschachtelte Abfragen in SQL

Voraussetzungen: Grundlagen von SQL

Verschachtelte Abfragen sind eine Möglichkeit, komplexe Abfragen durchzuführen, indem eine Abfrage in eine andere eingebettet wird. Die äußere Abfrage kann einige Bedingungen auf die Ergebnisse der inneren Abfrage anwenden. Lassen Sie uns verwenden STUDENT, KURS, STUDENT_COURSE Tabellen zum Verständnis verschachtelter Abfragen.

STUDENT

S_ID S_NAME S_ADRESSE S_PHONE SALBEI
S1 RAM DELHI 9455123451 18
S2 RAMESH GURGAON 9652431543 18
S3 SUJIT ROHTAK 9156253131 zwanzig
S4 SICHER DELHI 9156768971 18

KURS

C_ID C_NAME
C1 DSA
C2 Programmierung
C3 DBMS

STUDENT_COURSE

S_ID C_ID
S1 C1
S1 C3
S2 C1
S3 C2
S4 C2
S4 C3

Es gibt hauptsächlich zwei Arten verschachtelter Abfragen:

  • Unabhängige verschachtelte Abfragen: Bei unabhängigen verschachtelten Abfragen beginnt die Abfrageausführung von der innersten Abfrage bis zur äußersten Abfrage. Die Ausführung der inneren Abfrage erfolgt unabhängig von der äußeren Abfrage, das Ergebnis der inneren Abfrage wird jedoch bei der Ausführung der äußeren Abfrage verwendet. Beim Schreiben unabhängiger verschachtelter Abfragen werden verschiedene Operatoren wie IN, NOT IN, ANY, ALL usw. verwendet.
    IN: Wenn wir es herausfinden wollen S_ID die eingeschrieben sind C_NAME „DSA“ oder „DBMS“, wir können es mit Hilfe einer unabhängigen verschachtelten Abfrage und eines IN-Operators schreiben. Aus KURS Tabelle, wir können es herausfinden C_ID für C_NAME „DSA“ oder „DBMS“ und wir können diese verwenden C_ID s zum Finden S_ID s von STUDENT_COURSE TISCH. SCHRITT 1: Finden C_ID für C_NAME =’DSA’ oder ‘DBMS’ Auswählen C_ID aus KURS Wo C_NAME = ‚DSA‘ oder C_NAME = „DBMS“ SCHRITT 2: Benutzen C_ID von Schritt 1 zum Finden S_ID Wählen S_ID aus STUDENT_COURSE Wo C_ID IN (AUSWÄHLEN C_ID aus KURS Wo C_NAME = ‚DSA‘ oder C_NAME =’DBMS’); Die innere Abfrage gibt eine Menge mit den Mitgliedern C1 und C3 zurück und die äußere Abfrage gibt diese zurück S_ID s für welche C_ID ist gleich jedem Mitglied der Menge (in diesem Fall C1 und C3). Es werden also S1, S2 und S4 zurückgegeben. Notiz: Wenn wir Namen von herausfinden wollen STUDENT s, die sich entweder bei „DSA“ oder „DBMS“ registriert haben, können dies wie folgt tun: Wählen Sie S_NAME aus STUDENT Wo S_ID IN (Auswählen S_ID aus STUDENT_COURSE Wo C_ID IN (AUSWÄHLEN C_ID aus KURS Wo C_NAME =’DSA’ oder C_NAME =’DBMS’));
    NICHT IN: Wenn wir es herausfinden wollen S_ID s von STUDENT Für Benutzer, die sich weder bei „DSA“ noch bei „DBMS“ angemeldet haben, kann dies wie folgt erfolgen: Auswählen S_ID aus STUDENT Wo S_ID NICHT IN (Auswählen S_ID aus STUDENT_COURSE Wo C_ID IN (AUSWÄHLEN C_ID aus KURS Wo C_NAME =’DSA’ oder C_NAME =’DBMS’)); Die innerste Abfrage gibt eine Menge mit den Mitgliedern C1 und C3 zurück. Die zweite innere Abfrage gibt diese zurück S_ID s für welche C_ID ist gleich jedem Mitglied der Menge (in diesem Fall C1 und C3), das S1, S2 und S4 ist. Die äußerste Abfrage gibt diese zurück S_ID ist wo S_ID ist kein Mitglied der Menge (S1, S2 und S4). Es wird also S3 zurückgegeben.
  • Zusammenhängende verschachtelte Abfragen: Bei korelierten verschachtelten Abfragen hängt die Ausgabe der inneren Abfrage von der Zeile ab, die gerade in der äußeren Abfrage ausgeführt wird. z.B.; Wenn wir es herausfinden wollen S_NAME von STUDENT s, die eingeschrieben sind C_ID „C1“, dies kann mit Hilfe einer zusammengehörigen verschachtelten Abfrage wie folgt erfolgen: Wählen Sie S_NAME aus STUDENT S wo EXISTS (wählen Sie * aus STUDENT_COURSE SC wo S. S_ID =SC. S_ID und SC. C_ID =’C1’); Für jede Reihe von STUDENT S, es werden die Zeilen von gefunden STUDENT_COURSE wo ist. S_ID = SC. S_ID und SC. C_ID =’C1’. Wenn für einen S_ID aus STUDENT S, mindestens eine Zeile existiert in STUDENT_COURSE SC mit C_ID =’C1’, dann gibt die innere Abfrage „true“ und entsprechend zurück S_ID wird als Ausgabe zurückgegeben.

BEISPIEL IM SQL-CODE:

Wählen Sie Studentenname aus

VON Studenten

WO StudentID IN (

WÄHLEN Sie die Studenten-ID

VON Noten

WO Fach = „Mathematik“ UND Punktzahl> 90

);