实验三mysql查询_实验三 数据库的查询实验

一、 实验目的和要求

(1)掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言的查询语句的理解。

(2)熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法。

(3)熟练掌握数据查询中的分组、统计、计算和组合的操作方法。

二、 实验内容和原理

1. 简单查询操作

该实验包括投影、选择条件表达、数据排序、使用临时表等。

2. 连接查询操作

该实验包括等值连接、自然连接、求笛卡尔积、一般连接、外连接、内连接、左连接、右连接和自连接等。

3. 在SQL Server查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。

4. 分组查询实验。该实验包括分组条件表达、选择组条件的表达方法。

5. 使用函数查询的实验。该实验包括统计函数和分组统计函数的使用方法。

6. 组合查询实验。

7. 计算和分组计算查询的实验。

三、 实验环境

硬件:计算机

软件:Windows 2000和SQL Server 2000

四、 算法描述及实验步骤

1. 基本操作实验

用Transact-SQL语句表示下列操作.在学生-课程库中实现其数据查询操作:

(1)求数学系学生的学号和姓名。

select sno,sname

from student

where sdept ='MA'

(2)求选修了高等数学的学生学号、姓名和成绩。

select sc.sno,sname,grade

from student,sc,course

where sc.cno=course.cno and cname='数学' and student.sno

=sc.sno

(3)求选修C1课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。

select sno,grade

from sc

where cno ='1'

order by grade desc,sno asc

(4)获选修课程C1且成绩在80~90分之间的学生学号、姓名及成绩,并将成绩乘以系数0.8输出。

select student.sno,sname,grade*0.8

"grade*0.8"

from sc,student

where cno ='1'and grade between 80 and 90 and student.sno

=sc.sno

(5)求数学系或计算机系姓张的学生的信息。

select *

from student

where (sdept ='CS' or sdept ='MA') and sname like'张%'

(6)求缺少了成绩的学生的学号和课程号。

select sno,cno

from sc

where grade is null

(7)求C1课程的成绩高于张三的学生学号和成绩。

select sno,cno

from sc

where cno ='1'and

grade >

(select grade

from sc,student

where sname ='张三' and student.sno =sc.sno and cno ='1')

(8)求其他系中比计算机系学生年龄都小的学生。

select *

from student

where sdept !='cs' and sage <

(

select min(sage)

from student

where sdept ='cs'

)

(9)查询选修了全部课程的学生的姓名。

select Sname

from student

where Sno IN

(select Sno from SC

group by Sno

having count(*) = (select count(*) from course )

)

(10)求至少选修了学生“张三”所选修的全部课程的学生学号和姓名。

select distinct scx.sno,sname

from sc scx,student

where scx.sno =student.sno and not exists

(select *

from sc scy,student

where sname ='张三'and scy.sno =student.sno and not exists

(select *

from sc scz

where scx.sno =scz.sno and scy.cno =scz.cno))

(11)查询每一门课的间接先行课(即先行课的先行课)。

select c1.cno,c2.cpno

from course c1,course c2

where c1.cpno =c2.cno

在图书-图书库中实现其查询操作。

(1)查找这样的图书类别:要求类别中最高的图书定价不低于全部按类别分组的图书平均定价的2倍。

select 类别

from 图书

group by 类别

having max(定价)>=all

(select avg(定价)*2

from 图书

group by 类别)

(2)求机械工业出版社出版的各类图书的平均定价,用GROUP BY表示。

select distinct 类别, avg(定价) '平均定价'

from 图书

where 出版社 ='机械工业出版社'

group by 类别

(3)列出计算机类图书的书号、名称及价格,最后求出册数和总价格。

SELECT 书号,书名,定价

FROM 图书

WHERE 类别='计算机' ORDER BY 书号 ASC

COMPUTE count (书号),SUM(定价)

(4)列出计算机类图书的书号、名称及价格,并求出各出版社这类书的总价格,最后求出全部册数和总价格。

