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

);