Nestede spørringer i SQL
Forutsetninger: Grunnleggende om SQL
Nestede søk er en måte å utføre komplekse søk på ved å bygge inn ett søk i et annet. Den ytre spørringen kan bruke noen betingelser på resultatene av den indre spørringen. La oss bruke STUDENT, KURS, STUDENT_KURS tabeller for å forstå nestede spørringer.
STUDENT
| S_ID | S_NAME | S_ADRESSE | S_PHONE | S_AGE |
| S1 | RAM | DELHI | 9455123451 | 18 |
| S2 | RAMESH | GURGAON | 9652431543 | 18 |
| S3 | SUJIT | ROHTAK | 9156253131 | tjue |
| S4 | SURESH | DELHI | 9156768971 | 18 |
KURS
| C_ID | C_NAME |
| C1 | DSA |
| C2 | Programmering |
| C3 | DBMS |
STUDENT_KURS
| S_ID | C_ID |
| S1 | C1 |
| S1 | C3 |
| S2 | C1 |
| S3 | C2 |
| S4 | C2 |
| S4 | C3 |
Det er hovedsakelig to typer nestede søk:
- Uavhengige nestede søk: I uavhengige nestede spørringer starter spørringskjøring fra innerste spørring til ytterste spørring. Utførelsen av indre spørring er uavhengig av ytre spørring, men resultatet av indre spørring brukes i utførelse av ytre spørring. Ulike operatorer som IN, NOT IN, ANY, ALL osv. brukes til å skrive uavhengige nestede spørringer.
I: Hvis vi vil finne ut S_ID som er påmeldt C_NAME 'DSA' eller 'DBMS', vi kan skrive det ved hjelp av uavhengig nestet spørring og IN-operator. Fra KURS tabell, kan vi finne ut C_ID til C_NAME 'DSA' eller DBMS' og vi kan bruke disse C_ID s for å finne S_ID s fra STUDENT_KURS BORD. TRINN 1: Finne C_ID til C_NAME ='DSA' eller 'DBMS' Velg C_ID fra KURS hvor C_NAME = 'DSA' eller C_NAME = 'DBMS' STEG 2: Ved hjelp av C_ID av trinn 1 for å finne S_ID Plukke ut S_ID fra STUDENT_KURS hvor C_ID INN (VELG C_ID fra KURS hvor C_NAME = 'DSA' eller C_NAME ='DBMS'); Den indre spørringen vil returnere et sett med medlemmene C1 og C3, og den ytre spørringen vil returnere disse S_ID s for hvilket C_ID er lik et hvilket som helst medlem av sett (C1 og C3 i dette tilfellet). Så den vil returnere S1, S2 og S4. Merk: Hvis vi ønsker å finne ut navn på STUDENT e som enten har meldt seg på 'DSA' eller 'DBMS', kan det gjøres som: Velg S_NAME fra STUDENT hvor S_ID IN (Velg S_ID fra STUDENT_KURS hvor C_ID INN (VELG C_ID fra KURS hvor C_NAME ='DSA' eller C_NAME ='DBMS'));
IKKE I: Hvis vi vil finne ut S_ID s av STUDENT e som verken har registrert seg i 'DSA' eller i 'DBMS', kan det gjøres som: Velg S_ID fra STUDENT hvor S_ID IKKE I (Velg S_ID fra STUDENT_KURS hvor C_ID INN (VELG C_ID fra KURS hvor C_NAME ='DSA' eller C_NAME ='DBMS')); Den innerste spørringen vil returnere et sett med medlemmene C1 og C3. Andre indre spørring vil returnere disse S_ID s for hvilket C_ID er lik ethvert medlem av sett (C1 og C3 i dette tilfellet) som er S1, S2 og S4. Det ytterste søket vil returnere disse S_ID s hvor S_ID er ikke medlem av settet (S1, S2 og S4). Så den vil returnere S3.
- Samrelaterte nestede søk: I samrelaterte nestede spørringer avhenger utdataene fra indre spørringer av raden som for øyeblikket utføres i ytre spørring. f.eks.; Hvis vi vil finne ut S_NAME av STUDENT s som er påmeldt C_ID 'C1', det kan gjøres ved hjelp av co-relaterte nestede søk som: Velg S_NAME fra STUDENT S hvor EKSISTERER ( velg * fra STUDENT_KURS SC hvor S. S_ID =SC. S_ID og SC. C_ID ='C1'); For hver rad med STUDENT S, vil den finne radene fra STUDENT_KURS hvor er. S_ID = SC. S_ID og SC. C_ID = 'C1'. Hvis for en S_ID fra STUDENT S, minst en rad finnes i STUDENT_KURS SC med C_ID ='C1', så vil indre spørring returnere sant og tilsvarende S_ID vil bli returnert som utdata.
EKSEMPEL I SQL-KODE:
VELG Studentnavn
FRA studenter
HVOR StudentID I (
VELG StudentID
FRA karakterer
HVOR Emne = ‘Matematikk’ OG Poengsum> 90
);