Conditions préalables : Bases de SQL
Les requêtes imbriquées sont un moyen d'effectuer des requêtes complexes en intégrant une requête dans une autre. La requête externe peut appliquer certaines conditions sur les résultats de la requête interne. Utilisons ÉTUDIANT, COURS, STUDENT_COURSE tableaux pour comprendre les requêtes imbriquées.
ÉTUDIANT
| S_ID | LE NOM DE | S_ADRESSE | S_PHONE | SAGE |
| S1 | RAM | DELHI | 9455123451 | 18 |
| S2 | RAMÈS | GURGAON | 9652431543 | 18 |
| S3 | SUJIT | ROHTAK | 9156253131 | vingt |
| S4 | SURESH | DELHI | 9156768971 | 18 |
COURS
| ID_C | C_NAME |
| C1 | DSA |
| C2 | La programmation |
| C3 | SGBD |
STUDENT_COURS
| S_ID | ID_C |
| S1 | C1 |
| S1 | C3 |
| S2 | C1 |
| S3 | C2 |
| S4 | C2 |
| S4 | C3 |
Il existe principalement deux types de requêtes imbriquées :
- Requêtes imbriquées indépendantes : Dans les requêtes imbriquées indépendantes, l’exécution des requêtes commence de la requête la plus interne aux requêtes les plus externes. L'exécution de la requête interne est indépendante de la requête externe, mais le résultat de la requête interne est utilisé lors de l'exécution de la requête externe. Divers opérateurs comme IN, NOT IN, ANY, ALL, etc. sont utilisés pour écrire des requêtes imbriquées indépendantes.
DANS: Si nous voulons découvrir S_ID qui sont inscrits à C_NAME « DSA » ou « SGBD », nous pouvons l'écrire à l'aide d'une requête imbriquée indépendante et d'un opérateur IN. Depuis COURS table, nous pouvons découvrir ID_C pour C_NAME « DSA » ou SGBD » et nous pouvons les utiliser ID_C s pour trouver S_ID s de STUDENT_COURS TABLEAU. ÉTAPE 1: Découverte ID_C pour C_NAME ='DSA' ou 'SGBD' Sélectionnez ID_C depuis COURS où C_NAME = 'DSA' ou C_NAME = 'SGBD' ÉTAPE 2: En utilisant ID_C de l'étape 1 pour trouver S_ID Sélectionner S_ID depuis STUDENT_COURS où ID_C DANS (SÉLECTIONNER ID_C depuis COURS où C_NAME = 'DSA' ou C_NAME =’SGBD’); La requête interne renverra un ensemble avec les membres C1 et C3 et la requête externe renverra ceux-ci. S_ID s pour lequel ID_C est égal à n’importe quel membre de l’ensemble (C1 et C3 dans ce cas). Ainsi, il renverra S1, S2 et S4. Note: Si nous voulons connaître les noms de ÉTUDIANT Pour les utilisateurs qui se sont inscrits à « DSA » ou à « SGBD », cela peut être fait comme suit : Sélectionnez S_NAME dans ÉTUDIANT où S_ID DANS (Sélectionnez S_ID depuis STUDENT_COURS où ID_C DANS (SÉLECTIONNER ID_C depuis COURS où C_NAME =’DSA’ ou C_NAME =’SGBD’));
PAS DEDANS: Si nous voulons découvrir S_ID s de ÉTUDIANT Pour les personnes qui ne sont ni inscrites à « DSA » ni à « SGBD », cela peut se faire comme suit : Sélectionnez S_ID depuis ÉTUDIANT où S_ID PAS DANS (Sélectionnez S_ID depuis STUDENT_COURS où ID_C DANS (SÉLECTIONNER ID_C depuis COURS où C_NAME =’DSA’ ou C_NAME =’SGBD’)); La requête la plus interne renverra un ensemble avec les membres C1 et C3. La deuxième requête interne renverra ces S_ID s pour lequel ID_C est égal à n'importe quel membre de l'ensemble (C1 et C3 dans ce cas) qui sont S1, S2 et S4. La requête la plus externe renverra ces S_ID c'est où S_ID n'est pas membre de l'ensemble (S1, S2 et S4). Il renverra donc S3.
- Requêtes imbriquées co-liées : Dans les requêtes imbriquées co-liées, le résultat de la requête interne dépend de la ligne actuellement exécutée dans la requête externe. par exemple.; Si nous voulons découvrir LE NOM DE de ÉTUDIANT s qui sont inscrits à ID_C « C1 », cela peut être fait à l'aide d'une requête imbriquée co-liée comme : Sélectionnez S_NAME dans ÉTUDIANT S où EXISTE (sélectionnez * dans STUDENT_COURS SC où S. S_ID =SC. S_ID et SC. ID_C =’C1’); Pour chaque rangée de ÉTUDIANT S, il trouvera les lignes de STUDENT_COURS où S. S_ID = SC. S_ID et SC. ID_C =’C1’. Si pour un S_ID depuis ÉTUDIANT S, au moins une ligne existe dans STUDENT_COURS SC avec ID_C = 'C1', alors la requête interne renverra vrai et correspondant S_ID sera renvoyé en sortie.
EXEMPLE EN CODE SQL :
SELECT Nom de l'étudiant
DES Étudiants
OÙ StudentID DANS (
SELECTIdentifiant d'étudiant
DE Notes
OÙ Sujet = « Mathématiques » ET Score> 90
);