詳細聊聊關於Mysql聯合查詢的那些事兒
聯合查詢之union
union可以合並兩個以上 select語句查詢出來的表,並消除表中的重復行。
其中,select語句需要擁有相同數量和相同數據類型的列。
1. 查詢中國各省的ID以及省份名稱
select ProID,ProName from T_Province
2. 湖南省所有地級市ID、名字
select CityID,CityName from T_City where ProID = ( select ProID from T_Province where ProName="湖南省" );
3. 用union將他們合並
select ProID,ProName from T_Province union select CityID,CityName from T_City where ProID = ( select ProID from T_Province where ProName="湖南省" );
這樣就得到兩個查詢結果的並集瞭。
UNION 合並後的集合中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。
聯合查詢之union all
select ProID,ProName from T_Province union all select CityID,CityName from T_City where ProID = ( select ProID from T_Province where ProName="湖南省" );
當使用union all,不會消除重復行。
聯合查詢之inner join
1. 查詢湖北省有多少地級市
不用聯合查詢:
select count(CityID) from T_City where ProID = (select ProID from T_Province where ProName="湖北省")
通過ProID將兩張表連接在一起
select ProName,CityName from( T_City join T_Province on T_City.ProID = T_Province.ProID ) where ProName="湖北省"
2. 統計各省地級市的數量,輸出省名、地級市數量
select T_City.ProID,ProName,count(CityID) as cc from( T_City join T_Province on T_City.ProID = T_Province.ProID ) group by T_City.ProID order by cc desc;
什麼的select語句中要輸出的ProID應該是T_City和T_Province中的一個,不然就會報錯。
兩個表之間需要有共同的(列名不一定相同)“語言”才能join。
可以給表起個別名,將T_City表的別名設為tc,將T_Province的別名設為tp。
select tc.ProID,ProName,count(CityID) as cc from( T_City tc join T_Province tp on T_City.ProID = T_Province.ProID ) group by tc.ProID order by cc desc;
3. 查詢擁有20個以上區縣的城市,輸出城市名,區縣數量
select CityName,count(DisName) disCount from ( T_City tc join T_District td on tc.CityID = td.CityID ) group by CityName having disCount > 20;
聯合查詢之三表聯合
1. 區縣最多的3個城市是哪個省的哪個市,查詢結果包括省名,市名,區縣數量
select tp.ProName,tcd.CityName,tcd.ci from ( select ProID,CityName,count(ID) ci from(T_City tc join T_District td on tc.CityID = td.CityID) group by tc.CityID order by ci desc limit 3 )tcd join T_Province tp on tcd.ProID = tp.ProID;
聯合查詢之left join&right join
內連接是基於左右兩表公共的部分
左連接是基於左右兩表公共的部分加上左表特有的部分
右連接是基於左右兩表公共的部分加上右表特有的部分
查詢所有省份和它的城市信息
select * from( T_Province tp join T_City tc on tp.ProID = tc.ProID );
查詢所有省份和它的城市信息和沒有城市的省份信息
select * from( T_Province tp left join T_City tc on tp.ProID = tc.ProID );
查詢所有省份和它的城市信息和沒有省份的城市信息
select * from( T_Province tp right join T_City tc on tp.ProID = tc.ProID );
總結
到此這篇關於Mysql聯合查詢的文章就介紹到這瞭,更多相關Mysql聯合查詢內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- MySQL索引知識的一些小妙招總結
- MySQL新手入門進階語句匯總
- MySql分頁時使用limit+order by會出現數據重復問題解決
- Mysql排序的特性詳情
- 詳解Mysql兩表 join 查詢方式