select 书号,书名,定价

from 图书

where 类别='计算机'

order by 出版社

compute sum(定价) by 出版社

(5)查询计算机类和机械工业出版社出版的图书。

select 书号,书名

from 图书

where 类别='计算机'and 出版社 ='机械工业出版社'

(6)在图书-借阅库中实现其查询操作:将计算机类的书存入永久的计算机图书表中,将借书日期在1999年以前的借阅记录存入临时的超期借阅表。

SELECT *

INTO 计算机图书

FROM 图书

WHERE 类别='计算机'

GO

SELECT *

INTO #超期借阅

FROM 借阅

WHERE 借阅日期< '1999-01-01'

GO

(1)按表1的格式,建立职工部门库和职工表、部门,并向表中输入数据。

表1 职工和部门表数据

职工表 部门表

a4c26d1e5885305701be709a3d33442f.pnga4c26d1e5885305701be709a3d33442f.png职工号

姓名

性别

年龄

部门

1010

李勇

20

11

1011

刘晨

19

1012

王敏

22

12

1013

张立

21

13

部门号

部门名称

电话

11

生产科

566

12

计划科

578

13

一车间

467

14

科研所

(2)用Transact-SQL语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。

1.等值连接

select 职工表.*,部门表.*

from 职工表,部门表

where 职工表.部门=部门表.部门号

2.自然连接

select 职工号,姓名,性别,年龄,部门,部门名称

from 职工表,部门表

where 职工表.部门=部门表.部门号

3.左外连接

select 职工号,姓名,性别,年龄,部门,部门名称

from 职工表

left outer join 部门表 on(职工表.部门=部门表.部门号)

4.右外连接

select 职工号,姓名,性别,年龄,部门,部门名称

from 职工表

right outer join 部门表 on(职工表.部门=部门表.部门号)

五、 调试过程

1、 在查询求数学系或计算机系姓张的学生的信息时,出现如下错误提示:

a4c26d1e5885305701be709a3d33442f.png

代码如下:

select *

from student

where sdept ='CS' or sdept ='MA' and sname like'张%'

分析下,明白了代码应该改为如下:

select *

from student

where (sdept ='CS' or sdept ='MA') and sname like'张%'

2、 在查询求缺少了成绩的学生的学号和课程号时,出现如下错误提示:

a4c26d1e5885305701be709a3d33442f.png

代码如下:

select sno,cno

from sc

where grade = null

分析下原因,原来是 =和is的差别,改代码如下:

select sno,cno

from sc

where grade is null

a4c26d1e5885305701be709a3d33442f.png

六、 实验结果

1. 基本操作实验

用Transact-SQL语句表示下列操作.

在学生-课程库中实现其数据查询操作:

(1)求数学系学生的学号和姓名。

a4c26d1e5885305701be709a3d33442f.png

(2)求选修了高等数学的学生学号、姓名和成绩。

a4c26d1e5885305701be709a3d33442f.png

(3)求选修C1课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。

a4c26d1e5885305701be709a3d33442f.png

(4)获选修课程C1且成绩在80~90分之间的学生学号、姓名及成绩,并将成绩乘以系数0.8输出。

a4c26d1e5885305701be709a3d33442f.png

(5)求数学系或计算机系姓张的学生的信息。

a4c26d1e5885305701be709a3d33442f.png

(6)求缺少了成绩的学生的学号和课程号。

a4c26d1e5885305701be709a3d33442f.png

(7)求C1课程的成绩高于张三的学生学号和成绩。

a4c26d1e5885305701be709a3d33442f.png

(8)求其他系中比计算机系学生年龄都小的学生。

a4c26d1e5885305701be709a3d33442f.png

(9)查询选修了全部课程的学生的姓名。

a4c26d1e5885305701be709a3d33442f.png

(10)求至少选修了学生“张三”所选修的全部课程的学生学号和姓名。

a4c26d1e5885305701be709a3d33442f.png

