77范文网 - 专业文章范例文档资料分享平台

数据库概论实验指导书(2)

来源:网络收集 时间:2019-06-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

2、实验内容

(1) 等值连接查询(含自然连接查询)与非等值连接查询 (2) 自身连接查询 (3) 外连接查询

(4) 复合条件连接查询

(5) 嵌套查询(带有IN谓词的子查询) (6) 嵌套查询(带有比较运算符的子查询) (7) 嵌套查询(带有ANY或ALL谓词的子查询) (8) 嵌套查询(带有EXISTS谓词的子查询) (9) 集合查询

3、实验要求

(1) 熟练掌握SQL的连接查询语句 (2) 熟练掌握SQL的嵌套查询语句 (3) 掌握表名前缀、别名前缀的用法

(4) 掌握不相关子查询和相关子查询的区别和用法

(5) 掌握不同查询之间的等价替换方法(一题多解)及限制 (6) 记录实验结果,认真完成实验报告

4、实验步骤

4.1 建立示例数据库S_T(复习)

表Student 学号 姓名 性别 年龄 所在系 Sno Sname Ssex Sage Sdept 200215121 李勇 男 20 CS 200215122 刘晨 女 19 CS 200215123 王敏 女 18 MA 200215125 张立 男 19 IS 表Course 课程号 课程名 现行课 学分 Cno Cname Cpno Ccredit 1 数据库 5 4 2 数学 2 3 信息系统 5 4 4 操作系统 6 3 5 数据结构 7 4 6 数据处理 2 7 PASCAL语言 6 4 表SC 学号 课程号 成绩 Sno Cno Grade 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80

在SQL Server集成管理器的查询窗口中输入如下SQL语句序列来创建示例数据库。

/* 创建示例数据库S_T,包括3个表,即学生表Student、课程表Course和选课表SC*/ create database S_T; go

use S_T; /*将S_T设为当前数据库*/ create table Student

(Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) ); go

/*表Student的主码为Sno,属性列Sname取唯一值*/ create table Course

(Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4), Ccredit SMALLINT,

FOREIGN KEY (Cpno) REFERENCES Course(Cno) ); go

/*表Course的主码为Cno,属性列Cpno(先修课)为外码,被参照表为Course,被参照列是Cno*/

create table SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT,

primary key (Sno, Cno),

FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) ); go

/*表SC的主码为(Sno, Cno), Sno和Cno均为外码,被参照表分别为Student和Course,被参照列分别为Student.Sno和Course.Cno*/

insert into Student values('200215121','李勇','男',20,'CS'); insert into Student values('200215122','刘晨','女',19,'CS'); insert into Student values('200215123','王敏','女',18,'MA'); insert into Student values('200215125','张立','男',19,'IS'); go

/*为表Student添加数据*/

insert into course values('1', '数据库', NULL,4); insert into course values('2', '数学', NULL,2); insert into course values('3', '信息系统', NULL,4); insert into course values('4', '操作系统', NULL,3); insert into course values('5', '数据结构', NULL,4); insert into course values('6', '数据处理', NULL, 2); insert into course values('7', 'PASCAL语言', NULL,4); go

update Course set Cpno = '5' where Cno = '1'; update Course set Cpno = '1' where Cno = '3'; update Course set Cpno = '6' where Cno = '4'; update Course set Cpno = '7' where Cno = '5'; update Course set Cpno = '6' where Cno = '7'; /*为表Course添加数据*/

go

insert into SC values('200215121', '1',92); insert into SC values('200215121', '2',85); insert into SC values('200215121', '3',88); insert into SC values('200215122', '2',90); insert into SC values('200215122', '3',80); /*为表SC添加数据*/ go

也可以将上述SQL语句序列预先保存在S_T.sql文件中,在SSMS中打开并执行该文件中的sql语句序列。

4.2 对学生关系Student、课程关系Course和选修关系SC进行多表查询 基本练习

(1)等值连接查询与自然连接查询

例如:查询每个学生及其选修课的情况。

SELECT Student.*, SC.* FROM Student, SC

WHERE Student.Sno = SC.Sno; /* 一般等值连接 */ 又如:查询每个学生及其选修课的情况(去掉重复列)。

SELECT Student.Sno, Sname, Ssex, Sage, Cno, Grade FROM Student, SC

WHERE Student.Sno = SC.Sno; /* 自然连接--特殊的等值连接 */ (2)自身连接查询

