暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库:实验三 数据库查询语言(一)

我叫木十八 2019-10-18
1294

实验三  数据库查询语言(一)

一、实验目的

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

因为语句简洁更加容易理解,同时进行文本编辑的时候更加方便







文章转载自我叫木十八,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论