多表聯合查詢簡介 定義:連接查詢是關係型資料庫最主要的查詢,通過連接運算符可以實現多個表連接數據查詢。 分類:內連接,外連接,全外連接。 內連接 定義 內聯接使用比較運算符根據每個表的通用列中的值匹配兩個表中的行。 語法 select 表1.*,表2.* from 表1 as a [wtih(鎖)] ...
多表聯合查詢簡介
定義:連接查詢是關係型資料庫最主要的查詢,通過連接運算符可以實現多個表連接數據查詢。
分類:內連接,外連接,全外連接。
內連接
定義
內聯接使用比較運算符根據每個表的通用列中的值匹配兩個表中的行。
語法
select 表1.*,表2.* from 表1 as a [wtih(鎖)] inner join 表2 as b [wtih(鎖)] on a.值 {= | != } b.值 [條件1] [where 條件] [group by 條件] [having 條件] [order by 條件];
語法註釋
{}:大括弧內的值必選一個,例如:選擇=號。
[]:索引符號的值表示是可添加也可不添加的,例如:選擇不添加[條件1]。
[條件1]:[條件1]=[and | or ] [a.值=b.值 | a.值!=b.值 | a.值=值 | a.值!=值 | b.值=值 | b.值!=值],例如:and a.值=b值,或者,or a.值等於b.值。
[where 條件]:where後跟表中數據的篩選條件,例如:where a.值=1。
[group by 條件]:group by後面跟分組條件,可以跟一個或者多個分組條件,例如:group by a.值,b.值。
[having 條件]:having後邊主要是篩選group by條件分組後的結果,後面可以跟一個或者多個條件,例如:select max(a.id),min(b.name) from A as a inner join B as b on a.id=b.id group by a.id,b.name having a,id>1 and b.name=1。
[order by 條件]:order by後面跟排序條件,可以根據一個值或者多個值排序,例如:根據多個值排序,select a.* from A as a inner join B as b on a.id=b.id order by a.值 asc,b.值 desc。
示例:A表內連接B表,使用A表中的數據逐行匹配B表的中數據,匹配成功則返回,匹配失敗則不返回值,匹配成功一共返回五行數據,where條件篩選返回五行數據,group by條件篩選返回兩行數據,having條件篩選返回兩行數據,order by條件篩選3大於1,則3在第一行,1在第二行。
外連接
分類
left outer join(左外連接)和right outer join(右連接)。
左外連接
定義
從表(右表)中的數據逐條匹配主表(左表)中的數據,如果匹配,如果右表匹配一行或者多行則將右表匹配值一行或者多行追加到左表匹配行輸出到結果集,如果無匹配,NULL值追加到左表不匹配行輸出到結果集。
語法
select 表1.*,表2.* from 表1 as a [wtih(鎖)] left [outer] join 表2 as b [wtih(鎖)] on a.值 {= | != } b.值 [條件1] [where 條件] [group by 條件] [having 條件] [order by 條件];
語法註釋
{}:大括弧內的值必選一個,例如:選擇=號。
[]:索引符號的值表示是可添加也可不添加的,例如:選擇不添加[條件1]。
[條件1]:[條件1]=[and | or ] [a.值=b.值 | a.值!=b.值 | a.值=值 | a.值!=值 | b.值=值 | b.值!=值],例如:and a.值=b值,或者,or a.值等於b.值。
[where 條件]:where後跟表中數據的篩選條件,例如:where a.值=1。
[group by 條件]:group by後面跟分組條件,可以跟一個或者多個分組條件,例如:group by a.值,b.值。
[having 條件]:having後邊主要是篩選group by條件分組後的結果,後面可以跟一個或者多個條件,例如:select max(a.id),min(b.name) from A as a left outer join B as b on a.id=b.id group by a.id,b.name having a,id>1 and b.name=1。
[order by 條件]:order by後面跟排序條件,可以根據一個值或者多個值排序,例如:根據多個值排序,select a.* from A as a left outer join B as b on a.id=b.id order by a.值 asc,b.值 desc。
示例:A表左外連接B表,B表中數據逐行取出與A表中數據匹配,右表取出第一行數據1與A表逐行匹配,匹配到兩行,將B表數據1追加到A表數據行輸出到結果集,同理剩餘的數據3和1匹配到三行數據,共匹配到五行數據輸出,A中存在數據2與B表無匹配行,則將NULL值追加到A表數據2行輸出,匹配的結果集和不匹配的結果集共七行數據輸出到結果集。(where條件篩選後輸出七行數據,group by條件篩選後會輸出三行數據,having篩選後會輸出三行數據,order by條件篩選後則會按照數據從大到小排列),依次顯示不加篩選條件和添加所有篩選條件的結果。
右外連接
定義
從表(左表)中的數據逐條匹配主表(右表)中的數據,如果匹配,如果左表匹配一行或者多行則將左表匹配值一行或者多行追加到右表匹配行輸出到結果集,如果無匹配,NULL值追加到右表不匹配行輸出到結果集。
語法
select 表1.*,表2.* from 表1 as a [wtih(鎖)] right [outer] join 表2 as b [wtih(鎖)] on a.值 {= | != } b.值 [條件1] [where 條件] [group by 條件] [having 條件] [order by 條件];
語法註釋
{}:大括弧內的值必選一個,例如:選擇=號。
[]:索引符號的值表示是可添加也可不添加的,例如:選擇不添加[條件1]。
[條件1]:[條件1]=[and | or ] [a.值=b.值 | a.值!=b.值 | a.值=值 | a.值!=值 | b.值=值 | b.值!=值],例如:and a.值=b值,或者,or a.值等於b.值。
[where 條件]:where後跟表中數據的篩選條件,例如:where a.值=1。
[group by 條件]:group by後面跟分組條件,可以跟一個或者多個分組條件,例如:group by a.值,b.值。
[having 條件]:having後邊主要是篩選group by條件分組後的結果,後面可以跟一個或者多個條件,例如:select max(a.id),min(b.name) from A as a right outer join B as b on a.id=b.id group by a.id,b.name having a,id>1 and b.name=1。
[order by 條件]:order by後面跟排序條件,可以根據一個值或者多個值排序,例如:根據多個值排序,select a.* from A as a right outer join B as b on a.id=b.id order by a.值 asc,b.值 desc。
示例:A表右外連接B表,A表中數據逐行取出與B表中數據匹配,左表取出第一行數據1與B表逐行匹配,匹配到兩行,將A表數據1追加到B表數據行輸出到結果集,同理剩餘的數據1和3匹配到三行數據,共匹配到五行數據輸出,A中存在數據2與B表無匹配行,自動過濾掉並不添加輸出,B表數據全部匹配完成,不匹配的結果集為零行,匹配的結果集和不匹配的結果集共五行數據輸出到結果集。(where條件篩選後輸出五行數據,group by條件篩選後會輸出兩行數據,having篩選後會輸出兩行數據,order by條件篩選後則會按照數據從大到小排列),依次顯示不加篩選條件和添加所有篩選條件的結果。
全外連接
定義
全外連接又稱為完全外連接,該連接查詢方式返回兩個連接中所有的記錄數據。根據匹配條件,如果滿足匹配條件時,則返回匹配的一行或者多行數據;如果不滿足匹配條件時,同樣返回數據,但在相應的列中填入NULL,全外連接返回的結果集中包含了兩個完全表的所有數據。全外連接關鍵字FULL OUTER JOIN。
語法
select 表1.*,表2.* from 表1 as a [wtih(鎖)] full [outer] join 表2 as b [wtih(鎖)] on a.值 { = | != } b.值 [條件1] [where 條件] [group by 條件] [having 條件] [order by 條件];
語法註釋
{}:大括弧內的值必選一個,例如:選擇=號。
[]:索引符號的值表示是可添加也可不添加的,例如:選擇不添加[條件1]。
[條件1]:[條件1]=[and | or ] [a.值=b.值 | a.值!=b.值 | a.值=值 | a.值!=值 | b.值=值 | b.值!=值],例如:and a.值=b值,或者or a.值等於b.值。
[where 條件]:where後跟表中數據的篩選條件,例如:where a.值=1。
[group by 條件]:group by後面跟分組條件,可以跟一個或者多個分組條件,例如:group by a.值,b.值。
[having 條件]:having後邊主要是篩選group by條件分組後的結果,後面可以跟一個或者多個條件,例如:select max(a.id),min(b.name) from A as a full outer join B as b on a.id=b.id group by a.id,b.name having a,id>1 and b.name=1。
[order by 條件]:order by後面跟排序條件,可以根據一個值或者多個值排序,例如:根據多個值排序,select a.* from A as a full outer join B as b on a.id=b.id order by a.值 asc,b.值 desc。
示例:全外連接A表與B表,首先輸出所有符合條件的數據,A表中數據逐行取出和B表中數據逐行匹配,存在1和3的數據匹配行,匹配成功輸出5行數據,然後輸出不符合條件的行,A中存在2行不符合條件的值,B表數據全部匹配成功無不符合條件的值,返回A中不符合條件的值並將其它列值置為NULL輸出2行數據,總共輸出5加2共七行數據。