联结查问之 union
union 能够合并两个以上 select 语句查问进去的表,并打消表中的反复行。
其中,select 语句须要领有雷同数量和雷同数据类型的列。
- 查问中国各省的 ID 以及省份名称
select ProID,ProName from T_Province
复制代码 - 湖南省所有地级市 ID、名字
select CityID,CityName from T_City
where ProID = (
select ProID from T_Province where ProName=” 湖南省 ”
);
复制代码 - 用 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
- 查问湖北省有多少地级市
不必联结查问:
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=” 湖北省 ”
复制代码
- 统计各省地级市的数量,输入省名、地级市数量
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;
复制代码
- 查问领有 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;
复制代码
联结查问之三表联结 - 区县最多的 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 不胜感激!