当前位置: 首页>前端>正文

学SQL啦

3 SQL

3.1 SQL查询语言

新手学习网址:https://sqlzoo.net/wiki/SQL_Tutorial

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

主知识点一:select&from

1加分号——运行两行代码,为什么报错?(好像是这个编译器不支持)

select name,population from world;

select yr from nobel;

2 重命名——as别名中as可以省略,换成空格

select name as 国家,continent as大洲,population as人口 from world;

=等价于=

select name 国家,continent 大洲,population 人口 from world;

3去重——在需要去重的属性名(这里是continent)前面加distinct,但必须在select后面

select distinct continent from world;

4计算字段——加减乘除,还可以嵌套

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

学SQL啦,第1张

主知识点二:where

1查询特定人口数量,between不要写错

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

from world

where population between 200000000 and 300000000

2 查询德国人口,'Germany'字符串要打单引号

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

from world

where name='Germany'

3 多个内容查询,= 换成 in,还要加括号

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

from world

where name in ('Germany','Norway')

4模糊查询——like

●   select 字段名

●   from 表名

●   where 字段名 like '通配符+字符'

学SQL啦,第2张

学SQL啦,第3张

通配符%和_可以结合使用

学SQL啦,第4张

5多条件查询——and和or链接

select name,area

from world

where name like '__t%'

and area >=60000

运行结果:

学SQL啦,第5张

●   【例题15】查询国家名中含有三个a且面积大于60万(600000)的国家及其面积,或者人口大于13亿(1300000000)且面积大于500万(5000000)的国家及其面积

学SQL啦,第6张

注意:and的优先级高于or,所以是先算and,最后再考虑or,也可以加括号区分逻辑

主知识点三:排序order by

1看到通配符就要用like

order by 属性名 desc(降序), 属性名 asc(升序)

●   【例题17】查询姓名以Sir开头的

获奖者(winner),获奖年份(yr)和科目(subject),

查询结果按照年份从近到远排序,

再按照姓名顺序升序排序。(题目要拆分明白!!!!)

代码:

select * from nobel

where winner like 'Sir%'

order by yr desc,winner asc

结果:

学SQL啦,第7张

2 排序特殊值

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

分析:order by后面加入判断subject in ('physics','chemistry'),如果subject在括号中记为1否则为0,以此将特殊值排在后面。

代码:

select * from nobel

where yr=1984

order by subject in ('physics','chemistry'),subject,winner

结果:

学SQL啦,第8张

主知识点四:限制limit

●   【例题18】查询面积排名前三的国家

分析:先排序,再取前三limit 3(不知道具体数值不能用where)

结果:

学SQL啦,第9张

●   【例题19】查询人口数第1到第3的国家和人口(结果同上)

分析:

limit x,n意味从x+1行开始返回n行

如,第4到第7,共4行,就是在排序后使用limit 3,4

结果:

学SQL啦,第10张

主知识点五:分组聚合 group by

1聚合函数如下:注意——函数忽略空值

学SQL啦,第11张

●   【例题20】查询非洲总人口数

学SQL啦,第12张

将sum函数依次修改为avg()、max()、min(),依次计算平均人口数、最大人口数、最小人口数。

2计算表格行数count

学SQL啦,第13张

3聚合函数和group by联用

●   【例题24】查询每个大洲(continent)和大洲内的国家(name)数量

分析:

根据分组依据进行聚合运算,以“大洲”为聚合依据,对每个大洲内的“国家”数量进行聚合运算。

代码:

select continent,count(name)

from world

group by continent

结果:

学SQL啦,第14张

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

代码:

select yr,subject,count(winner)

from nobel

where yr between 2013 and 2015              //查询2013至2015年

group by subject,yr                                 //每年每个科目

order by yr desc,count(winner) desc       //按年份从大到小,人数从大到小

结果:

学SQL啦,第15张

●   【题目】查询每个大洲和该大洲里人口数超过1千万的国家的数量

分析:

(1)查询每个大洲和特殊国家的数量

(2)特殊国家:该大洲里人口数超过1千万的国家

(3)按照大洲分组就显示出的是每个大洲了

先后顺序不能变!!!

学SQL啦,第16张

主知识点六:having

聚合区的筛选用where,聚合分组后的筛选用having

Having和where的区别是:运行顺序和对象不用

。。。未完待续,导师喊我干活了。。。


https://www.xamrdz.com/web/2uw1948229.html

相关文章: