关于mysql:Mysql之联合查询那些事儿

54次阅读

共计 2063 个字符,预计需要花费 6 分钟才能阅读完成。

联结查问之 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=” 湖北省 ”
复制代码

  1. 统计各省地级市的数量,输入省名、地级市数量
    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;
复制代码

  1. 查问领有 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;
    复制代码
    联结查问之三表联结
  2. 区县最多的 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
);
复制代码
如果你感觉这篇文章对你有点用的话,麻烦请给咱们的开源我的项目点点 star: http://github.crmeb.net/u/defu 不胜感激!

正文完
 0