SQL语句练习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL语句练习题
一、单表查询练习
1、查询<学生信息表>,查询学生"张三"的全部基本信息
Select * from student where stname=’张三’;
2、查询<学生信息表>,查询学生"张三"和”李四”的基本信息
select * from student where stname in ('张三','李四')
3、查询<学生信息表>,查询姓"张"学生的基本信息
select * from student where stname like '张%';
4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息
select * from student where stname like '%四%';
5、查询<学生信息表>,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。
select * from student where stname like '李_强';
6、查询<学生信息表>,查询姓"张"或者姓”李”的学生的基本信息。
select * from student where stname like '张%' or stname like '李%';
7、查询<学生信息表>,查询姓"张"并且"所属省份"是"北京"的学生信息
select * from student where stname like '张%' and family ='北京';
8、查询<学生信息表>,查询"所属省份"是"北京"、”新疆”、”山东”或者"上海"的学生的信息select * from student where family in ('北京','新疆','山东','上海');
9、查询<学生信息表>,查询姓"张",但是"所属省份"不是"北京"的学生信息
select * from student where family!='北京' and stname like '张_';
10、查询<学生信息表>,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序
select * from student order by sex,family,class;
(多个排序条件,用逗号以此分开,先排第一个、再排第二个。。。。)
11、查询<学生信息表>,查询现有学生都来自于哪些不同的省份
select distinct (family) from student;
(注意distinct使用方法)
12、查询<学生选修信息表>,查询没有填写成绩的学生的学号、课程号和成绩
select couid,couid,coursegrade from grade where coursegrade is null;
13、查询<学生选修信息表>,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序
select * from grade where coursegrade is not null order by coursegrade desc;
二、聚合函数练习
1、统计<学生信息表>,统计共有多少个学生
select count(stname) from student;
2、统计<学生信息表>,统计年龄大于20岁的学生有多少个
select count(stname) from student where (year(getdate())-year(birthday))>20;
3、统计<学生信息表>,统计入学时间在1998年至2000年的学生人数
select count(stuid) from student where year(enrollment) between 1998 and 2000;
4、统计<学生选修信息表>,统计学号为"S001"的学生的平均成绩
select avg(coursegrade) from grade where stuid='1';
5、统计<学生选修信息表>,统计学号为"S001"的学生的总成绩
select sum(coursegrade) from grade where stuid='1';
6、统计<学生选修信息表>,查询课程号为”C001”的课程的最高成绩
select max(coursegrade) from grade where couid='1';
7、统计<学生信息表>,查询所有学生中的最大年龄是多少
select max((year(getdate())-year(birthday))) from student;
三、分组查询练习
1、统计<学生选修信息表>,统计每个课程的选修人数
select count(*) from grade group by couid;
2、统计<学生选修信息表>,统计每个同学的总成绩
select sum(coursegrade) from grade group by stuid;
3、统计<学生信息表>,统计每个班级中每种性别的学生人数,并按照班级排序
select class,sex,count(stuid) from student group by sex,class order by class;
4、统计<学生选修信息表>,统计每门课程的平均成绩,并按照成绩降序排序
select avg(coursegrade) from grade group by couid order by avg(coursegrade) desc;
5、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号
select stuid from grade where coursegrade<60 group by stuid having count(stuid)>2;
6、统计<学生信息表>,统计每个班级中的最大年龄是多少
select max(year(getdate())-year(birthday)) from student group by class ;
四、嵌套查询练习
1、用子查询实现,查询选修“高等数学”课的全部学生的总成绩
select sum(coursegrade) from grade where couid=(select couid from course where couname='高等数学');
2、用子查询实现,统计<学生选修信息表>,显示学号为"S001"的学生在其各科成绩中,最高分成绩所对应的课程
思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果(显示2个结果)
select couname from course where couid=(select couid from grade where coursegrade in (select max(coursegrade) from grade where stuid=1)
3、用子查询实现,查询2班选修"数据库技术"课的所有学生的成绩之和
select sum(coursegrade) from grade where stuid in(select stuid from student where class='002') and couid=(select couid from course where couname='数据库技术');
4、用子查询实现,查询3班"张三"同学的"测试管理"成绩
select coursegrade from grade where stuid in (select stuid from student where class='003'and stname='张三') and couid=(select couid from course where couname='测试管理');
五、联接查询练习
1、查询"张三"的各科考试成绩,要求显示姓名、课程号和成绩
select stname,couid,coursegrade from student inner join grade on student.stuid=grade.stuid and stname='张三';
或
select stname,couid,coursegrade from student,grade where student.stuid=grade.stuid and stname='张三';
2、查询"张三"的各科考试成绩中,哪科没有记录考试成绩,要求显示姓名、课程号和成绩select stname,couid,coursegrade from student inner join grade on student.stuid=grade.stuid and stname='张三'and coursegrade is null;