詳細(xì)聊聊關(guān)于Mysql聯(lián)合查詢的那些事兒
聯(lián)合查詢之union
union可以合并兩個(gè)以上 select語句查詢出來的表,并消除表中的重復(fù)行。
其中,select語句需要擁有相同數(shù)量和相同數(shù)據(jù)類型的列。
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="湖南省" );
這樣就得到兩個(gè)查詢結(jié)果的并集了。
UNION 合并后的集合中的列名總是等于 UNION 中第一個(gè) SELECT 語句中的列名。
聯(lián)合查詢之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="湖南省" );
當(dāng)使用union all,不會消除重復(fù)行。
聯(lián)合查詢之inner join
1. 查詢湖北省有多少地級市
不用聯(lián)合查詢:
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. 統(tǒng)計(jì)各省地級市的數(shù)量,輸出省名、地級市數(shù)量
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應(yīng)該是T_City和T_Province中的一個(gè),不然就會報(bào)錯(cuò)。
兩個(gè)表之間需要有共同的(列名不一定相同)“語言”才能join。
可以給表起個(gè)別名,將T_City表的別名設(shè)為tc,將T_Province的別名設(shè)為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個(gè)以上區(qū)縣的城市,輸出城市名,區(qū)縣數(shù)量
select CityName,count(DisName) disCount from ( T_City tc join T_District td on tc.CityID = td.CityID ) group by CityName having disCount > 20;
聯(lián)合查詢之三表聯(lián)合
1. 區(qū)縣最多的3個(gè)城市是哪個(gè)省的哪個(gè)市,查詢結(jié)果包括省名,市名,區(qū)縣數(shù)量
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;
聯(lián)合查詢之left join&right join
內(nèi)連接是基于左右兩表公共的部分
左連接是基于左右兩表公共的部分加上左表特有的部分
右連接是基于左右兩表公共的部分加上右表特有的部分
查詢所有省份和它的城市信息
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 );
總結(jié)
到此這篇關(guān)于Mysql聯(lián)合查詢的文章就介紹到這了,更多相關(guān)Mysql聯(lián)合查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
本地windows安裝兩個(gè)mysql服務(wù)器,配置主從同步
大型網(wǎng)站為了緩解大量的并發(fā)訪問,除了在網(wǎng)站實(shí)現(xiàn)分布式負(fù)載均衡,還會搭建服務(wù)器mysql集群技術(shù),來分擔(dān)主數(shù)據(jù)庫的壓力。在本地電腦能實(shí)現(xiàn)這樣的技術(shù)嗎,本地windows安裝兩個(gè)mysql服務(wù)器,配置主從同步也是可以實(shí)現(xiàn)的,快來跟著教程測試一下吧。2022-12-12SQL Server數(shù)據(jù)庫錯(cuò)誤5123解決方案
這篇文章主要介紹了SQL Server數(shù)據(jù)庫錯(cuò)誤5123解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn)
這篇文章主要介紹了MySQL8.0.24版本Release Note的一些改進(jìn)點(diǎn),幫助大家更好的對新版本的MySQL進(jìn)行測試使用,感興趣的朋友可以了解下2021-04-04MySQL中定時(shí)器的底層實(shí)現(xiàn)原理及使用方法
定時(shí)器可以用于定期執(zhí)行特定的SQL語句、備份數(shù)據(jù)、生成報(bào)表等操作,本文將詳細(xì)介紹MySQL中定時(shí)器的底層實(shí)現(xiàn)機(jī)制以及如何使用它2023-07-07MySQL 多表關(guān)聯(lián)一對多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)的方法示例
這篇文章主要介紹了MySQL 多表關(guān)聯(lián)一對多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了MySQL 多表關(guān)聯(lián)一對多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05MySQL之select、distinct、limit的使用
這篇文章主要介紹了MySQL之select、distinct、limit的使用,下面文章圍繞select、distinct、limit的相關(guān)資料展開聚集內(nèi)容,需要的朋友可以參考一下2021-11-11