(11)查询每一门课的间接先行课(即先行课的先行课)。

a4c26d1e5885305701be709a3d33442f.png

在图书-图书库中实现其查询操作。

(1)查找这样的图书类别:要求类别中最高的图书定价不低于全部按类别分组的图书平均定价的2倍。

a4c26d1e5885305701be709a3d33442f.png

(2)求机械工业出版社出版的各类图书的平均定价,用GROUP BY表示。

a4c26d1e5885305701be709a3d33442f.png

(3)列出计算机类图书的书号、名称及价格,最后求出册数和总价格。

a4c26d1e5885305701be709a3d33442f.png

(4)列出计算机类图书的书号、名称及价格,并求出各出版社这类书的总价格,最后求出全部册数和总价格。

a4c26d1e5885305701be709a3d33442f.png

(5)查询计算机类和机械工业出版社出版的图书。

a4c26d1e5885305701be709a3d33442f.png

(6)在图书-借阅库中实现其查询操作:将计算机类的书存入永久的计算机图书表中,将借书日期在1999年以前的借阅记录存入临时的超期借阅表。

a4c26d1e5885305701be709a3d33442f.png

2. 提高操作实验

(1)按表1的格式,建立职工部门库和职工表、部门,并向表中输入数据。

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

(2)用Transact-SQL语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。

1.等值连接

a4c26d1e5885305701be709a3d33442f.png

2.自然连接

a4c26d1e5885305701be709a3d33442f.png

3.左外连接

a4c26d1e5885305701be709a3d33442f.png

4.右外连接

a4c26d1e5885305701be709a3d33442f.png

七、 总结

这次数据库实验主要是考察我们对简单查询和连接查询的掌握。虽然在理论学习的时候觉得很简单,凭空的去想想结果是什么样子的,但是不能够实践。从这次实验中,让我们将理论知识应用到实践中来,通过编写一些命令语句,结果就能呈现在我们眼前。

这次实验中要写的语句虽然很多,但是当我把它们一个一个的写出来,并运行成功的时候,觉得很有成就感。不过因为自己的粗心还有对一些语句书写的不够熟练,做实验用了很长时间。在这很长时间中,增加了我们对各种情况下查找命令语句的熟悉程度,使实验报告顺利的完成,觉得非常值得。

  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、实验目的 1、掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言查询语句的理解。 2、熟练掌握数据查询中的分组统计、计算与集合查询方法。 二、实验环境: Microsoft Windows 2000操作系统,Microsoft SQL Server 2000数据库管理系统标准版或企业版。 三、实验内容、步骤、结果和实验过程中出现的问题: 1>内容: 基于实验一建立的 “图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单中的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。 1、集合查询实验 在“图书读者数据库”(Book_Reader_DB)中,用集合查询的方法完成下列查询任务: ① 查询计算机类和机械工业出版社出版的图书; ② 查询清华大学出版社出版的书中与机械工业出版社出版的所有不相同的图书号与书名; ③ 查询清华大学出版社出版的书与环境类图书的交集; ④ 查询借阅过清华大学出版社出版的“数据结构” 图书和西安电子工业出版社出版的“操作系统”图书的读者号的并集; 2、统计查询实验 在“图书读者数据库”(Book_Reader_DB)中,用分组统计与计算的方法完成下列查询任务: ① 查找这样的图书类别:要求类别中最高的图书定价不低于全部按类别分组的图书平均定价的2倍; ② 求机械工业出版社出版的各类图书的平均定价,用Group by来实现; ③ 列出计算机类图书的书号、名称及价格,最后求出册数和总价格; ④ 列出计算机类图书的书号、名称及价格,并求出各出版社这类书的总价格,最后求出全部册数和总价格; ⑤ 查询订购图书最多的出版社及订购图书的数量; ⑥ 查询2000年以后购买的图书总册数; ⑦ 计算各类图书的总册数; ⑧ 查询每本图书的平均借阅次数;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值