SQL語句執行的時候是有一定順序的。理解這個順序對SQL的使用和學習有很大的幫助。
1.from
先選擇一個表,或者說源頭,構成一個結果集。
2.where
然後用where對結果集進行篩選。篩選出需要的信息形成新的結果集。
3.group by
對新的結果集分組。
4.having
篩選出想要的分組。
5.select
選擇列。
6.order by
當所有的條件都弄完了。最後排序。
我的理解是這樣,SQL語句中無論是否連接的其他表。 無論如何都要先形成一個結果集。後面的順序不變!
只不過使用連接時,形成結果集合的方式略有不同。這個和 Left Join的實現原理有關。
select a.name,b.name
from T_left a //1
Left Join T_Right b //3
ON a.id = b.id //2
使用Left Join 形成結果集的方式是這樣的。
1. 首先對From子句中的前兩個表,執行笛卡爾積運算。運算結果 形成一個結果集合。
2. ON按條件,對上邊的結果集,進行篩選,形成新的結果集。
3. 以左連接為例,如果T_left中存在未匹配到的行。那麼把T_left中的這幾行以外部行的形式加到上邊的結果集中形成新的結果集。
4. 如果存在多張表,重復1~3過程!