数据库:实验三 数据库查询语言(一)
实验三 数据库查询语言(一)
一、实验目的
1.掌握Management Studio的使用。
2.掌握SQL中Select命令的使用。
二、实验内容及要求
用SQL语句完成下列查询。此次实验开始使用的SCHOOL数据库如附录A所示。
1. 查询学生的姓名、性别、班级编号,并把结果存储在一张新表中。(提示:用Select……Into……)
Select Stu_name,stu_sex,class_id into new_table
from student
2.查询男生的资料。
Select *
from student
where stu_sex='男';
3.查询所有被选修的课程号。
Select distinct course_id
from studentGrade
4.查询所有计算机系的班级信息。
Select *
from class,deparment
where class.depar_id=deparment.depar_id and depar_name='计算机系'
5.查询年龄小于30岁的女同学的学号和姓名。(获取系统当前时间函数:getdate(),获取时间的年份函数:year,获取月份函数:month,获取“日”函数:day)
select stu_id,stu_name
from student
where (year(birthday)-year(getdate()))<30 and stu_sex='女'
6.查询艾老师所教的课程号。(请用两种方式完成查询)
select distinct course_id
from courseteacher
where teac_id in(select teac_id
from teacher
where teac_name like '艾%')
select distinct course_id
from courseteacher,teacher
where teac_name like '艾%' and courseteacher.teac_id=teacher.teac_id
7.在学生基本信息表Student中检索学生的姓名和出生年份,输出的列名为STUDENT_NAME和BIRTH_YEAR。
select stu_name STUDENT_NAME,year(birthday) BIRTH_YEAR
from student;
8.在StudnetGrade中,求选修课程“0511”且分数排名为前10%学生的学号和得分。(Top 10 percent)
select top 10 percent Stu_id,Grade
from StudentGrade
where course_id='0511'
order by Grade desc
9.查询选修课程号为“0109”或“0111”的学生学号。(请用两种方式完成查询)
select stu_id
from studentGrade
where course_id in ('0109','0111')
10.查询课程“0101”的成绩在80与90之间的同学的学号。
select stu_id
from studentGrade
where course_id = '0101' and grade>=80 and grade<=90
11.查询平均成绩都在80分以上的学生学号及平均成绩。(group by)
select stu_id,avg(grade) avggrade
from studentgrade
group by stu_id
having avg(grade)>=80
order by avggrade desc
总代码:
Select Stu_name,stu_sex,class_id into new_table
from student
Select *
from student
where stu_sex='男';
Select distinct course_id
from studentGrade
Select *
from class,deparment
where class.depar_id=deparment.depar_id and depar_name='计算机系'\
select stu_id,stu_name
from student
where (year(birthday)-year(getdate()))<30 and stu_sex='女'
select distinct course_id
from courseteacher
where teac_id in(select teac_id
from teacher
where teac_name like '艾%')
select distinct course_id
from courseteacher,teacher
where teac_name like '艾%' and courseteacher.teac_id=teacher.teac_id
select stu_name STUDENT_NAME,year(birthday) BIRTH_YEAR
from student;
select top 10 percent Stu_id,Grade
from StudentGrade
where course_id='0511'
order by Grade desc
select stu_id
from studentGrade
where course_id in ('0109','0111')
select stu_id
from studentGrade
where course_id = '0101' and grade>=80 and grade<=90
select stu_id,avg(grade) avggrade
from studentgrade
group by stu_id
having avg(grade)>=80
order by avggrade desc
三、实验小结
1.此次实验中得到的哪些经验教训、疑难问题?有什么心得或总结?
教训:使用select语句时,对于查询的概念有点模糊,在实验过程中联系到关系代数中π,就比较好理解。
group by
order by
这两个语句在使用过程中逐渐明白及应用适应范围。
2. group by语句的作用是什么?where子句跟having子句的区别在哪里?
作用“大化小”将相同属性的元素化为一个小元组,
where语句是应用于整个表中的,
having字句,必须跟在group by语句并行使用,
两者都是对数据进行相应的操作
3.传统的查询语句select …from a,b... where与select …from a inner join b on... where你更加喜欢用哪种方式来完成连接查询?为什么?
我更加喜欢select …from a,b... where;
因为语句简洁更加容易理解,同时进行文本编辑的时候更加方便