mysql中的重難點
分組函數
功能:用作統計使用,又稱為聚合函數或統計函數或組函數
分類:sum 求和、avg平均值、max、min、count計算個數
特點
1、sum,avg用于處理數值型,max,min,count可以處于任何類型
2、以上分組函數都忽略null值
3、可以和distinct搭配實現去重
4、count函數的單獨介紹
5、和分組函數一同查詢的字段要求是group by后的字段
6、count計算非空的值
分組查詢
語法:
select 聚合函數(max,min這些),列(要求出現在group by后面)
from 表
【where 篩選條件】
group by 分組的列表
【order by】子句
注意: 聚合與分組必須成對出現
特點:
1、分組查詢中的篩選條件分為兩類(篩選的數據源不同
數據源 位置 關鍵字
分組前篩選: 原始表 group by子句前面 where
分組后篩選: 分組后的結果集 group by子句后面 having
①分組函數做條件,肯定是放在having子句中
②能用分組前篩選的,優先考慮用分組前篩選
2、group by子句支持單個字段分組,多個字段分組,
(多個字段之間用逗號隔開無順序要求),表達式或函數(用的較少)
3、可添加排序(放在group by后)
連接查詢
含義:又稱多表查詢,當查詢的字段來自多個表,就會用到連接查詢
笛卡爾乘積現象:表1有m行,表2有n行,結果=m*n行
發生原因:沒有有效的連接條件
如何避免:添加有效的連接條件
sql99標準【推薦】:支持內連接+外連接(左外,右外)+交叉連接
按功能分類:
內連接:等值連接,非等值連接,自連接
外連接:左外連接,右外連接,全外連接
交叉連接
語法:
select 查詢列表
from 表1 別名 【連接類型】
join 表2 別名 on 【連接條件】
on 連接條件
【where 篩選條件】
【group by 分組】
【having 篩選條件】
【order by 排序列表】
分類:
內連接:inner
外連接:左外 left 【outer】、右外 right 【outer】、全外 full 【outer】
交叉連接:cross
內連接
語法:
select 查詢列表
from 表1 別名
inner join 表2 別名
on 連接條件;
分類:等值、非等值、自連接
特點:
①添加排序、分組、篩選
②inner可以省略
③篩選條件放在where后面,連接條件放在on后面,提高分離性,便于閱讀
④inner join連接和sql92語法中的等值連接效果一樣,都是查詢多表的交集
外連接
應用場景:用于查找一個表中有,另一個表中沒有的記錄
特點:
1、外連接的查詢結果為主表中所有的記錄
如果從表中有和它匹配的,則顯示匹配的值
如果從表中沒有和它匹配的,則顯示null
外連接查詢結果=內連接結果+主表中有而從表中沒有的記錄
2、左外連接:left jon左邊的是主表
右外連接:right join右邊的是主表
3、左外和右外交換兩個表的順序,可以實現同樣的效果
4、全外連接=內連接結果+表1有但表2沒有+表2有但表1沒有
浙公網安備 33010602011771號