Sous-requête d'existence IN

Introduction

Cette sous-requête permet de vérifier que la projection d'un tuple de la requête principale est présent dans la sous-requête.

Syntaxe

CTRL+C pour copier, CTRL+V pour coller
1
SELECT <projections>
2
FROM <relations>
3
WHERE (<projection d un tuple>) IN 
4
 (<requête imbriquée>)
SELECT <projections>
FROM <relations>
WHERE (<projection d un tuple>) IN 
 (<requête imbriquée>)

La projection du tuple de la requête principale doit conduire à un schéma relationnel identique à celui de la requête imbriquée.

ExempleSous-requête IN à une colonne et plusieurs lignes

CTRL+C pour copier, CTRL+V pour coller
1
SELECT Chercheur.Nom
2
FROM Chercheur
3
WHERE Chercheur.Universite IN 
4
 (SELECT Universite.Nom 
5
FROM Universite 
6
WHERE Universite.Ville='Paris')
SELECT Chercheur.Nom
FROM Chercheur
WHERE Chercheur.Universite IN 
 (SELECT Universite.Nom 
 FROM Universite 
 WHERE Universite.Ville='Paris')

ExempleSous-requête IN à plusieurs colonnes et plusieurs lignes

CTRL+C pour copier, CTRL+V pour coller
1
SELECT N°SS
2
FROM Chercheur
3
WHERE (Nom, Prenom, Age) IN 
4
 (SELECT Nom, Prenom, Age 
5
FROM Enseignant)
SELECT N°SS
FROM Chercheur
WHERE (Nom, Prenom, Age) IN 
 (SELECT Nom, Prenom, Age 
 FROM Enseignant)

ExempleImbrication multiple de requêtes

CTRL+C pour copier, CTRL+V pour coller
1
SELECT Nom
2
FROM Chercheur
3
WHERE Universite='Paris6' AND Nom IN 
4
 (SELECT Nom
5
FROM Enseignant
6
WHERE Universite IN
7
  (SELECT Nom
8
  FROM Universite
9
  WHERE Ville='Paris'))
SELECT Nom
FROM Chercheur
WHERE Universite='Paris6' AND Nom IN 
 (SELECT Nom
 FROM Enseignant
 WHERE Universite IN
  (SELECT Nom
  FROM Universite
  WHERE Ville='Paris'))

RemarqueJointure par la sous-requête IN

La sous-requête IN est une troisième voie, avec les clauses WHERE et JOIN, pour réaliser des jointures entre relations. On préfèrera néanmoins éviter d'utiliser à cette unique fin cette version plus procédurale.

RemarqueNOT IN

On peut tester la non existence du tuple dans la sous requête en utilisant la clause NOT IN à la place de la clause IN.