数据库---实验二 数据查询
2018-06-17 23:08:48来源:未知 阅读 ()
(一)多表连接查询 i. 查询每个选课学生的学生姓名、课程号和分数。(2表连接) SQL> select student.sname,sc.cno,sc.grade from student,sc where student.sno=sc.sno; ii. 求学生的学号、姓名、选修课程的课程名及成绩。(3表连接) SQL> select student.sno,student.sname,course.cname,sc.grade from student,course,sc where student.sno=sc.sno and sc.cno=course.cno; iii. 求选修课程号为1或课程号为2的学生姓名和学号。 SQL> select distinct student.sname,student.sno from student,sc where student.sno=sc.sno and (sc.cno=1 or sc.cno=2); iv. 查询每一门课程的间接先行课的课程号。 SQL> select first.cno,second.cpno from course first,course second where first.cpno=second.cno; v. 查询与’刘晨’在同一个系学习的学生。 SQL> select * from student where sdept=(select sdept from student where sname='李佳'); vi. 查询选修了课程名为’C语言’的学生学号和姓名。 SQL> select student.sno,student.sname from student,sc,course where student.sno=sc.sno and sc.cno=course.cno and course.cname='PASCAL语言'; vii. 查询平均成绩在80分以上的学生学号和平均成绩。 SQL> select sno,avg(grade) avg_grade from sc group by sno having avg(grade)>=80; viii. 查询选修了1门且平均分在85分以下课程的学生的学号。 SQL> select distinct sc.sno from student,sc where student.sno=sc.sno and cno in (select cno from sc group by cno having avg(grade)<85); ix. 以学生为主体显示学生的信息及其选课的信息。 SQL> select * from student,sc where student.sno=sc.sno(+); x. 对学生表和选课表做自然连接,并输出结果。 SQL> select student.sno,student.sname,student.ssex,student.sage,student.sdept,sc.cno,sc.grade from student,sc where student.sno=sc.sno; xi. 输出学号大于’ 刘晨’的学生的姓名和学号。 SQL> select sname,sno from student where sno>(select sno from student where sname='刘明'); xii. 查询数学系的学生每个人所选课程的平均成绩。 SQL> select sc.sno,avg(sc.grade) from (select sno from student where sdept='MA')S,sc where S.sno=sc.sno group by sc.sno; xiii. 查询选修2号课程且成绩高于“20070001”号学生成绩(2号课程的成绩)的所有学生记录。 SQL> select student.* from student,sc where student.sno=sc.sno and sc.cno=2 and sc.grade>(select grade from sc where cno=2 and sno='20070001'); (二)选做(使用from子句,通过inner join,left join,right join,cross join完成多表连接查询) 1. 以学生为主体显示学生的信息及其选课的信息。 SQL> select * from student left join sc on student.sno=sc.sno; 2. 查询选修了2号课程的学生姓名。 SQL> select student.sname from student inner join sc on student.sno=sc.sno and sc.cno=2; 3. 学生表和课程表做笛卡尔积。 SQL> select * from student cross join course; (三)思考题: 1.Where子句中能否用聚集函数作为条件表达式。 答:不能。 2.多表连接查询中如果显示的某一属性不止一个表中出现,应如何处理。 答:应该用表名加上点,再加上属性名表示。
实验分析与讨论:
在本次数据库试验中,我完成了实验要求。本次实验内容是关于多表的连接查询及投影、选择条件。在课堂上,老师讲授了多表连接查询的相关知识,我也用笔练习写了sql语句,但是感觉印象还不是很深刻,有些不太理解。在实验课中我练习了sql语句,对课堂上所学的知识有了更深的理解,收获很多。实验中,我遇到了一些问题,通过查询资料和老师同学帮助最终解决了。遇到的问题如下:
1、在多表查询时,我不太清楚怎么为表取别名,在实验中,我查询资料明白了在一个查询得到的表后可以直接加上别名。
2、在做第二题时,我对外连接不太清楚,通过一个个测试,了解了inner join,
left join, right join和cross join的用法。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:SQL复杂查询和视图(2)
下一篇:SQL中的内连接与外连接
- MySQL性能优化的20条经验 2019-09-23
- 一份非常完整的MySQL规范 2019-09-17
- 数据库读写分离提高性能详解,原理是什么 2019-08-26
- 我们日常使用的数据库的数据都储存在哪里呢? 2019-08-23
- MySQL在并发场景下的问题及解决思路 2019-08-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash