logo

Geneste query's in SQL

Vereisten: Basisprincipes van SQL

Geneste query's zijn een manier om complexe query's uit te voeren door de ene query in de andere in te sluiten. De buitenste query kan enkele voorwaarden toepassen op de resultaten van de binnenste query. Laten we gebruiken STUDENT, CURSUS, STUDENT_CURSUS tabellen voor het begrijpen van geneste query's.



STUDENT

S_ID S_NAME S_ADRES S_PHONE VERSTANDIG
S1 RAM DELHI 9455123451 18
S2 RAMESJ GURGAON 9652431543 18
S3 SIJIT ROHTAK 9156253131 twintig
S4 ZEKER DELHI 9156768971 18

CURSUS

C_ID C_NAME
C1 DSA
C2 Programmering
C3 DBMS

STUDENT_CURSUS



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

Er zijn hoofdzakelijk twee typen geneste query's:

  • Onafhankelijke geneste zoekopdrachten: Bij onafhankelijke geneste query's begint de uitvoering van query's vanaf de binnenste query tot de buitenste query's. De uitvoering van de innerlijke query is onafhankelijk van de buitenste query, maar het resultaat van de innerlijke query wordt gebruikt bij de uitvoering van de buitenste query. Verschillende operatoren zoals IN, NOT IN, ANY, ALL enz. worden gebruikt bij het schrijven van onafhankelijke geneste zoekopdrachten.
    IN: Als we het willen weten S_ID die zijn ingeschreven C_NAME ‘DSA’ of ‘DBMS’, we kunnen het schrijven met behulp van een onafhankelijke geneste query en IN-operator. Van CURSUS tafel, daar kunnen we achter komen C_ID voor C_NAME ‘DSA’ of DBMS’ en deze kunnen we gebruiken C_ID s voor het vinden S_ID s van STUDENT_CURSUS TAFEL. STAP 1: Vinden C_ID voor C_NAME =’DSA’ of ‘DBMS’ Selecteer C_ID van CURSUS waar C_NAME = ‘DSA’ of C_NAME = ‘DBMS’ STAP 2: Gebruik makend van C_ID van stap 1 voor het vinden S_ID Selecteer S_ID van STUDENT_CURSUS waar C_ID IN (SELECT C_ID van CURSUS waar C_NAME = ‘DSA’ of C_NAME =’DBMS’); De binnenste query retourneert een set met leden C1 en C3 en de buitenste query retourneert deze S_ID s waarvoor C_ID is gelijk aan elk lid van de set (in dit geval C1 en C3). Het retourneert dus S1, S2 en S4. Opmerking: Als we namen willen weten van STUDENT s die zich hebben ingeschreven voor ‘DSA’ of ‘DBMS’, kan dit als volgt worden gedaan: Selecteer S_NAME uit STUDENT waar S_ID IN (Select S_ID van STUDENT_CURSUS waar C_ID IN (SELECT C_ID van CURSUS waar C_NAME =’DSA’ of C_NAME =’DBMS’));
    NIET IN: Als we het willen weten S_ID s van STUDENT Voor degenen die zich niet hebben ingeschreven voor ‘DSA’ en ook niet voor ‘DBMS’, kan dit als volgt worden gedaan: Selecteer S_ID van STUDENT waar S_ID NIET IN (Select S_ID van STUDENT_CURSUS waar C_ID IN (SELECT C_ID van CURSUS waar C_NAME =’DSA’ of C_NAME =’DBMS’)); De binnenste query retourneert een set met leden C1 en C3. De tweede innerlijke query retourneert deze S_ID s waarvoor C_ID is gelijk aan elk lid van de set (in dit geval C1 en C3), namelijk S1, S2 en S4. De buitenste query retourneert deze S_ID waar S_ID is geen lid van de set (S1, S2 en S4). Het zal dus S3 retourneren.
  • Co-gerelateerde geneste zoekopdrachten: Bij co-gerelateerde geneste query's is de uitvoer van de binnenquery afhankelijk van de rij die momenteel wordt uitgevoerd in de buitenquery. bijvoorbeeld; Als we het willen weten S_NAME van STUDENT s die zijn ingeschreven C_ID ‘C1’, dit kan worden gedaan met behulp van een co-gerelateerde geneste zoekopdracht als: Selecteer S_NAME uit STUDENT S waar BESTAAT (selecteer * uit STUDENT_CURSUS SC waar S. S_ID =SC. S_ID en SC. C_ID =’C1’); Voor elke rij van STUDENT S, het zal de rijen vinden van STUDENT_CURSUS waar S. S_ID = SC. S_ID en SC. C_ID =’C1’. Als voor een S_ID van STUDENT S, er bestaat tenminste een rij in STUDENT_CURSUS SC met C_ID =’C1’, dan zal de innerlijke query waar en corresponderend retourneren S_ID wordt als uitvoer geretourneerd.

VOORBEELD IN SQL-CODE:

SELECTEER Studentnaam



VAN Studenten

WAAR StudentID IN (

SELECTEER StudentID

VAN Cijfers

WAAR Onderwerp = ‘Wiskunde’ EN Score> 90

database met zuureigenschappen

);