logo

Indlejrede forespørgsler i SQL

Forudsætninger: Grundlæggende om SQL

Indlejrede forespørgsler er en måde at udføre komplekse forespørgsler på ved at integrere én forespørgsel i en anden. Den ydre forespørgsel kan anvende nogle betingelser på resultaterne af den indre forespørgsel. Lad os bruge STUDENT, KURSUS, STUDENT_KURSE tabeller til at forstå indlejrede forespørgsler.

STUDERENDE



S_ID S_NAME S_ADRESSE S_PHONE S_AGE
S1 vædder DELHI 9455123451 18
S2 RAMESH GURGAON 9652431543 18
S3 SUJIT ROHTAK 9156253131 tyve
S4 SURESH DELHI 9156768971 18

RUTE

C_ID C_NAME
C1 DSA
C2 Programmering
C3 DBMS

STUDENT_KURSUS

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

Der er hovedsageligt to typer indlejrede forespørgsler:

  • Uafhængige indlejrede forespørgsler: I uafhængige indlejrede forespørgsler starter udførelse af forespørgsler fra den inderste forespørgsel til den yderste forespørgsel. Udførelsen af ​​den indre forespørgsel er uafhængig af den ydre forespørgsel, men resultatet af den indre forespørgsel bruges til udførelse af den ydre forespørgsel. Forskellige operatorer som IN, NOT IN, ANY, ALL osv. bruges til at skrive uafhængige indlejrede forespørgsler.
    I: Hvis vi vil finde ud af det S_ID der er tilmeldt C_NAME 'DSA' eller 'DBMS', vi kan skrive det ved hjælp af uafhængig indlejret forespørgsel og IN-operator. Fra RUTE tabel, kan vi finde ud af C_ID til C_NAME 'DSA' eller DBMS', og vi kan bruge disse C_ID s for at finde S_ID s fra STUDENT_KURSUS BORD. TRIN 1: Finde C_ID til C_NAME ='DSA' eller 'DBMS' Vælg C_ID fra RUTE hvor C_NAME = 'DSA' eller C_NAME = 'DBMS' TRIN 2: Ved brug af C_ID af trin 1 for at finde S_ID Vælg S_ID fra STUDENT_KURSUS hvor C_ID IN (VÆLG C_ID fra RUTE hvor C_NAME = 'DSA' eller C_NAME ='DBMS'); Den indre forespørgsel vil returnere et sæt med medlemmerne C1 og C3, og den ydre forespørgsel vil returnere dem S_ID s for hvilket C_ID er lig med ethvert medlem af mængden (C1 og C3 i dette tilfælde). Så det vil returnere S1, S2 og S4. Bemærk: Hvis vi vil finde ud af navne på STUDERENDE er der enten tilmeldt 'DSA' eller 'DBMS', kan det gøres som: Vælg S_NAME fra STUDERENDE hvor S_ID IN (Vælg S_ID fra STUDENT_KURSUS hvor C_ID IN (VÆLG C_ID fra RUTE hvor C_NAME ='DSA' eller C_NAME ='DBMS'));
    IKKE I: Hvis vi vil finde ud af det S_ID s af STUDERENDE s der hverken har tilmeldt sig 'DSA' eller i 'DBMS', kan det gøres som: Vælg S_ID fra STUDERENDE hvor S_ID IKKE I (Vælg S_ID fra STUDENT_KURSUS hvor C_ID IN (VÆLG C_ID fra RUTE hvor C_NAME ='DSA' eller C_NAME ='DBMS')); Den inderste forespørgsel vil returnere et sæt med medlemmerne C1 og C3. Anden indre forespørgsel vil returnere dem S_ID s for hvilket C_ID er lig med ethvert medlem af mængden (C1 og C3 i dette tilfælde), som er S1, S2 og S4. Den yderste forespørgsel vil returnere dem S_ID s hvor S_ID er ikke medlem af sættet (S1, S2 og S4). Så det vil returnere S3.
  • Samrelaterede indlejrede forespørgsler: I co-relaterede indlejrede forespørgsler afhænger outputtet af den indre forespørgsel af den række, der i øjeblikket udføres i den ydre forespørgsel. f.eks.; Hvis vi vil finde ud af det S_NAME af STUDERENDE s, der er tilmeldt C_ID 'C1', det kan gøres ved hjælp af co-relateret indlejret forespørgsel som: Vælg S_NAME fra STUDERENDE S hvor EKSISTERER ( vælg * fra STUDENT_KURSUS SC hvor S. S_ID =SC. S_ID og SC. C_ID ='C1'); For hver række af STUDERENDE S, vil den finde rækkerne fra STUDENT_KURSUS hvor S. S_ID = SC. S_ID og SC. C_ID = 'C1'. Hvis for en S_ID fra STUDERENDE S, der findes i det mindste en række i STUDENT_KURSUS SC med C_ID ='C1', så vil indre forespørgsel returnere sand og tilsvarende S_ID vil blive returneret som output.

EKSEMPEL I SQL-KODE:

VÆLG elevnavn

FRA studerende

HVOR StudentID I (

VÆLG StudentID

FRA karakterer

HVOR Emne = 'Matematik' OG Score> 90

springe listen over

);