分組查詢
一、語法
select 分組函數,分組後的字段
from 表
【where 篩選條件】
group by 分組的字段
【having 分組後的篩選】
【order by 排序列表】
二、特點
使用關鍵字 篩選的表 位置
分組前篩選 where 原始表 group by的前面
分組後篩選 having 分組後的結果 group by 的後面
連接查詢
一、含義
當查詢中涉及到了多個表的字段,需要使用多表連接
select 字段1,字段2
from 表1,表2,...;
笛卡爾乘積:當查詢多個表時,沒有添加有效的連接條件,導致多個表所有行實現完全連接
如何解決:添加有效的連接條件
二、分類
按年代分類:
sql92:
等值
非等值
自連接
也支持一部分外連接(用於oracle、sqlserver,mysql不支持)
sql99【推薦使用】
內連接
等值
非等值
自連接
外連接
左外
右外
全外(mysql不支持)
交叉連接
三、SQL92語法
1、等值連接
語法:
select 查詢列表
from 表1 別名,表2 別名
where 表1.key=表2.key
【and 篩選條件】
【group by 分組字段】
【having 分組後的篩選】
【order by 排序字段】
特點:
① 一般爲表起別名
②多表的順序可以調換
③n表連接至少需要n-1個連接條件
④等值連接的結果是多表的交集部分
2、非等值連接
語法:
select 查詢列表
from 表1 別名,表2 別名
where 非等值的連接條件
【and 篩選條件】
【group by 分組字段】
【having 分組後的篩選】
【order by 排序字段】
3、自連接
語法:
select 查詢列表
from 表 別名1,表 別名2
where 等值的連接條件
【and 篩選條件】
【group by 分組字段】
【having 分組後的篩選】
【order by 排序字段】
四、SQL99語法
1、內連接
語法:
select 查詢列表
from 表1 別名
【inner】 join 表2 別名 on 連接條件
where 篩選條件
group by 分組列表
having 分組後的篩選
order by 排序列表
limit 子句;
特點:
①表的順序可以調換
②內連接的結果=多表的交集
③n表連接至少需要n-1個連接條件
分類:
等值連接
非等值連接
自連接
2、外連接
語法:
select 查詢列表
from 表1 別名
left|right|full【outer】 join 表2 別名 on 連接條件
where 篩選條件
group by 分組列表
having 分組後的篩選
order by 排序列表
limit 子句;
特點:
①查詢的結果=主表中所有的行,如果從表和它匹配的將顯示匹配行,如果從表沒有匹配的則顯示null
②left join 左邊的就是主表,right join 右邊的就是主表
full join 兩邊都是主表
③一般用於查詢除了交集部分的剩餘的不匹配的行
3、交叉連接
語法:
select 查詢列表
from 表1 別名
cross join 表2 別名;
特點:
類似於笛卡爾乘積