Maison > base de données > SQL > SQL Server utilise CROSS APPLY et OUTER APPLY pour implémenter les requêtes de connexion

SQL Server utilise CROSS APPLY et OUTER APPLY pour implémenter les requêtes de connexion

WBOY
Libérer: 2022-08-26 14:07:24
avant
2307 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur SQL server. Il présente principalement la méthode de SQL Server utilisant CROSS APPLY et OUTER APPLY pour implémenter les requêtes de connexion. L'article le présente en détail à travers un exemple de code, je l'espère. aide tout le monde.

SQL Server utilise CROSS APPLY et OUTER APPLY pour implémenter les requêtes de connexion

Étude recommandée : "Tutoriel SQL"

Vue d'ensemble

CROSS APPLY et OUTER APPLY peuvent faire :
Lorsqu'un enregistrement dans la table de gauche est associé à plusieurs enregistrements dans la table de droite, je dois en contrôler un ou plusieurs enregistrements dans la table de droite. Les enregistrements correspondent à la table de gauche.

Il existe deux tables : Student (table des étudiants) et Score (table des scores). Les données sont les suivantes :

1. CROSS APPLY

ROSS APPLY signifie "application croisée". table de gauche , , puis chaque enregistrement de la table de droite est mis en correspondance avec l'enregistrement actuel dans la table de gauche. Si la correspondance réussit, les enregistrements de la table de gauche et de la table de droite seront fusionnés en un seul enregistrement et si la correspondance échoue, les enregistrements de la table de gauche et de la table de droite seront supprimés ; (Similaire à INNER JOIN)

Interrogez les deux derniers résultats des tests de chaque élève.

SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1
CROSS APPLY
(
    SELECT TOP 2 * FROM Score AS T
    WHERE T1.StudentNo = T.StudentNo
    ORDER BY T.ExamDate DESC
) AS T2
Copier après la connexion

Résultat :

2. OUTER APPLY

OUTER APPLY signifie "application externe", ce qui est cohérent avec le principe de CROSS APPLY, sauf que lorsque la correspondance échoue, la table de gauche et la table de droite seront également être fusionné en un seul enregistrement de sortie, mais le champ de sortie de la table de droite est nul. (Similaire à LEFT OUTER JOIN)

Interrogez les deux derniers résultats aux tests de chaque élève et remplissez les scores des étudiants qui n'ont pas passé le test avec null

SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1
OUTER APPLY
(
    SELECT TOP 2 * FROM Score AS T
    WHERE T1.StudentNo = T.StudentNo
    ORDER BY T.ExamDate DESC
) AS T2
Copier après la connexion

Résultat :

3. Scénarios d'application

1. Combinaison de fonctions table Utilisation :

Il existe un tableau comme celui-ci :

Un tableau très simple avec un seul champ num. Je souhaite convertir les nombres entiers de ce champ en valeurs binaires octales et hexadécimales. respectivement. Il existe des fonctions table prêtes à l'emploi pour la conversion de base.

SELECT * FROM #T a CROSS APPLY [dbo].[F_TConversion](a.num)
Copier après la connexion

Pour résumer : si l'ensemble de résultats de la requête doit utiliser une fonction table pour traiter la valeur d'un champ, veuillez utiliser CROSS APPLY~

2 Utilisation de la sous-requête principale :

Il existe une table étudiante. , les trois champs de nom, de sujet et de score sont les suivants :

Je veux voir le nom, le sujet et le score de la première place en chinois, des deux premiers en mathématiques et des trois premiers en anglais . La méthode d'implémentation utilisant cross apply est la suivante :

SELECT b.* FROM (
    select Subject='Chiness',num=1 union all
    select 'Math',2 union all
    select 'English',3) a 
cross apply 
    (select top(a.num) * from Students where Subject=a.Subject ) b
Copier après la connexion

Apprentissage recommandé : "Tutoriel SQL"

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
sql
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal