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
.