例如:查询每一门课的间接先修课。

SELECT FIRST.Cno, SECOND.Cpno FROM Course FIRST, Course SECOND WHERE FIRST.Cpno = SECOND.Cno; (3)外连接查询

例如:查询每个学生及其选修课的情况(要求输出所有学生--含未选修课程的学生的情况)

SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade FROM Student LEFT OUTER JOIN SC ON(Student.Sno = SC.Sno); (4)复合条件连接查询

例如:查询选修了2号课程而且成绩在90以上的所有学生的学号和姓名。

SELECT Student.Sno, Sname FROM Student, SC

WHERE Student.Sno = SC.Sno AND

SC.Cno = ‘2' AND SC.Grade >= 90;

又如:查询每个学生的学号、姓名、选修的课程名及成绩。 SELECT Student.Sno, Sname, Cname, Grade FROM Student, SC, Course

WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno; (5)嵌套查询(带有IN谓词的子查询)

例如:查询与“刘晨”在同一个系学习的学生的学号、姓名和所在系。

SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN

(SELECT Sdept FROM Student

WHERE Sname = '刘晨'); /* 解法一*/ 可以将本查询中的IN谓词用比较运算符‘=’来代替:

SELECT Sno, Sname, Sdept FROM Student WHERE Sdept =

(SELECT Sdept FROM Student

WHERE Sname = '刘晨'); /* 解法二*/ 也可以使用自身连接完成以上查询: SELECT s1.Sno, s1.Sname, s1.Sdept FROM Student s1, Student s2 WHERE s1.Sdept = S2.Sdept AND

s2.Sname = '刘晨'; /* 解法三*/ 还可以使用EXISTS谓词完成本查询: SELECT Sno, Sname, Sdept FROM Student S1 WHERE EXISTS (SELECT *

FROM Student S2

WHERE S2.Sdept=S1.Sdept AND S2.Sname='刘晨'); /* 解法四*/

又如:查询选修了课程名为“信息系统”的学生号和姓名。

SELECT Sno, Sname FROM Student WHERE Sno IN

(SELECT Sno FROM SC

WHERE Cno IN

(SELECT Cno FROM Course

WHERE Cname = '信息系统' ) );

也可以使用连接查询来完成上述查询: SELECT Student.Sno, Sname FROM Student, SC, Course

WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Course.Cname = '信息系统';

(6)嵌套查询(带有比较运算符的子查询)

例如:找出每个学生超过他所选修课程平均成绩的课程号。

SELECT Sno, Cno FROM SC x

WHERE Grade >= ( SELECT AVG(Grade) FROM SC y

WHERE y.Sno = x.Sno); (7)嵌套查询(带有ANY或ALL谓词的子查询)

例如:查询其他系中比计算机系某个学生年龄小的学生的姓名和年龄。

SELECT Sname, Sage FROM Student

WHERE Sage

WHERE Sdept = 'CS') AND Sdept <> 'CS';

本查询也可以使用聚集函数来实现: SELECT Sname, Sage FROM Student

WHERE Sage < (SELECT MAX(Sage) FROM Student

WHERE Sdept = 'CS') AND Sdept <> 'CS';

又如:查询其他系中比计算机系所有学生年龄都小的学生的姓名和年龄。

SELECT Sname, Sage FROM Student

WHERE Sage

WHERE Sdept = 'CS') AND Sdept <> 'CS'; 也可以使用聚集函数来实现: SELECT Sname, Sage FROM Student

WHERE Sage < (SELECT MIN(Sage) FROM Student

WHERE Sdept = 'CS') AND Sdept <> 'CS';

(8)嵌套查询(带有EXISTS谓词的子查询) 例如:查询所有选修了1号课程的学生姓名。 SELECT Sname FROM Student WHERE EXISTS

(SELECT * FROM SC

WHERE Sno=Student.Sno AND Cno='1');

又如:查询所有未选修1号课程的学生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS

(SELECT * FROM SC

WHERE Sno=Student.Sno AND Cno='1');

可以使用带有EXISTS谓词的子查询实现全称量词或蕴涵逻辑运算功能: 例如:查询选修了全部课程的学生姓名。

SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course

WHERE NOT EXISTS (SELECT * FROM SC

WHERE Sno=Student.Sno AND Cno=Course.Cno));

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据库概论实验指导书(2)在线全文阅读。

数据库概论实验指导书(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/662372.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: