數據庫——(8)連接查詢

連接查詢:將多張表進行紀錄的連接(按照某個指定的條件進行數據拼接)。
最終結果是:紀錄數有可能變化,字段數一定會增加(至少兩張表的合併)。

連接查詢的意義:在用戶查看數據的時候,需要顯示的數據來自多張表。
連接查詢:join,使用方式:左表 join 右表
左表:join左邊的表;右表:join右邊的表。
SQL中將連接查詢分爲四類:內連接,外連接,自然連接和交叉連接。

交叉連接:cross join,從一張表中循環取出每一條紀錄,每條紀錄都去另一張表匹配,匹配結果一定保留,而連接本身字段會增加,最終形成笛卡兒積。
基本語法:左表 cross join 右表;

select * from my_stu cross join my_class;

交叉連接存在的價值:保證連接這種結構的完整性。

內連接:[inner] join,從左表中取出每一條紀錄,去右表中與所有的紀錄匹配,匹配必須是某個條件在左表中與右表相同最終纔會保留結果,否則不保留。
基本語法:左表[inner] join 右表 on 左表.字段 = 右表.字段;

select * from my_stu inner join my_class on my_stu.c_id = my_class.id;

在查詢數據的時候,不同表有同名字段,這個時候要加上別名區分。

select s.*,c.name as c_name,c.room as c_room from -- -- 字段別名
my_stu as s inner join my_class as c 
on s.c_id = c.id; -- -- 表別名

注意:
1.內連接要求連接兩邊的結果都存在。
2.內連接可以沒有條件,不過這就形成了笛卡兒積。
3.內連接還可以使用where代替on,不過不推薦因爲where沒有on效率高。

外連接:outer join(實際沒有outer關鍵字),以某張表爲主,取出裏面的所有紀錄,然後每條與另外一張表連接,不管能不能匹配上條件,最終都會保留。能匹配,正確保留;不能匹配,其他表的字段都置NULL。
外連接分爲兩種:
left join:左外連接
right join:右外連接
基本語法:左表 left/right join 右表 on 左表.字段 = 右表.字段;

自然連接:natural join,自然連接就是自動匹配連接條件:系統以同名字段作爲條件(多個同名字段都作爲條件)。
自然連接可以分爲自然內連接:

select * from my_stu natural join my_class;

和自然外連接:

select * from my_stu natural left join my_class;

外連接可以模擬自然連接,使用using

select * from my_stu left join my_class using(id);x
發佈了38 篇原創文章 · 獲贊 2 · 訪問量 9707
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章