將多張表連在一起查詢(會導致記錄數行和字段數列發生改變)
意義:在關係型資料庫設計過程中,實體與實體之間是存在很多聯絡的。
在關係型資料庫表的設計過程中,遵循著關係來設計:一對一,一對多,多對多。通常在實際操作中,需要利用這層關係來保證資料的完整性。
將兩張表的資料與另外一張表彼此交叉(笛卡爾積)
表1
cross
join 表2
--例項
select
*from my_student cross
join my_teacher;
笛卡爾積沒有意義,應該盡量避免,存在的意義是保證這種結構的完整性。
[inner] join,從左表中取出每一條記錄,去右表中與所有的記錄進行匹配:匹配必須是某個條件在左表中與右表中相同最終才會保留結果,否則不保留。
表1
[inner
]join 表2
on 匹配條件
--例項
select
*from my_student inner
join my_class;
--不給定條件結果仍然是笛卡爾積
select
*from my_student inner
join my_class on class_id = id;
在查詢資料的時候,不同表可能會有同名字段,這個時候需要加上表名才能區分
select
*from my_student inner
join my_class on my_student.class_id = my_class.id;
而表名太長時,通常可以使用別名。
select
*from my_student [
as] s inner
join my_class [
as] t on s.class_id = c.id;
注:
內連線連線匹配的時候必須匹配到才會儲存(不匹配的記錄直接丟掉)
內連線還可以使用where代替on關鍵字(where是在交叉連線之後再篩選,所以建議用on)
內連線通常是在對資料有精確要求的地方使用:必須保證兩種表中都能進行資料匹配
outer join,按照某一張表作為主表(表中所有記錄在最後都被被保留),取出裡面的所有記錄,然後每條與另外一張表(從表)進行連線:不管能不能匹配上條件,最終都會保留:能匹配,正確保留;不能匹配,從表的字段都置空null。
外連線分為兩種:
left join:左外連線(左連線),以左表為主表
right join:右外連線(右連線),以右表為主表
左連線對應的主表資料在左邊,右連線對應的主表資料在右邊。
左連線:主表 left
join 從表 on 連線條件
右連線:從表 right
join 主表 on 連線條件
--例項
select
*from my_student s left
join my_class t on s.class_id = t.id;
--class 表裡只有1班和2班
注:非常常用的一種獲取資料的方式,作為資料獲取對應主表以及其他關聯資料
自然連線:natural join,自然連線,就是自動匹配連線條件:系統以欄位名字作為匹配模式(同名字段就作為條件,多個同名字段都作為條件)。
1.自然內連線
表1
natural
join 表2
--例項
2.自然外連線
左表 natural
left
/right
join 右表
--例項
在連線查詢中用來代替on關鍵字的,進行條件匹配。
原理:在使用連線查詢時使用on的地方用using代替
使用using的前提是對應的兩張表連線的字段是同名(類似自然連線自動匹配)
如果使用using關鍵字,那麼對應的同名字段,最終在結果中只會保留乙個
表1
[inner
,left
,right
]join 表2
using
(同名字段列表)
--例項
select
*from my_student left
join my_class using
(id)
--結果同上
通常不會用到因為設計表的時候不會出現同名字段 MySQL8 連線查詢
連線查詢 連線是關係型資料庫模型的主要特點。連線查詢是關係型資料庫中最主要的查詢,主要包括內連線 外連線等通過聯結運算子可以實現多個表查詢。在關係型資料庫管理系統中,表建立時各種資料之間的關係不必確定,常把乙個實體的所有資訊存放在乙個表中,當查詢資料時通過連線操作查詢出存放在多個表中的不同實體資訊,...
Mysql學習歷程(12) 連線查詢
連線查詢 將多張表進行記錄的連線 按照某個指定條件進行資料拼接 意義 在使用者檢視資料的時候,需要顯示的資料來自多張表 sql中連線查詢分為四類 內連線,外連線,自然連線,交叉連線 語法 左表 join 右表 一.交叉連線 cross join 語法 左表 cross join 右表 交叉連線是笛卡...
08 1連線查詢 外連線 MySQL
外連線 應用場景 用於查詢乙個表中有,另乙個表中沒有的記錄 特點 1 外連線的查詢結果為主表中的所有記錄 如果從表中有和主表匹配的,則顯示匹配的值 如果從表中沒有和主表匹配的,則顯示null 外連線查詢的結果 內鏈結結果 主表中有而從表中沒有的記錄 2 左外連線 left join 左邊的是主表 右...