<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
WHERE子句中使用的連線語句,在資料庫語言中,被稱為隱性連線。INNER JOIN……ON子句產生的連線稱為顯性連線。(其他JOIN引數也是顯性連線)WHERE和INNER JOIN產生的連線關係,沒有本質區別,結果也一樣。但是!隱性連線隨著資料庫語言的規範和發展,已經逐漸被淘汰,比較新的資料庫語言基本上已經拋棄了隱性連線,全部採用顯性連線了。
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
說是“邏輯上” 順序,因為實際執行時還要看索引,資料分佈等,看最終優化器如何處理,最真實的順序肯定是執行計劃展示的順序。
SQL語句中join連表時on和where後都可以跟條件,那麼對查詢結果集,執行順序,效率是如何呢? 通過查詢資料發現:
區別:
on是對中間結果進行篩選,where是對最終結果篩選。
執行順序:
先進行on的過濾, 而後才進行join。
效率:
如果是inner join, 放on和放where產生的結果一樣, 但沒說哪個效率速度更高? 如果有outer join (left or right), 就有區別了, 因為on生效在先, 已經提前過濾了一部分資料, 而where生效在後.
最後來了解下T-SQL對查詢邏輯處理。
T-SQL邏輯查詢的各個階段(編號代表順序):
(5)SELECT DISTINCT TOP(<top_specification>) <select_list>
(1)FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate>
(2)WHERE <where_predicate>
(3)GROUP BY <group_by_specification>
(4)HAVING <having_predicate>
(6)ORDER BY <order_by_list>
T-SQL在查詢各個階級分別幹了什麼:
(1)FROM 階段
FROM階段標識出查詢的來源表,並處理表運運算元。在涉及到聯接運算的查詢中(各種join),主要有以下幾個步驟:
a.求笛卡爾積。不論是什麼型別的聯接運算,首先都是執行交叉連線(cross join),求笛卡兒積,生成虛擬表VT1-J1。
b.ON篩選器。這個階段對上個步驟生成的VT1-J1進行篩選,根據ON子句中出現的謂詞進行篩選,讓謂詞取值為true的行通過了考驗,插入到VT1-J2。
c.新增外部行。如果指定了outer join,還需要將VT1-J2中沒有找到匹配的行,作為外部行新增到VT1-J2中,生成VT1-J3。
經過以上步驟,FROM階段就完成了。概括地講,FROM階段就是進行預處理的,根據提供的運運算元對語句中提到的各個表進行處理(除了join,還有apply,pivot,unpivot)
(2)WHERE階段
WHERE階段是根據<where_predicate>中條件對VT1中的行進行篩選,讓條件成立的行才會插入到VT2中。
(3)GROUP BY階段
GROUP階段按照指定的列名列表,將VT2中的行進行分組,生成VT3。最後每個分組只有一行。
(4)HAVING階段
該階段根據HAVING子句中出現的謂詞對VT3的分組進行篩選,並將符合條件的組插入到VT4中。
(5)SELECT階段
這個階段是投影的過程,處理SELECT子句提到的元素,產生VT5。這個步驟一般按下列順序進行
a.計算SELECT列表中的表示式,生成VT5-1。
b.若有DISTINCT,則刪除VT5-1中的重複行,生成VT5-2
c.若有TOP,則根據ORDER BY子句定義的邏輯順序,從VT5-2中選擇簽名指定數量或者百分比的行,生成VT5-3
(6)ORDER BY階段
根據ORDER BY子句中指定的列明列表,對VT5-3中的行,進行排序,生成遊標VC6.
如果是inner join, 放on和放where產生的結果一樣, 執行計劃也是一樣,但推薦使用on。但如果有outer join (left or right), 就有區別了, 因為on生效在先, 已經提前過濾了一部分資料, 而where生效在後,而且on對於outer join有不生效的情況,需要看and條件是作用在左表還是右表。
原本意圖是取a表的昨日分割區資料和b表的昨日分割區資料進行join,但是發現加上and b.dt = '${daily}'的條件後就取不到在a表中存在的資料了
select substr(a.create_time,1,7) create_month,a.service_id,a.unit_number,a.company_name,coalesce(b.unified_social_credit_code,'unknown') unified_social_credit_code ,a.company_id,b.company_id as company_id_b,a.dt,b.dt from clouduser.dz_company a left join clouduser.dz_company_detail b on a.company_id = b.company_id where a.dt = '${daily}' --and b.dt = '${daily}' and substr(a.create_time,1,7) = '2022-09' and a.company_name = '浙江港都電子有限公司';
執行結果
現在子查詢中將b表的昨日分割區查詢出來,再和a表join
with r1 as (select * from clouduser.dz_company_detail where dt = '2022-10-17'), r2 as ( select substr(a.create_time,1,7) create_month,a.service_id,a.unit_number,a.company_name,coalesce(b.unified_social_credit_code,'unknown') unified_social_credit_code ,a.company_id,b.company_id as company_id_b from clouduser.dz_company a left join r1 b on a.company_id = b.company_id where a.dt = '${daily}' --and b.dt = '${daily}' and substr(a.create_time,1,7) = '2022-09' and a.company_name = '浙江港都電子有限公司' ) select * from r2;
執行結果
可以看到正常查詢出a表中的資料了
到此這篇關於join on和where執行順序的文章就介紹到這了,更多相關join on和where執行順序內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45