MySQL連接查詢
-
需求1:查詢出所有的學生,而且要求顯示學生所在的班級信息
-
連接查詢的概念:
將多張表(可以大於2張表)進行記錄的查詢(按照某個指定的條件進進行字段的拼接),查詢的結果是:記錄數有可能變化,但是字段數是一定會增加的(至少是兩張表的合併)
-
連接查詢的意義:
在用戶查看數據的時候,需要顯示的數據來自多張表 ,那麼我們這個時候就可以使用連接查詢數據的整合。
-
連接查詢的分類:
內連接、外連接、自然連接、交叉連接
連接查詢的使用:左表join右表
左表:在關鍵字join左邊的表
右表:在關鍵字join右邊的表
-
交叉連接:
-
概念:
-
cross join ,從一張表中循環取出每一條記錄,每條記錄都去另外一張表進行匹配,匹配一定保留(沒有條件匹配),而本身字段就會增加(保留),最終形成的結果叫做 笛卡兒積
-
基本語法:
左表 cross join 右表; 這條語句實際上等價於 from 左表,右表;
這樣是很容易產生笛卡兒積,應該儘量避免,交叉連接的價值就是保證這種連接的完整性。
-
內連接
-
概念:
-
[inner] join,從左表中取出每一條記錄,去右表中與所有的記錄進行匹配:匹配必須是某個條件在左表與右表中相同最終才保留結果,否則就不保留結果。
-
基本語法:
左表[inner] join右表 on 左表.字段 = 右表.字段; on表示連接條件:條件字段就代表相同的業務含義(my_id.c_id 和my_class.c_id);
-
外連接
-
概念:
-
我們叫做outer join 但是實際上沒有outer關鍵字,以某張表爲主,取出裏面所有的記錄,然後每條與另外一張表進行連接,不管能不能匹配上條件,最終結果都會保留:能匹配的話,就會正確保留,不能匹配的話,就會其他表的字段都置爲空。
-
外連接分類:
是以某張表爲主:有主表
Left join 左外連接(左連接),以左表爲主
Right join 右外連接(右連接),以右表爲主
-
基本語法:
左表left/right 右表 on 左表.字段 = 右表.字段;
顯然左連接和右連接是有差異的,但是現實的結果永遠是左表的數據在左邊,右表的數據在右邊。左連接和右連接可以互相轉化。
-
自然連接
-
概念:
-
natural join 就是自動匹配條件:系統以字段命名作爲匹配模式(通字段名就作爲條件,多個同名字段都作爲爲條件),自然連接自動使用同名字段作爲連接條件,連接之後會自動合併同名字段。
-
自然連接的分類:
自然內連接與自然外連接。
-
自然內連接:
左表 natural join 右表;
-
自然外連接:
左表 natural left/right join 右表;
注意:在實際應用中實際上很少使用自然連接,因爲除非我們能夠偶保證嚴格的字段命名才能夠使自然連接派上用場,但是我們很少能夠設計出很嚴格的表。
其實,內連接和外連接都能模擬自然連接,模擬同名字段,合併字段。基本語法爲:
左表 inner/left/right join 右表 using (字段名); 這樣我們就可以使用同名字段作爲連接條件,而且能夠自動合併同名字段。