MySql複習二.3 DQL語言 分組查詢 ,連接查詢

分組查詢

一、語法

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 別名;

 

特點:

類似於笛卡爾乘積

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章