| 閱文時長 | | 1.26分鐘 | 字數統計 | | 2027.2字符 |
| 主要內容 | | 1、引言&背景 2、官方定義&示例 3、CROSS APPLY和CROSS JOIN是等價的嗎?如果不等價的話,區別在哪里? 4、宣告與參考資料 | ||
| 『MSSQL·APPLY關鍵字的學習理解』 | |||
| 撰寫人 | | SCscHero | 撰寫時間 | | 2021/8/19 PM9:9 |
| 文章型別 | | 系列 | 完成度 | | 已完成 |
| 座右銘 | 每一個偉大的事業,都有一個微不足道的開始, | ||
一、引言&背景 完成度:100%
a) 應對問題
- APPLY關鍵字的基本用法、作用、官方定義、使用場景是怎樣的?
- CROSS APPLY和CROSS JOIN是等價的嗎?如果不等價的話,區別在哪里?
- OUTER APPLY和CROSS APPLY區別是什么?
b) 應對場景
- 涉及APPLY關鍵字的場景、或涉及CROSS APPLY的場景,
- 涉及到表值函式相關的場景,
c) 術語概念
笛卡爾積:笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X × Y,第一個物件是X的成員而第二個物件是Y的所有可能有序對的其中一個成員,通俗理解的話博主可以舉個例子,例如有兩個集合,一個有Y個元素,一個有X個元素,那么他們的笛卡爾積就是X × Y個元素,
二、官方定義&示例 完成度:100%
a) CROSS JOIN的官方定義
The Crossjoin function returns the cross product of two or more specified sets. The order of tuples in the resulting set depends on the order of the sets to be joined and the order of their members. For example, when the first set consists of {x1, x2,...,xn}, and the second set consists of {y1, y2, ..., yn}, the cross product of these sets is:
----來自《微軟英文檔案·Crossjoin (MDX)》[1]
{(x1, y1), (x1, y2),...,(x1, yn), (x2, y1), (x2, y2),...,
(x2, yn),..., (xn, y1), (xn, y2),..., (xn, yn)}
b) APPLY的官方定義
APPLY運算子的左運算元和右運算元都是表運算式,這些運算元之間的主要區別是,right_table_source可以使用表值函式,該函式可從left_table_source獲取一個列作為函式的引數之一,left_table_source可以包括表值函式,但不能以來自 right_table_source的列作為引數,
----來自《微軟中文檔案·使用Apply》[2]
APPLY運算子通過以下方式作業,以便為FROM子句生成表源:
針對left_table_source的每一行計算right_table_source以生成行集,
right_table_source中的值取決于left_table_source,right_table_source可以按以下方式近似表示:TVF(left_table_source.row),其中,TVF是表值函式,
通過執行UNION ALL操作,將計算right_table_source的值時為每行生成的結果集與left_table_source組合起來,
APPLY運算子的結果生成的列的串列是來自left_table_source(與來自right_table_source的列的串列相組合)的一組列,
c) Apply官方示例
- 將左結果集作為引數傳入表值函式,
- 這里還介紹了下OUTER APPLY和CORSS APPLY的區別:即,左結果集沒有匹配到右邊結果集(表值函式中的資料)的情況:
CROSS APPLY:不顯示左結果集中未匹配到的記錄,類似于INNER JOIN,
OUTER APPLY:顯示左結果集中匹配到的記錄,類似于LEFT JOIN,
三、CROSS APPLY和CROSS JOIN是等價的嗎?如果不等價的話,區別在哪里? 完成度:100%
a) 等價的情況
- 如果使用無條件連接的話,如下圖,兩種寫法是等價的,都是顯示笛卡爾積,
b) 不等價的情況
不等價情況:CROSS JOIN和CROSS APPLY語法結構上的不同,例如CROSS JOIN帶上條件會報錯,
四、宣告與參考資料 完成度:100%
微軟中文檔案·FROM 子句以及 JOIN、APPLY、PIVOT (Transact-SQL)
原創博文,未經許可請勿轉載,
如有幫助,歡迎點贊、收藏、關注,如有問題,請評論留言!如需與博主聯系的,直接博客私信SCscHero即可,
微軟英文檔案·Crossjoin (MDX) ??
微軟中文檔案·使用Apply ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/296432.html
標籤:SQL Server
