从零学会SQL:复杂查询

2021-07-21  本文已影响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);
上一篇下一篇

猜你喜欢

热点阅读