文章目录
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表,所有代码均已通过测试。
(2)文章总结归纳于自戴师兄的课程:https://www.bilibili.com/video/BV1ZM4y1u7uF?p=4
在此课程学习的基础上进行了一些修改和验证。