官术网_书友最值得收藏!

3.6 一個例子說明“合并查詢的6個聯接類型”

小勤:大海,關聯表的合并查詢功能里的聯接種類怎么這么多啊?有左外部、右外部、完全外部、內部、左反、右反共6種,分別都是什么意思呢(見圖3-40)?

圖3-40 Power Query中的表間聯接種類

大海:其實括號里的文字就表達了它們的意思了。只是因為沒有具體數據,所以不太好理解而已。

小勤:看概念和文字真的很難理解,即使理解了,感覺心里還是沒底。

大海:對。因為沒有數據帶來的感觀認識,即使感覺上理解了,也很難達到活用的狀態。所以,我專門準備了一套簡單的數據來演示給你看,回頭你也分別操作一下,然后對比一下結果,這樣就感覺很明顯了。

小勤:這真是太好了!

大海:我這里有一個訂單表和一個訂單明細表。先看一下這兩個表的情況,其中,訂單表里有一些數據是明細表里沒有的,明細表里也有一些數據是訂單表里沒有的。

另外,在后面操作時將基于訂單表創建合并查詢,然后選明細表,所以這里將訂單表叫左表,將明細表叫右表,如圖3-41所示。

圖3-41 示例數據說明

接下來將兩個表的數據都獲取到Power Query里。因為只需要在Power Query里觀察各種聯接類型的結果,所以只需要以“僅創建連接”方式獲取數據。

Step 01 通過“以表格”方式獲取訂單表到Power Query里后,修改查詢名稱為“訂單表”,如圖3-42所示。

Step 02 同樣,通過“以表格”方式獲取明細表到Power Query中,然后修改查詢名稱,如圖3-43所示。

圖3-42 修改訂單表查詢名稱

圖3-43 修改訂單明細表的查詢名稱

Step 03 為了讓結果比較更明顯一點,我們把兩個表的其他列都刪掉,只剩訂單ID列:分別選中“訂單表”或“訂單明細”查詢,單擊“訂單ID”列的列名以選中該列,切換到“開始”選項卡,單擊“刪除列”按鈕,在下拉菜單中選擇“刪除其他列”命令,如圖3-44和圖3-45所示。

圖3-44 刪除訂單表中不需要的列

圖3-45 刪除訂單明細表中不需要的列

Step 04 單擊“訂單表”查詢,切換到“開始”選項卡,單擊“合并查詢”按鈕,在下拉菜單中選擇“將查詢合并為新查詢”命令,如圖3-46所示。

Step 05 生成左外部查詢:在彈出的對話框中選擇“訂單明細”表,并依次單擊兩表中的“訂單ID”列完成匹配,在“聯接種類”中選擇“左外部(第一個中的所有行,第二個中的匹配行)”選項,單擊“確定”按鈕,如圖3-47所示。

圖3-46 合并到新查詢

圖3-47 設置“左外部”合并查詢

Step 06 展開合并數據:單擊“訂單明細”列右側的數據展開按鈕,保持“使用原始列名作為前綴”復選框為選中狀態,單擊“確定”按鈕,如圖3-48所示。

Step 07 修改查詢名稱:單擊選中新生成的查詢“Merge1”,在“查詢設置”的“屬性/名稱”中將“名稱”修改為“左外部”,如圖3-49所示。

圖3-48 展開合并查詢的結果數據

圖3-49 修改查詢的名稱

Step 08 重復Step 04 ~Step 07 分別生成右外部、完全外部、內部、左反、右反查詢,結果如圖3-50所示。

圖3-50 選擇不同的聯接類型

接下來開始比較各種聯接類型的結果。

● 左外部:只要訂單表(左表)里有的數據,結果表里都會有。但明細表(右表)里有些列沒有數據,所以匹配過來后會成為null(空值),如圖3-51所示。

● 右外部:和左外部相反,即明細表(右表)里有的數據,結果表里都會有。但因為訂單表(左表)里有部分數據沒有,所以合并后用null值表示,如圖3-52所示。

圖3-51 左外部查詢的結果

圖3-52 右外部查詢的結果

● 完全外部:不管哪個表里的數據,全都進入結果表。對于一方沒有的數據,合并后顯示為null值,如圖3-53所示。

● 內部:跟“完全外部”相反,兩個表都有的數據才進入結果表,如圖3-54所示。

圖3-53 完全外部查詢的結果

圖3-54 內部查詢的結果

● 左反:只有訂單表(左表)有而明細表(右表)沒有的數據,才進結果表。這種用法經常用于檢查哪些訂單缺了明細表等,如圖3-55所示。

● 右反:和“左反”相反,只有明細表(右表)有而訂單表(左表)沒有的數據,才進入結果表,如圖3-56所示。

圖3-55 左反查詢的結果

圖3-56 右反查詢的結果

最后總結見表 3-1(“我”表示左表,“你”表示右表)。

表3-1 Power Query合并查詢聯接種類參考表

表3-1中的函數參數是進行合并操作時生成的代碼參數,如圖3-57所示。

圖3-57 合并查詢操作生成的代碼及參數

如果在Power Query的操作中可以選擇相應的聯接類型,則這些參數會自動生成。對于版本比較低的用戶,如果操作過程中不能選擇需要的聯接類型,可在合并后生成的代碼中直接加入或修改該參數來達到相應的效果。

主站蜘蛛池模板: 根河市| 土默特右旗| 广灵县| 上饶市| 延川县| 阿城市| 惠安县| 上栗县| 修水县| 卫辉市| 尤溪县| 新沂市| 莆田市| 洪泽县| 井冈山市| 高青县| 阿荣旗| 巴南区| 高安市| 乐亭县| 广河县| 廉江市| 鹤岗市| 广安市| 普兰店市| 德惠市| 新干县| 彭州市| 伊春市| 社旗县| 乐都县| 铅山县| 南丹县| 双江| 汉川市| 稻城县| 徐水县| 青阳县| 三门县| 石棉县| 金华市|