J'essaie d'apprendre SQL et j'ai du mal à comprendre les déclarations EXISTS. Je suis tombé sur cette citation sur "existe" et je ne comprends pas quelque chose:
En utilisant l'opérateur existe, votre sous-requête peut renvoyer zéro, une ou plusieurs lignes, et la condition vérifie simplement si la sous-requête a renvoyé des lignes. Si vous regardez la clause select de la sous-requête, vous verrez qu'elle se compose d'un seul littéral (1); étant donné que la condition de la requête contenant 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 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'ID du fournisseur et la table des commandes correspondent, la sous-requête retournera true et toutes les colonnes de la ligne correspondante dans la table des fournisseurs seront générées. Ce que je n'obtiens pas, c'est comment la sous-requête communique quelle ligne spécifique (disons la ligne avec l'ID de 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.
