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 javaON INTRODUCCIÓ StudentID (
SELECCIONA ID estudiant
DE Graus
ON Matèria = 'Matemàtiques' I Puntuació> 90
);