L'exemple de sous-requête corrélée donné dans un livre est le suivant;Différence entre la sous-requête et la sous-requête corrélée pour le code donné
Les clients qui ont commandé le 12 Février 2007
SELECT custid, companyname
FROM Sales.Customers AS C
WHERE EXISTS
(SELECT *
FROM Sales.Orders AS O
WHERE O.custid = C.custid
AND O.orderdate = '20070212');
Mais, j'écrit le code suivant dans le même but en utilisant la sous-requête simple,
SELECT custid, companyname
FROM Sales.Customers
WHERE custid IN
(SELECT [custid] FROM [Sales].[Orders]
WHERE [orderdate] ='20070212')
deux donne une sortie identique. Quelle méthode est la meilleure? et pourquoi? et je ne comprends pas l'utilisation de EXISTS
ici dans le premier ensemble de codes
Vous pouvez lire ici (http://stackoverflow.com/questions/2065329/sql-server-in-vs-exists-performance), en fonction de la version de SQL Server que vous utilisez, les performances peuvent être différentes. Comme vous pouvez le lire dans les réponses et les commentaires, à partir de 2008, l'optimiseur traitera à la fois IN et EXISTS. –
EXISTS évalue le select, si le SELECT renvoie des lignes, alors EXISTS évalue à TRUE, sinon à FALSE. La méthode la plus efficace pourrait être la meilleure;) Pour savoir ce qui est fait différemment, vous devrez étudier le plan d'exécution des requêtes. Il se pourrait bien que vous obteniez le même plan d'exécution, ce qui signifierait que les deux requêtes sont en fait identiques. –