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
);