SQL数据分析之基础语法的注意事项与妙用【MySQL补充】

1、语法与运行顺序

(1)语法顺序:select–from–where–group by–having–order by–limit

(2)运行顺序:from–where–group by–having–order by–limit–select

2、计算字段在select里进行

通过GDP和人口来计算人均GDP

select name,gdp,gdp/population 人均GDP  from world
order by 人均GDP desc

3、列表的使用

查询’China’,‘Japan’,'Italy’三个国家中的人口

select name,population from world
where name in ('China','Japan','Italy')

等于三个or:

select name,population from world
where name='China' or name='Japan' or name='Italy'

4、between…and…范围在什么之间

查询国土面积在30万到34万之间的国家名字

select name,area from world
where area between 300000 and 340000

5、模糊查询(注意:单引号)

%任意个字符,_一个占位符

(1)以A开头ia结尾的国家(Australia):

select name,popution from world 
where name like 'A%ia' 

(2)第二个字母为u且倒数第三个字符为l 的国家和人口(Australia)

select name,population from world
where name like '_u%l__'

(3)包含3个o且国土面积小于30万的国家及面积

select name,area from world
where name like '%o%o%o%' and area<300000

6、多条件模糊查询

查询国家名字中既包含5个元音字母(a,e,i,o,u),又不包含空格的国家和人口

select name,population from world 
where name like '%a%'
and name like '%e%'
and name like '%i%'
and name like '%o%'
and name like '%u%'
and name not like '% %'

7、指定前排的排序

查询国土面积大于100万的所有国家和人口,结果将非洲(Africa)、北美洲(North America)排在最后,然后按照人口降序,再按照国家面积降序
1)国土面积小于30万的大洲、国家和人口:
select continent,name,population from world
where area>2000000
where =‘Africa’

2)排序条件:第一条件是’Africa’,'North America’放最后(因为它们在这里满足条件故值为1,默认排在0之后),再人口降序条件下,面积降序
order by continent in (‘Africa’,‘North America’), population desc,area desc

3)最终结果:

select continent,name,population,area from world
where area>2000000
order by continent in ('Africa','North America'), population desc,area desc

8、limit的第二个参数(表示个数,一参表示起始位置)

查询国土面积大小为第10大到第20大的国家、面积和人口

select name,area,population from world
order by area desc
limit 9,10

表示从9开始数10个,这里用索引进行查询,默认第一位索引值为0,因此第10大索引值为9

9、count的用法

(1)count(*)表示行数(包括空值):

select count(*) from wrold

(2)count(字段)表示该字段的个数(会忽略空值):

select count(name),count(continent),count(gdp) from world
count(distinct 字段)非重复计数:八大州
select count(name),count(distinct continent),count(gdp)  from world

(3)注意:
sum,avg,max,min也会默认忽略空值,因此可以看出聚合函数是忽略空值进行计算的

10、group+聚合

计算每个大洲有多少个国家

select continent,count(name) from world
group by continent

11、group+having

(1)group by子句中有多个字段时,依据写的字段依次对数据分区,因此group by字段1,字段2与group by字段2,字段1 是不一样的;使用group by子句时,select 只能使用聚合函数和group by应用过的字段,否则会报错

(2)询每个大洲人口数大于2000万的国家数量:

select continent, count(name) 'number of countries'
from world 
where population>=20000000
group by continent

(3)haing+聚合函数的用法:筛选出大洲总人口数量至少为5亿的国家数量

#先筛选出总人口数量至少为5亿的大洲,再在select中用聚合函数求出这些大洲的国家数量
select continent,count(name)
from world
group by continent
having sum(population)>=500000000

(4)查询总人口数至少为3亿的大洲及其平均GDP,其中只有GDP高于200亿且人口数大于6000万或者GDP低于80亿且首都中包含有3个a的国家计入计算,最后按国家数从大到小排序,只显示前2行

select continent,avg(gdp)
from world
where (gdp>=20000000000 and population>=60000000) or (gdp<=8000000000 and capital like '%a%a%a%')
group by continent
having sum(population)>=300000000
order by count(name) desc
limit 2

(5)查询人均gdp大于3000的大洲、人口数及其人均GDP,仅GDP在200亿和500亿的国家计入

select continent,sum(population),sum(gdp)/sum(population) 人均gdp
from world
where gdp>=20000000000 and gdp<=50000000000
group by continent
having sum(gdp)/sum(population)>3000

(6)where和having的区别:where是聚合前的条件,having是聚合后的条件

写在最后

(1)本文所有代码均是在SQL ZOO平台进行,数据也该平台下的world表,所有代码均已通过测试。
sql zoo

(2)文章总结归纳于自戴师兄的课程:https://www.bilibili.com/video/BV1ZM4y1u7uF?p=4
在此课程学习的基础上进行了一些修改和验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蒙Next

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值