Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment faire une SEMI JOIN GAUCHE dans SQL Server

Un LEFT SEMI JOIN est une sorte de demi-jointure. Il renvoie toutes les valeurs distinctes renvoyées par la requête à gauche et à droite de la requête.

Cependant, lors de l'utilisation de T-SQL dans SQL Server, si vous essayez d'utiliser explicitement LEFT SEMI JOIN dans votre requête, vous obtiendrez probablement l'erreur suivante :

Msg 155, Level 15, State 1, Line 4
'SEMI' is not a recognized join option.

Heureusement, T-SQL inclut le INTERSECT opérateur, qui nous permet d'effectuer un LEFT SEMI JOIN .

Lorsque vous utilisez le INTERSECT , il apparaît dans le plan d'exécution de la requête sous la forme d'un LEFT SEMI JOIN .

Vous pouvez également construire une sous-requête qui fait la même chose.

Exemple

Imaginez que nous avons deux tables; Cats et Dogs , puis nous exécutons la requête suivante :

SELECT 
    CatName AS PetName
FROM Cats
INTERSECT
SELECT 
    DogName AS PetName
FROM Dogs;

Cette requête utilise le INTERSECT opérateur, et il apparaîtra donc comme un LEFT SEMI JOIN dans le plan d'exécution.

Cela revient à faire ce qui suit :

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Voici le plan d'exécution de cette requête :

Si vous utilisez U-SQL avec Azure Data Lake Analytics, vous pouvez utiliser le SEMIJOIN clause pour faire des semi-jointures droite et gauche. Autrement dit, vous pouvez utiliser LEFT SEMIJOIN ou RIGHT SEMIJOIN .