多表查詢select語句順序
存取時,為了方便分開存,取得時候需要連起來
連表操作實例:
# 插入數(shù)據(jù)
查看表:
此時發(fā)現(xiàn),拼表方式不是我們想要的,這個拼表方式稱為笛卡爾積形式

正確的拼表語句:

表的三種連接方式:
表連接有特有的語句表達,不要用where語句連表。
1、內(nèi)連接: 只取兩張表的共同部分
語法:
2、左連接, 在內(nèi)連接的基礎(chǔ)上保留左表的記錄
3、右連接
4、全外連接
在內(nèi)連接的基礎(chǔ)上,保留沒有對應(yīng)關(guān)系的記錄。
實例講解 select操作順序:
求平均年齡大于30歲的部門名
涉及到:拼接表、分組、聚合、刷選having

完整語法:
執(zhí)行順序: (重點)
1、FROM
第一步,執(zhí)行FRON語句。我們首先需要知道最開始從哪個表開始的,這就是FROW告訴我們的?,F(xiàn)在有了<Left_table>和right_table>兩個表,我們到底從哪個表開始,還是從兩個表進行某種聯(lián)系以后再開始呢?它們之間如何產(chǎn)生聯(lián)系呢?——笛卡爾積
2、執(zhí)行ON過濾
連表依據(jù),執(zhí)行完笛卡爾積以后,接著就進行條件過濾,根捆指定的條件,去掉那些不符合條件的數(shù)據(jù)
3、添加外部行
這一步只有在連接類型為OUTER J0IN時才發(fā)生,如LEFT OUTER JOIN、RIGHT OUTER J0IN和FULL OUTER J0IN。在大多數(shù)的時候,我們都是會省略掉OUTER關(guān)鍵字的,但OUTER表示的就是外部行的概念。
4、執(zhí)行WHERE過濾
對添加外部行得到的表進行WHERE過濾,只有符合<where_condition>的記錄才會輸出到新表中。
但是在使用where子句時,需要注意一下兩點:
????1)由于數(shù)據(jù)還沒有分組,因此現(xiàn)在還不能在where過濾中使用where_condition=MIN(col)這類對分組統(tǒng)計的過濾;
????2)由于還沒有進行列的選取操作,因此在select中使用列的別名也是不被允許的,如:select city as c from t where c='shanghai'是不允許出現(xiàn)的。
5、執(zhí)行GROUP BY分組
group by子句主要是對使用where子句得到的虛擬表進行分組操作。
6、執(zhí)行HAVING過濾
HAVING子句主要和GROUP BY子句配合使用,對分組得到的虛擬表進行條件過濾。
7、SELECT列表
現(xiàn)在才回執(zhí)行到SELECT子句,不要以為SELECT子句被寫在第一行,就是第一個被執(zhí)行的。
8、執(zhí)行DISTINCT子句
如果在查詢中指定DISTINCT子句,則會創(chuàng)建一張內(nèi)存臨時表,如果內(nèi)存放不下,就需要存放在硬盤了。
9、執(zhí)行ORDER BY 子句
對虛擬表的內(nèi)容按照指定的列進行排序,然后返回一個新的虛擬表。
10、執(zhí)行LIMIT子句
限制輸出數(shù)據(jù),很多時候,limit會與order by子句一起使用。