美文网首页
从零学会SQL:复杂查询

从零学会SQL:复杂查询

作者: 羋学僧 | 来源:发表于2021-07-21 20:33 被阅读0次

    一、知识点

    视图

    子查询

    函数

    二、练习

    1.创建视图

    create view 按性别汇总(性别,人数)
    as
    select 性别,count(*)
    from student
    group by 性别;
    

    2.哪些学生的成绩比课程0002的全部成绩里的任意一个高呢

    select 学号,成绩
    from score
    where 成绩 > any(
    select 成绩
    from score 
    where 课程号='0002');
    

    3.哪些学生的成绩比课程0002的全部成绩都高呢

    select 学号,成绩
    from score
    where 成绩 > all(
    select 成绩
    from score 
    where 课程号='0002');
    

    4.大于平均成绩的学生的学号和成绩

    select 学号,成绩
    from score
    where 成绩 > (
    select avg(成绩)
    from score);
    

    5.找出每门课程中成绩最低的学号

    select 课程号,学号,成绩
    from score as a
    where 成绩 =(
    select min(成绩)
    from score as b
    where b.课程号 = a.课程号);
    

    6.查找出每门课程中大于对应课程平均成绩的学生

    select 学号,课程号,成绩
    from score as a
    where 成绩 > (
    select avg(成绩)
    from score as b
    where a.课程号 = b.课程号
    group by 课程号);
    

    sqlzoo练习

    练习地址

    1.列出符合条件的国家名称,条件:国家人口大于俄罗斯(Russia)的人口

    select name 
    from world 
    where population > 
    (select population 
    from world 
    where name = 'Russia');
    

    2.列出欧洲每个国家的人均GDP,其中人均GDP要高于英国(United Kingdom)

    select name from world
    where continent = 'Europe' and gdp/population >
    (select gdp/population 
    from world
    where name='United Kingdom');
    

    3.在阿根廷(Argentina)和澳大利亞(Australia)所在的洲份中的国家有哪些?查找出国家名称和洲名称,并按国家名称排序

    select name, continent from world
    where continent in
    (select continent 
    from world
    where name='Argentina' or name='Australia')
    order by name;
    

    4.查找符合下面条件的国家名称和人口:国家的人口比加拿大(Canada)的多,但比波兰(Poland)的少

    select name, population 
    from world
    where population between
    (select population 
    from world
    where name='Canada')+1 and
    (select population 
    from world
    where name='Poland')-1;
    

    5.德国(Germany)在欧洲(Europe)國家的人口最多。奧地利(Austria)拥有德国总人口的11%。查找欧洲的国家名称和每个国家的人口,其中人口以德国人口的百分比来显示人口数

    select name,concat(
    round(population/(select population from world where name = 'Germany')*100,0),'%')
    from world
    where continent ='Europe';
    

    6.哪些国家的GDP比欧洲(Europe)的全部国家都要高呢? (有些国家的记录中,GDP是空值NULL,没有填入资料)

    select name 
    from world
    where gdp > all
    (select gdp from world
    where continent = 'Europe' and gdp > 0);
    

    7.在每一个州中找出最大面积的国家,查找出洲, 国家名字,面积。 (有些国家的记录中,面积是空值NULL,没有填入资料)

    select continent,name,area 
    from world as x
    where area =
    (select max(area)
    from world as y
    where y.continent=x.continent);
    

    8.列出洲份名称和国家名称,其中每个洲只取出一个国家(条件:该国家排序在这个洲的首位)

    select continent, name 
    from world as x
    where name <= all
    (select name 
    from world as y
    where y.continent=x.continent);
    

    9.找出符合条件的洲和国家名称,条件:该洲中的全部国家人口都有少于或等于 25000000 人口)

    select name, continent, population 
    from world as x
    where 25000000 >= all
    (select population 
    from world as y
    where y.continent=x.continent);
    

    10.有些国家的人口是同洲份的所有其他国的3倍或以上。列出这些国家的名称和洲

    select name, continent 
    from world as x
    where population > all
    (select 3*population 
    from world as y
    where y.continent=x.continent and x.name <> y.name);
    

    相关文章

      网友评论

          本文标题:从零学会SQL:复杂查询

          本文链接:https://www.haomeiwen.com/subject/mbdjmltx.html