学SQL啦

05-09 1144阅读

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啦

    主知识点二: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啦

    学SQL啦

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

    学SQL啦

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

    select name,area
    from world
    where name like '__t%'
    and area >=60000

    运行结果:

    学SQL啦

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

    学SQL啦

    注意: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啦

    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啦

    主知识点四:限制limit

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

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

    结果:

    学SQL啦

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

    分析:

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

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

    结果:

    学SQL啦

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

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

    学SQL啦

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

    学SQL啦

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

    2计算表格行数count

    学SQL啦

    3聚合函数和group by联用

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

    分析:

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

    代码:

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

    结果:

    学SQL啦

    ●   【例题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啦

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

    分析:

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

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

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

    先后顺序不能变!!!

    学SQL啦

    主知识点六:having

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

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

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

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]