一、知识点
视图
子查询
函数
二、练习
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);
网友评论