APPLIQUER – est-ce exclusivement utilisé lors de l'adhésion à une fonction

L'opérateur APPLY n'est pas un opérateur que j'ai de l'expérience et je crains de manquer certaines possibilités.

Cet article d'Alexander Kuznetsov donne un bon exemple

Dans l'exemple d'Alexander, il utilise APPLY pour se joindre au return d'une fonction – y a-t-il d'autres situations où APPLY , CROSS ou OUTER devrait être la première chose que j'utilise?

APPLY est un opérateur row-by-row qui vous permet d' APPLY chaque ligne des tables précédentes à une fonction ou à une sous-requête. Il est donc très utile dans les situations où

  1. vous avez besoin du dernier logging / max / min de B de chaque logging dans A
  2. vous devez exécuter une fonction table sur chaque logging dans A

Oui, il peut replace un JOIN mais il fonctionnera terriblement là où un fonctionnement normal aurait fonctionné, car vous obligez SQL Server à utiliser des opérateurs ligne par ligne plutôt que JOIN.

La différence entre CROSS APPLY et OUTER APPLY est la même que la différence entre INNER JOIN et OUTER JOIN. Fondamentalement, CROSS APPLY supprimera l'logging source si la fonction / sous-requête à laquelle il est appliqué renvoie 0 loggings. OUTER APPLY conserve l'logging source.

Lire la suite: Utilisation de Apply (msdn)

APPLY peut join n'importe quel jeu de résultats arbitraire. Je trouve particulièrement utile de returnner la ligne TOP 1 en la commandant:

 select * from T cross apply ( select top 1 * from T2 order by DateTime desc ) x 

APPLY peut faire tout ce qu'un joint peut et plus. Mais il ne peut pas utiliser les astuces de jointure.

Fondamentalement, vous voulez utiliser une jointure si une jointure suffit. Utilisez appliquer si vous avez besoin de plus, car il est un peu plus encombrant à utiliser.

Fondamentalement, joignez l'utilisation pour combiner deux resultset mais CROSS APPLY se comporte comme une boucle et prend le résultat de la table externe puis passe chaque ligne pour conduire la table ou la fonction table comme paramètre pour produire le resultset. il y a deux formulaire sur appliquer APPLIQUER CROSS et APPLIQUER EXTÉRIEUR. CROSS APPLY t returnne uniquement les lignes qui correspondent à la table de lecteurs ou à la fonction table et le résultat EXTERNE APPLIQUER tous les loggings de la table externe et la correspondance de la table de lecteurs essayent d'éviter d'appliquer car sa requête lente rejoint ensuite