SQL Server Cross et Exter s'appliquent

SQL Server Cross et Exter s'appliquent

Les fonctions évaluées au tableau sont un type de fonctions dans SQL Server qui renvoie les données sous forme de tables. Lorsque vous effectuez des jointures dans SQL Server, vous pouvez rejoindre des lignes à partir de deux tables de base de données ou plus. Cependant, la possibilité de rejoindre un tableau avec une sortie d'une fonction évaluée de table n'est pas prise en charge à moins que vous n'utilisiez Appliquer les opérateurs.

SQL Server prend en charge deux opérateurs d'application:

  1. Croix s'appliquer.
  2. Extérieur appliquer.

Cross Apply est étroitement similaire, sémantiquement, à une jointure intérieure du serveur SQL. Cela signifie qu'il récupère les lignes d'une fonction de valeur de table et celle du tableau pour rejoindre uniquement là où il y a des correspondances entre les deux tables.

Extérieur s'appliquer, rejoindra les enregistrements d'une fonction de valeur de la table, et le tableau défini, quelles que soient toutes les lignes correspondantes.

Pour mieux comprendre comment utiliser les opérateurs croisés et extérieurs de SQL Server, adoptons une approche pratique.

Commencez par créer une base de données de test:

Créer une base de données ApplicationDB;

Passez à la base de données Créer:

Utiliser ApplyDB;

Ensuite, créez des tables et insérez des exemples de données comme indiqué:

CreateTableUsers
(
id int identité keynot null,
Nom d'utilisateur Varchar (50) pas null,
)
Création de messages
(
id int identité keynot null,
Post_name Varchar (255) pas nul,
Catégorie Varchar (50),
Pub_date Date,
user_id int not null
));
insertoussers (nom d'utilisateur)
valeurs («brekyoga»),
('Sputnik1'),
('babayaga'),
('Jagten'),
('lavalp');
INSERTINTO POSTS (POST_NAME, CATTEL, PUB_DATE, USER_ID)
valeurs ('title1', 'catégorie1', '2021-12-31', 1),
('Title2', 'Catégorie2', '2019-03-03', 1),
('Title3', 'Catégorie3', '2021-01-01', 2),
('Title4', 'Catégorie4', '2021-06-07', 5),
('Title5', 'catégorie5', '2020-04-11', 3);

L'exemple de script de requête crée deux tables: utilisateurs et articles. Le tableau des publications contient une colonne User_ID qui contient les valeurs du tableau des utilisateurs permettant des relations un à plusieurs dans la base de données.

SQL Server Cross s'applique

Essayons une jointure intérieure avec une table évaluée au tableau comme:

createFunction getPostsByid (@id int)
returnstable
comme
retour
(
sélectionnez * à partir des messages où user_id = 1
));
aller
Sélectionnez U.Nom d'utilisateur, P.id, p.Post_name, P.pub_date
depuis user u
innerjoin getPostsbyid (u.id) p
sur toi.id = p.ID de l'utilisateur;

SQL Server renvoie une erreur comme:

Pour résoudre ce problème, nous pouvons utiliser Cross Apply As:

Sélectionnez U.Nom d'utilisateur, P.id, p.Post_name, P.pub_date
des utilisateurs u
Cross Appliquer GetPostsbyid (u.id) p

La requête ci-dessus doit s'exécuter avec succès et renvoyer le résultat comme:

SQL Server Extérieur Appliquer

Nous pouvons récupérer les lignes de la fonction physique et de la fonction à l'aide de l'application extérieure comme indiqué:

Sélectionnez U.Nom d'utilisateur, P.id, p.Post_name, P.pub_date
des utilisateurs u
Extérieur appliquer getPostsbyid (u.id) p

L'ensemble de requête résultant est comme indiqué:

Conclusion

Cet article couvre comment travailler avec les opérateurs externes et croisés de SQL Server pour rejoindre une table physique et une fonction de table évaluée.