J'essaie d'apprendre SQL et j'ai du mal à comprendre les instructions EXISTS. Je suis tombé sur cette citation à propos de "exists" et je ne comprends pas quelque chose :
En utilisant l'opérateur exists, votre sous-requête peut renvoyer zéro, un ou plusieurs enregistrements, et la condition vérifie simplement si la sous-requête a renvoyé des enregistrements. Si vous regardez la clause select de la sous-requête, vous verrez qu'elle est constituée d'un seul littéral (1). Puisque la condition de la requête contenue n'a besoin que de savoir combien de lignes ont été renvoyées, les données réelles renvoyées par la sous-requête ne sont pas pertinentes.
Ce que je ne comprends pas, c'est comment la requête externe sait-elle quelle ligne la sous-requête vérifie ? Par exemple :
SELECT *
FROM suppliers
WHERE EXISTS (select *
from orders
where suppliers.supplier_id = orders.supplier_id);
Je comprends que si l'identifiant du fournisseur et celui de la table des commandes correspondent, la sous-requête retournera vrai et toutes les colonnes de la ligne correspondante dans la table des fournisseurs seront éditées. Ce que je ne comprends pas, c'est comment la sous-requête communique quelle ligne spécifique (disons la ligne avec l'id du fournisseur 25) doit être imprimée si seulement un vrai ou un faux est retourné.
Il me semble qu'il n'y a pas de relation entre la requête externe et la sous-requête.