数据库原理及应用上机实验二

实验名称:实验二 数据基本查询

 

实验目的

1.掌握SQL查询语句的一般格式。

2.掌握简单数据查询操作。

3.熟练掌握各种查询条件的表示。

4.掌握排序和分组操作在SQL语句中的实现。

5.掌握集函数的使用。

 

实验步骤与调试过程(请用简单的文字描述)

1.按实验一步骤先建好数据库,建好表,并输入实验一所给的数据。
2.对各表中的数据进行不同条件的查询;
包括的运算:投影、选择、比较运算符、逻辑运算符、字符匹配运算符、匹配列表范围、算术运算符、内部函数、排序、分组、分组函数使用
(1)查询全体学生的学号和姓名
(2)查询全体学生的详细记录
(3)查询软件学院的学生姓名、年龄、系别
(4)查询所有选修过课程的学生学号(不重复)
(5)查询考试不及格的学生学号(不重复)
(6)查询不是软件学院、计算机系的学生性别、年龄、系别
(7)查询年龄18-20岁的学生学号、姓名、系别、年龄;
(8)查询姓刘的学生情况
(9)查询姓刘或姓李的学生情况
(10)查询姓刘且名字为两个字的学生情况
(11)查询1983年以后出生的学生姓名。
(12)创建表 studentgrad(sno,mathgrade,englishigrade,chinesegrade)
计算学生各科总成绩并赋予别名
(13)利用内部函数 year()查找软件学院学生的出生年份
(14)利用字符转换函数实现字符联接。
       Select sname + ‘年龄为’+cast(sage as char(2))+’岁’
       From student
(15)查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
(16)查询学生总人数。
(17)查询选修了课程的学生人数。
(18)查询选修了7号课程的学生总人数和平均成绩
(19)查询选修6号课程学生的最好成绩
(20)查询每个系的系名及学生人数。
(21)查找每门课的选修人数及平均成绩
(22)查找没有先修课的课程情况

 

实验结果(上传实验结果截图或者简单文字描述)

1.如果要对一列值设置别名,需要select+ 列名+as+新名字。

2.使用group  by可以把一列或者多列分组,具有相同值的会被分在同一个分组。

3.使用year()函数可以很简洁算出你想要的那个日期的元组数有多少。

4.使用order by 可以对指定列排序,升序可以直接省略。

 

疑难小结(总结个人在实验中遇到的问题或者心得体会)

1.在查询全体学生的学号和姓名时,因为记错了语句,一直出错,调试了好久。
2.在进行步骤的时候,不知道怎么才能在列之间插入字符,很是迷茫,所以去百度了方法之后,才会。
3.还有就是在进行实验的过程中,经常遇到一些小问题,总结来说的话,就是不够细心和认真,下次再做实验的时候会改正。

 

实验详细操作步骤或程序清单

1、查询全体学生的学号和姓名
select sno,sname 
from student;

2、查询全体学生的详细记录
select * 
from student;

3、查询软件学院的学生姓名、年龄、系别
select sname,sage,sdept
from student
where sdept='MA';

4、查询所有选修过课程的学生学号(不重复)
select distinct sno 
from sc;
where cno<>'null';

5、查询考试不及格的学生学号(不重复)
select distinct sno
from sc
where grade<60;

6、查询不是软件学院、计算机系的学生性别、年龄、系别

select ssex,sage,sdept
from student 
where sdept not in('CS','MA');

7、查询年龄18-20岁的学生学号、姓名、系别、年龄

select sno,sname,sdept,sage 
from student
where sage between 18 and 20;

8、查询姓刘的学生情况
select * 
from student
where sname like '刘%';

9、查询姓刘或姓李的学生情况
select *
from student
where sname like '刘%' or sname like '李%';

10、查询姓刘且名字为两个字的学生情况
select * 
from student
where sname like '刘_';

11、查询1983年以后出生的学生姓名
select sname 
from student 
where sage < 2019-1983

12、创建表 studentgrad(sno,mathgrade,englishigrade,chinesegrade)计算学生各科总成绩并赋予别名
create table studentgrade(
    Sno char(8) ,
    mathgrade int,
    englishigrade int,
    chinesegrade int
)
select sum(mathgrade+chinesegrade+englishigrade) '学生总成绩' 
from studentgrade;

13、利用内部函数 year()查找软件学院学生的出生年份
select (year(getdate())-student.sage+1) 
from student 
where sdept='MA';

14、利用字符转换函数实现字符联接。select sname+‘年龄为’+cast(sage as char(2))+’岁’ from student
select sname+'年龄为'+cast(sage as char(2))+'岁'
from student;

15、查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列
select *
from student 
order by sdept,sage desc;

16、查询学生总人数
select count(*) 
from student;

17、查询选修了课程的学生人数
select count(distinct sno) 
from sc;

18、查询选修了7号课程的学生总人数和平均成绩
select count(*),avg(grade)as avggrade 
from student,sc 
where student.sno=sc.sno and sc.cno='7';

19、查询选修6号课程学生的最好成绩
select max(grade) as maxgrade 
from sc
where cno='6';

20、查询每个系的系名及学生人数
select sdept,count(*) 
from student
group by sdept;

21、查找每门课的选修人数及平均成绩
select cno,count(*),avg(grade) as avggrade 
from sc
group by cno;

22、查找没有先修课的课程情况
select * 
from course 
where cpno is null;

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值