logo

Requêtes imbriquées dans SQL

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 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 ID_C DANS (SÉLECTIONNER ID_C depuis COURS 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 S_ID DANS (Sélectionnez S_ID depuis STUDENT_COURS ID_C DANS (SÉLECTIONNER ID_C depuis COURS 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 S_ID PAS DANS (Sélectionnez S_ID depuis STUDENT_COURS ID_C DANS (SÉLECTIONNER ID_C depuis COURS 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

);