实验六 多表查询(V2.0)
来源:互联网 发布:帝国cms jquery代码 编辑:程序博客网 时间:2024/04/28 19:33
实验六 多表查询
【实验目的】
1. 掌握等值连接和非等值连接
2. 掌握自身连接(同一个表之间连接)
3. 掌握外连接
4. 掌握复合条件连接
【实验内容】
1. 基本命令:
select <目标列>
from <表1,表2>[,<表3>[,<...>]]
where <条件>
功能:从表1和表2中查询满足条件的目标列。
2. 实验内容
【例1】查询选修了3号课程的学生学号和姓名
select student.sno,snamefrom student,scwhere student.sno = sc.sno and cno = '3'
备注:表1和表2笛卡尔积,是连接的第一步,是第一个表的每一行与第二个表的每一行组成一次连接(元组相连)。表1和表2的笛卡尔积,有M(M=表1行数*表2行数)行,N(N=表1列数+表2列数)列。
笛卡尔积的每一行不一定有意义。例如学生表student和选课表sc的笛卡尔积20行中只有5行有意义。需要我们做筛选条件,就是表1的某一列=表二的某一列。例如student.sno = sc.sno
【例2】查询所有课程的先修课课程号,课程名和学分
解释:题目需要查询课程信息,附加先修课信息。
两个表的笛卡尔积,如果是表1与表1做笛卡尔积,结果是笛卡尔积的特例情况。需要对表做两个不同的别名,目标列才能够进行区分。
--查询每个课程的先修课学分(课程号,课程名,课程学分,先修课名和先修课学分)select 课程.cno,课程.cname,课程.ccredit,课程.cpno,先修课程.Cname,先修课程.ccreditfrom Course 课程,Course 先修课程where 课程.Cpno = 先修课程.Cno
【例3】查询全体学生的选修课程情况
解释:外连接能够实现表1与表2具有联系的元组显示的同时,可以显示某个表全部元组(左连接全部显示左边表,右连接全部显示右边表,左边表是from结构中第一个表,右边表是from结构中最后一个表)。
比较:select student.*,cno,grade
from student,sc
where student.sno = sc.sno
本命令只能够查询具有选修课程的学生,没有显示全部学生。(即没有选修课的学生,在结果中没有显示出来)
比较命令:
-- 比较如下查询,查询学生选修情况(只列出具有选课的学生)select student.*,cno,gradefrom student,scwhere student.sno = sc.sno--查询全部学生的选修课程情况,没有选修课程的也要显示出来。select student.*,cno,gradefrom student left join sc on student.sno = sc.sno
查询效果:
【例4】查询男生同学中选修了数据库课程的学生学号,姓名,课程名和成绩。(复合条件查询)
思考:
查询表如果有2个,连接条件有几个? 1个
如果查询表有3个,则连接条件有几个? 2个
如果查询中有n个表,n>=2,则连接条件为 n-1个。(还可能有其他筛选条件)
例4参考答案
Select student.sno,sname,cname,gradefrom student,sc,coursewhere student.sno = sc.sno and sc.cno = course.cno and ssex = ‘男’ and cname = ‘数据库’
【练习】
1.查询姓名为刘晨的学生选修的课号和成绩。
2.查询年龄大于19的学生的学号、选修的课号和成绩。
3.查询年龄大于19(含)的学生的学号和所选修的课程数量。
提示:SC分组统计。(student中可以限定年龄)
select __________,count(cno)
from sc,student
where ________ and ________
group by ____________
查询年龄大于19(含)学生选修课程数多于1门课程的学生学号和课程数量。
4.查询3学分以上(含3分)课程被选修情况,结果有学号,课程号,学分,成绩(结果按照学号升序、成绩降序排序)。
selectf______________________
from sc ,course
where sc.cno=course.cno and ________________
order by _____________________________
5.查询所有学生的(所有学生包括没有选课的学生)选课情况(学号、姓名、性别、课程号、成绩)。
6.查询所有课程的(含有没有被选修的课程)被选修情况(课程号、课程名、学分、学号、成绩)。
select course.cno,cname,ccredit,sno,grade
from course________ sc
on ______________________
方法二:
select _____________________________
from sc ______________course
on ______________________________
7. 查询所有课程的(含有没有被选修的课程)被选修情况(学号、课程号、课程名、学分、成绩)。
【实验总结】
查询的目标列或查询条件决定需要从多个表内进行查询时,多表查询。
- 实验六 多表查询(V2.0)
- 实验五 单表查询(V2.0版)
- 实验七 嵌套查询(V2.0)
- Oracle表的常用查询实验(六)
- 实验八 视图(V2.0)
- 实验九 数据库完整性实验(V2.0)
- 实验十一 连接数据库实验(V2.0)
- 六、多表查询
- Oracle笔记(六)多表查询
- Oracle笔记(六) 多表查询
- Oracle笔记(六) 多表查询
- Oracle笔记(六) 多表查询
- Oracle笔记(六) 多表查询
- Oracle笔记(六) 多表查询
- Oracle笔记(六) 多表查询
- Oracle笔记(六) 多表查询
- Oracle笔记(六) 多表查询
- MySQL(六)多表查询
- surfaceSurface、SurfaceHolder及SurfaceHolder.Callback
- Tomcat服务器性能优化
- 参考资料
- Android中JNI的使用方法
- Instal CGAL on Win8 vs2010 64bit
- 实验六 多表查询(V2.0)
- ORA-02396: exceeded maximum idle time, please connect again的原因
- Fourinone创始人彭渊:打造多合一的分布式并行计算框架
- SVN的标准目录结构:trunk、branches、tags .
- 10420 - List of Conquests
- 怎样克服拖延症?
- 第四篇 浅解Action Bar
- 经典union的使用
- 病毒加壳技术与脱壳技术