SQL Server使用CROSS APPLY與OUTER APPLY實現(xiàn)連接查詢
概述
CROSS APPLY 與 OUTER APPLY 可以做到:
左表一條關聯(lián)右表多條記錄時,我需要控制右表的某一條或多條記錄跟左表匹配的情況。
有兩張表:Student(學生表)和 Score(成績表),數(shù)據(jù)如下:
一、CROSS APPLY
ROSS APPLY 的意思是“交叉應用”,在查詢時首先查詢左表,,然后右表的每一條記錄跟左表的當前記錄進行匹配。匹配成功則將左表與右表的記錄合并為一條記錄輸出;匹配失敗則拋棄左表與右表的記錄。(與 INNER JOIN 類似)
查詢每個學生最近兩次的考試成績。
SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1CROSS APPLY( SELECT TOP 2 * FROM Score AS T WHERE T1.StudentNo = T.StudentNo ORDER BY T.ExamDate DESC) AS T2
結果:
二、OUTER APPLY
OUTER APPLY 的意思是“外部應用”,與 CROSS APPLY 的原理一致,只是在匹配失敗時,左表與右表也將合并為一條記錄輸出,不過右表的輸出字段為null。(與 LEFT OUTER JOIN 類似)
查詢每個學生最近兩次的考試成績,沒有參加考試的同學成績補 null
SELECT T1.StudentNo, T1.Name, T2.ExamScore, T2.ExamDate FROM Student AS T1OUTER APPLY( SELECT TOP 2 * FROM Score AS T WHERE T1.StudentNo = T.StudentNo ORDER BY T.ExamDate DESC) AS T2
結果:
三、應用場景
1.結合表值函數(shù)使用:
有一張表是這樣的:
很簡單的一張表,就一個字段num,我想把這個字段的int型數(shù)字分別轉化成二進制八進制和十六進制的數(shù)值,有現(xiàn)成的進制轉化的表值函數(shù)。
SELECT * FROM #T a CROSS APPLY [dbo].[F_TConversion](a.num)
總結一下:如果查詢結果集需要用到表值函數(shù)對某個字段的值進行處理的話,請使用CROSS APPLY~
2.top子查詢的用法:
有一張學生表,分別name,學科,分數(shù) 這三個字段,如下:
我要看語文第一名,數(shù)學前兩名,英語前三名的name,學科,分數(shù),用cross apply實現(xiàn)方法如下:
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
到此這篇關于SQL Server使用CROSS APPLY與OUTER APPLY實現(xiàn)連接查詢的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。
相關文章:
1. SQL SERVER2000中訂閱與發(fā)布的具體操作2. SQL Server 2022 AlwaysOn新特性之包含可用性組詳解3. SQL Server 2008清空刪除日志文件4. SQL Server根據(jù)查詢結果,生成XML文件5. 榨干MS SQL Server 最后一滴血6. Microsoft SQL Server 查詢處理器的內部機制與結構(2)7. 在sqlserver2005中安裝sql server 2000的示例數(shù)據(jù)庫northwind8. SQL Server判斷數(shù)據(jù)庫、表、列、視圖、存儲過程、函數(shù)是否存在總結9. MS SQL Server 2005 開發(fā)之分頁存儲過程10. 關于SQL server中字段值為null的查詢
