vlambda博客
学习文章列表

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

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

一、实验目的

1.掌握Management Studio的使用。

2.掌握SQL中Select命令的使用。


二、实验内容及要求

用SQL语句完成下列查询。此次实验开始使用的SCHOOL数据库如附录A所示。

1. 查询学生的姓名、性别、班级编号,并把结果存储在一张新表中。(提示:用Select……Into……)


Select Stu_name,stu_sex,class_id into new_tablefrom student

 





2.查询男生的资料。


 

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


Select *from studentwhere stu_sex='男';


3.查询所有被选修的课程号。



 

数据库:实验三 数据库查询语言(一)
Select distinct course_idfrom studentGrade


4.查询所有计算机系的班级信息。



 

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


Select *from class,deparmentwhere class.depar_id=deparment.depar_id and depar_name='计算机系'


5.查询年龄小于30岁的女同学的学号和姓名。(获取系统当前时间函数:getdate(),获取时间的年份函数:year,获取月份函数:month,获取“日”函数:day)


 

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


select stu_id,stu_namefrom studentwhere (year(birthday)-year(getdate()))<30 and stu_sex='女'





6.查询艾老师所教的课程号。(请用两种方式完成查询)




 

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



select distinct course_idfrom courseteacherwhere teac_id in(select teac_id from teacher where teac_name like '艾%')
select distinct course_idfrom courseteacher,teacherwhere teac_name like '艾%' and courseteacher.teac_id=teacher.teac_id






7.在学生基本信息表Student中检索学生的姓名和出生年份,输出的列名为STUDENT_NAME和BIRTH_YEAR。


 

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




select stu_name STUDENT_NAME,year(birthday) BIRTH_YEARfrom student;






8.在StudnetGrade中,求选修课程“0511”且分数排名为前10%学生的学号和得分。(Top 10 percent)



 

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



select top 10 percent Stu_id,Gradefrom StudentGradewhere course_id='0511'order by Grade desc



9.查询选修课程号为“0109”或“0111”的学生学号。(请用两种方式完成查询)


 

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




select stu_idfrom studentGradewhere course_id in ('0109','0111')






10.查询课程“0101”的成绩在80与90之间的同学的学号。

 

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


 


select stu_idfrom studentGradewhere course_id = '0101' and grade>=80 and grade<=90




11.查询平均成绩都在80分以上的学生学号及平均成绩。(group by)

 


 

select stu_id,avg(grade) avggradefrom studentgradegroup by stu_id having avg(grade)>=80 order by avggrade desc

总代码:

Select Stu_name,stu_sex,class_id into new_tablefrom student
Select *from studentwhere stu_sex='男';
Select distinct course_idfrom studentGrade
Select *from class,deparmentwhere class.depar_id=deparment.depar_id and depar_name='计算机系'\
select stu_id,stu_namefrom studentwhere (year(birthday)-year(getdate()))<30 and stu_sex='女'
select distinct course_idfrom courseteacherwhere teac_id in(select teac_id from teacher where teac_name like '艾%')
select distinct course_idfrom courseteacher,teacherwhere teac_name like '艾%' and courseteacher.teac_id=teacher.teac_id
select stu_name STUDENT_NAME,year(birthday) BIRTH_YEARfrom student;
select top 10 percent Stu_id,Gradefrom StudentGradewhere course_id='0511'order by Grade desc
select stu_idfrom studentGradewhere course_id in ('0109','0111')
select stu_idfrom studentGradewhere course_id = '0101' and grade>=80 and grade<=90
select stu_id,avg(grade) avggradefrom studentgradegroup 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

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