一、交叉連接
標準語法:select? *??from? 表1??cross??join? 表2??where? 表1.公共列? =? 表2.公共列;
簡單語法:select??*??from? 表1 ,? 表2??where??表1.公共列? =? 表2.公共列;
公共列:兩張表具有相同含義的列,不是列名一樣。
二、內連接
語法:select??*??from??表1??inner??join? 表2??on??表1.公共列? =? 表2.公共列;
on子句:用來設置內連接的連接條件,進行數據的過濾的。
說明:inner關鍵字可以省略。
注意:
①內連接和交叉連接查詢的結果是等價的;
②對于內連接和交叉連接推薦使用內連接,因為內連接的查詢效率高(即查詢速度快)。
三、外連接
外鏈接分為左外連接(簡稱左連接)和右外連接(簡稱右連接)。
1、左外連接(左連接)
語法:select??*??from? 表1??left??join? 表2??on? 表1.公共列? =? 表2.公共列;
左連接的查詢結果:以左表為主表,查詢到兩張表交集的部分,并且會把左表獨有的數據也查詢出來。
- 左表:指的是寫在left?join左邊的表就是左表;
- 右表:指的是寫在left?join右邊的表就是右表。
2、右外連接(右連接)
語法:select??*??from??表1??right? join? 表2??on? 表1.公共列? =? 表2.公共列;
右連接的查詢結果:以右表為主表,查詢到兩張表交集的部分,并且會把右表獨有的數據也查詢出來。
- 左表:指的是寫在right? join左邊的表就是左表;
- 右表:指的是寫在right? join右邊的表就是右表。
3、左連接和右連接有什么區別?
①查詢結果不同
- 左連接查詢的是兩張表交集的數據以及左表獨有的數據。
- 右連接查詢的是兩張表交集的數據以及右表獨有的數據。
②語法不同
③如果把兩個語法中的表的位置互換一下,兩者查詢的結果就是一樣的。
四、嵌套查詢(子查詢)
1、子查詢一個值
語法:select??*??from? 表名??where??列名? 比較運算符? (select? 列名??from? 表名??where? 條件);
注意事項:子查詢語句中select后面一定不能跟 * ,只能跟列名。
2、子查詢多個值
語法:select??*??from? 表名??where? 列名??in? (select? 列名??from? 表名??where? 條件);
五、分組查詢
分組要使用group by來實現,需要在group by后面加上分組字段。
MySQL中常用的聚合函數:
- max() 求最大值
- min() 求最小值
- avg() 求平均值
- sum() 求和
- count(*) 用來統計數量,即有多少個。會統計空值(null值)。
- count(列名) 用來統計數量,即有多少個。不會統計空值(null值)。
在分組之后不能使用where進行數據過濾,需要使用having。
六、having
where和having有什么區別?
1、having需要用在分組之后(即需要寫在group by的后面),where要用在分組之前的數據過濾(即需要寫在group by的前面)。
2、where查詢條件中不能使用聚合函數,having查詢條件中可以使用聚合函數。
3、where查詢條件中不可以使用字段別名,而having查詢條件中可以使用字段別名。
七、臨時表
這張表不是實際存在的,把通過某條SQL語句查詢的結果看作是一張表,這張表就稱之為臨時表。