Mysql基础语法的一些疑难:

  • SQL查询语句语法结构和运行顺序
    • 语法结构:select--from--where--group by--having--order by--limit
    • 运行顺序:from--where--group by--having--select-order by--limit

1.distinct去重:

select distinct name,continent from world

ps:这里的去重是相同两行如果数据完全相同则会去重

2.select中还可以直接进行计算:

select name,gdp,population,gdp/population 人均gdp from world

3.in的用法:

select name,population from world  where name in ('Germany','Sweden')

 4.通配符%和占位符_的用法:

查询以C开头ia结尾的国家姓名

select name from world where name like 'C%ia'

查询国家名中第二个字符为't'的国家

 select name from world where name like ' _t%'

 ps:这边的_只占一位

查询国家名中含有两个o且被两个字符隔开的国家名

select name from world where name like '%o__o%'

5.order by

查询1984年所有获奖者的姓名和奖项科目。结果将诺贝尔化学奖和物理学奖排在最后,然后按照科目排序,再按照获奖者姓名排序

select
winner
,subject
from nobel
where yr = 1984
order by subject in ('chemistry','physics') , subject, winner

 ps:红色标注部分括号里的内容看作1(按照字典里的字母排序),其他看作0,先执行完0以后在执行1。

6.limit

查询人口数第4到第7的国家和人口

select name from world order by area desc limit 3,4

 ps:3是从第三行开始得加一行,从第行开始,4则为返回几行

7.group by1.1

查询每个大洲(continent)和大洲内的国家(name)数量

select  continent,count(name) as 国家数 from  world group by continent

 ps:注意执行顺序(最上面写了),先执行from  world(写出总表) group by continent分组

 然后再执行select语句。

group by1.2

查询2013至2015年每年每个科目的获奖人数,结果按年份从大到小,人数从大到小排序

select
yr
,subject
,count(winner) 获奖人数
from nobel
where yr in( 2013 ,2014, 2015)

group by yr,subject
order by yr desc,count(winner) desc

8.having 

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

selectcontinent,avg(gdp) 平均gdp from world where (gdp > 20000000000 and population > 60000000) or (gdp <8000000000and capital like '%a%a%a%') group by continent
having sum(population) >= 300000000 order by count(name) desclimit 1


ps:这道题目较长,我们需要知道where和having的区别,where是聚合前对表格进行筛选,而having实在group by之后才开始执行,所以说having是聚合后进行筛选。having之后的语句也是必须带有聚合公式的,而where则不会带有聚合公式,最后一点是select之后我们只能写入我们分的组+聚合函数。因为我们group by相当于是创建了一张新表,select是最后执行,进行进一步的筛选。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值