logo

Consultes imbricades en SQL

Requisits previs: Conceptes bàsics d'SQL

Les consultes imbricades són una manera de realitzar consultes complexes incrussant una consulta dins d'una altra. La consulta externa pot aplicar algunes condicions als resultats de la consulta interna. Utilitzem-nos STUDENT, COURSE, STUDENT_COURSE taules per entendre les consultes imbricades.



ESTUDIANT

configuració del navegador d'Internet
S_ID S_NAME S_ADDRESS S_PHONE S_AGE
S1 RAM DELHI 9455123451 18
S2 RAMESH GURGAON 9652431543 18
S3 SUJIT ROHTAK 9156253131 20
S4 SURESH DELHI 9156768971 18

CURS

C_ID C_NAME
C1 DSA
C2 Programació
C3 DBMS

STUDENT_COURSE



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

Hi ha principalment dos tipus de consultes imbricades:

  • Consultes niuades independents: En les consultes imbricades independents, l'execució de consultes comença des de la consulta més interna fins a les consultes més externes. L'execució de la consulta interna és independent de la consulta externa, però el resultat de la consulta interna s'utilitza en l'execució de la consulta externa. S'utilitzen diversos operadors com IN, NOT IN, ANY, ALL, etc. per escriure consultes imbricades independents.
    EN: Si ho volem esbrinar S_ID que estan inscrits C_NAME 'DSA' o 'DBMS', podem escriure-ho amb l'ajuda de la consulta imbricada independent i l'operador IN. Des de CURS taula, ho podem esbrinar C_ID per C_NAME ‘DSA’ o DBMS’ i podem utilitzar-los C_ID s per trobar S_ID s de STUDENT_COURSE TAULA. PAS 1: Trobar C_ID per C_NAME ='DSA' o 'DBMS' Seleccioneu C_ID des de CURS on C_NAME = 'DSA' o C_NAME = 'DBMS' PAS 2: Utilitzant C_ID del pas 1 per trobar S_ID Seleccioneu S_ID des de STUDENT_COURSE on C_ID IN (SELECT C_ID des de CURS on C_NAME = 'DSA' o C_NAME ='DBMS'); La consulta interna retornarà un conjunt amb els membres C1 i C3 i la consulta externa els retornarà S_ID s per la qual cosa C_ID és igual a qualsevol membre del conjunt (C1 i C3 en aquest cas). Per tant, tornarà S1, S2 i S4. Nota: Si volem esbrinar noms de ESTUDIANT Si s'han inscrit a 'DSA' o 'DBMS', es pot fer com: Seleccioneu S_NAME des de ESTUDIANT on S_ID IN (seleccioneu S_ID des de STUDENT_COURSE on C_ID IN (SELECT C_ID des de CURS on C_NAME ='DSA' o C_NAME ='DBMS'));
    NO A: Si ho volem esbrinar S_ID s de ESTUDIANT Si no s'han inscrit ni a 'DSA' ni a 'DBMS', es pot fer com: Seleccioneu S_ID des de ESTUDIANT on S_ID NO A (Seleccioneu S_ID des de STUDENT_COURSE on C_ID IN (SELECT C_ID des de CURS on C_NAME ='DSA' o C_NAME ='DBMS')); La consulta més interna retornarà un conjunt amb els membres C1 i C3. La segona consulta interna els retornarà S_ID s per la qual cosa C_ID és igual a qualsevol membre del conjunt (C1 i C3 en aquest cas) que són S1, S2 i S4. La consulta més externa els retornarà S_ID s on S_ID no és membre del conjunt (S1, S2 i S4). Per tant, tornarà S3.
  • Consultes anidades relacionades conjuntament: En les consultes imbricades relacionades conjuntament, la sortida de la consulta interna depèn de la fila que s'està executant actualment a la consulta externa. per exemple.; Si ho volem esbrinar S_NAME de ESTUDIANT s que estan inscrits C_ID 'C1', es pot fer amb l'ajuda d'una consulta imbricada relacionada com: Seleccioneu S_NAME de ESTUDIANT S on EXISTEIX (seleccioneu * de STUDENT_COURSE SC on S. S_ID =SC. S_ID i SC. C_ID ='C1'); Per a cada fila de ESTUDIANT S, trobarà les files de STUDENT_COURSE on S. S_ID = SC. S_ID i SC. C_ID ='C1'. Si per a S_ID des de ESTUDIANT S, almenys hi ha una fila STUDENT_COURSE SC amb C_ID ='C1', aleshores la consulta interna retornarà veritable i corresponent S_ID es retornarà com a sortida.

EXEMPLE EN CODI SQL:

longitud de cadena java

SELECT StudentName



D'Alumnes

iterador de mapes java

ON INTRODUCCIÓ StudentID (

SELECCIONA ID estudiant

DE Graus

ON Matèria = 'Matemàtiques' I Puntuació> 90

);