关系数据库语言sql(ch)

上传人:shaoy****1971 文档编号:115241668 上传时间:2019-11-13 格式:PPT 页数:69 大小:691.36KB
返回 下载 相关 举报
关系数据库语言sql(ch)_第1页
第1页 / 共69页
关系数据库语言sql(ch)_第2页
第2页 / 共69页
关系数据库语言sql(ch)_第3页
第3页 / 共69页
关系数据库语言sql(ch)_第4页
第4页 / 共69页
关系数据库语言sql(ch)_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《关系数据库语言sql(ch)》由会员分享,可在线阅读,更多相关《关系数据库语言sql(ch)(69页珍藏版)》请在金锄头文库上搜索。

1、数据库管理系统数据库管理系统 连接查询 SQL中连接查询的主要类型: 广义笛卡尔积 等值连接(含自然连接) 非等值连接查询 自身连接查询 外连接查询 复合条件连接查询 (1)广义笛卡尔积 v 不带连接谓词的连接 v 很少使用 例: SELECT Student.* , SC.* FROM Student, SC (2)自然连接 v 等值连接的一种特殊情况,把目标列中重复 的 属性列去掉. 例 SELECT Student.Sno,Sname,Ssex, Sage, Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno; (3)自身

2、连接 SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = SECOND.Cno; 例 查询每一门课的间接先修课,即先修课的先修课 Course表结构为:Cno,Cname,Cpno,Ccredit 自身连接(续) FIRST表(Course表) Cno CnameCpnoCcredit 1数据库 54 2数学 2 3信息系统 14 4操作系统 63 5数据结构 74 6数据处理 2 7PASCAL语言 64 自身连接(续) SECOND表(Course 表) Cno CnameCpnoC

3、credit 1数据库 5 4 2数学 2 3信息系统 1 4 4操作系统 6 3 5数据结构 7 4 6数据处理 2 7PASCAL语言 6 4 自身连接(续) 查询结果 1 7 3 5 5 6 cnocpno (4)外连接 v inner join 内连接(等值的F连接) 左边表和右边表满足连接条件的记录取出为结果集 v left outer join 左外连接 左边表和右边表满足连接条件的记录取出为结果集,加 上左边表未匹配的记录 v right outer join 右外连接 左边表和右边表满足连接条件的记录取出为结果集,加 上右边表未匹配的记录 v full outer join 外

4、连接 内连接 USE pubs SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city = p.city ORDER BY a.au_name DESC 左外连接 USE pubs SELECT a.au_name, p.pub_name FROM authors a LEFT OUTER JOIN publishers p ON a.city = p.city ORDER BY p.pub_name ASC, a.au_name ASC (5)复合条件连接 例 查询选修2号课程且成绩在90分以上的所 有 学生的学号、姓名

5、. SELECT Student.Sno, student.Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND SC.Cno= 2 AND SC.Grade 90 ; (6)多表连接 例 查每个学生的学号、姓名、选修的课程名及 成绩. SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno; (7)嵌套查询 r嵌套查询概述 v一个SELECT-FROM-WHERE语句称为一个

6、查 询块 v将一个查询块嵌套在另一个查询块的WHERE子 句或HAVING短语的条件中的查询称为嵌套查 询 注:嵌套查询是一种比较复杂的查询方法,需要 比较细心的处理各种可能的情况. 嵌套查询(例) SELECT Sname 外层查询/父 查询 FROM Student WHERE Sno IN (SELECT Sno 内层查询/子查 询 FROM SC WHERE Cno= 2 ) 构造嵌套查询 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname= 刘晨 ); 例

7、查询与“刘晨”在同一个系学习的学生. (8)带有ANY谓词的子查询 SELECT Sname,Sage FROM Student WHERE Sage 70; 集合查询 v 标准SQL直接支持的集合操作种类 v 并操作(UNION) v 一般商用数据库支持的集合操作种类 v 并操作(UNION) v 交操作(INTERSECT) v 差操作(MINUS、EXCEPT) (1)并操作 例 查询计算机科学系的学生及年龄不大于19 岁的学生. SELECT * FROM Student WHERE Sdept= CS UNION SELECT * FROM Student WHERE Sage=90

8、; 视图的创建和撤销 v 视图的撤销 在视图不需要时,可以用“DROP VIEW”语 句把其从系统中撤销. 其句法如下: DROP VIEW 视图名 例3.28 撤销STUDENT_GRADE视图 DROP VIEW STUDENT_GRADE; 对视图的更新操作 设有一个视图定义 CREATE VIEW SUDENT_GRADE AS SELECT S.S#, SNAME,CNAME,GRADE FROM S,SC,C WHERE S.S# = SC.S# AND SC.C# =C.C#; 如果用户要在视图中执行插入操作: INSERT INTO STUDENT_GRADE VALUES (

9、S24, WANG, MATHS,80); 若在基本表C中,课程名为MATHS的课程号有多个, 则往基本表SC插入元组时,课程号C#就不定了. 因此, 对这个视图的更新是不允许的. 对视图的更新操作 设有一个视图定义,包含每个学生选修课程(成绩为非 空) 的门数和平均成绩: CREATE VIEW S_GRADE(S#,CNUM,AVGGRADE ) AS SELECT S#,COUNT(C#),AVG(GRADE) FROM SC WHERE GRADE IS NOT NULL 视图S_GRADE虽然是从单个基本表导出,但导出时使用 了分组和聚集操作,因此也是不能更新的. 对视图的更新操作

10、如果定义了一个有关男同学的视图: CREATE VIEW S_MALE AS SELECT S#, SNAME, AGE FROM S WHERE SEX =M; 这个视图是从单个关系只使用选择和投影导出的,并且 包含主键S#,因此是可更新的。例如,执行插入操作: INSERT INTO S_MALE VALUES(S28,WU,18); 系统自动会把它转变成下列语句: INSERT INTO S VALUES(S28, WU,18, M); 视图的优点 v 视图是用户一级的数据观点,由于有了视 图,使数据库系统具有下列优点: 视图提供了逻辑数据独立性. 简化了用户观点。数据库的全部结构是复杂

11、的, 并有多种联系. 数据的安全保护功能. 3.6 嵌入式SQL vSQL语言有两种使用方式: v一种是在终端交互方式下使用,称为交互式SQL ; v另一种是嵌入在高级语言的程序中使用,称为嵌 入式SQL,而这些高级语言可以是C、ASP、 PASCAL、VB或JAVA等,称为宿主语言. SQL的运行环境 宿主语言十嵌入式SQL 预处理程序 宿主语言十函数调用 SQL函数定义库 宿主语言编译程序 目标程序 图 源程序处理过程 存储过程 存储过程的特点 n存储过程是存储在服务器上的一组预编译的 Transact-SQL语句。存储过程是一种封装 重复任务操作的一种方法,支持用户提供的 变量,具有强大

12、的编程功能。 n一般地,在Microsoft SQL Server系统中使 用存储过程可以带来许多好处 存储过程的好处 与其他应用程序共享应用程序的逻辑,因此确保一致的 数据访问和操纵。 提供一种安全机制。如果用户被授予执行存储过程的权 限,那么即使该用户没有访问在该存储过程中所参考的 表或视图的权限,该用户也可以完全执行该存储过程, 而不会受到影响。 由于存储过程在第一次执行之后,其执行规划就驻存在 过程高速缓冲存储器中。在以后的操作中,只需要从过 程高速缓冲存储器中调用编译好的存储过程的二进制形 式来执行,因此可以加速存储过程的执行,提高系统的 性能。 减少网络交通。 存储过程的类型 在M

13、icrosoft SQL Server 2000关系型数据 库管理系统中,支持5种类型的存储过程: 系统存储过程、本地存储过程、临时存储过 程、远程存储过程和扩展存储过程。不同类 型的存储过程具有不同的作用。 创建存储过程 uCREATE PROCEDURE语句语法形式如下 : uCREATE PROCEDURE procedure_name uparameter data_type uWITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION uAS sql_statement 例: 创建存储过程-未带任何参数 Use AdventureWork

14、s Go Create PROC Getdepartment As Select * From humanresources.department 例: 创建存储过程-带参数 Use AdventureWorks Go Create PROC GetdepartmentByGroupName groupName nvarchar(50)=Sales and Marketing As Select * From humanresources.department Where GroupName=groupName 执行存储过程 n只有具有存储过程的执行权限EXECUTE, 才可以执行存储过程。执

15、行存储过程有两种 方法。一种方法是直接执行存储过程,另外 一种方法是在INSERT语句中执行存储过程 。 n直接执行存储过程就是调用EXECUTE语句 来执行存储过程。在执行存储过程的时候, 需要提供存储过程的名称和存储过程所需要 的参数。 EXEC GetdepartmentByGroupName groupName=Manufacturing 调用存储过程-带参数 修改存储过程 Alter PROC procedure_name 删除存储过程 Drop PROC procedure_name & 小 结 v SQL的数据定义 CREATE、DROP、ALTER v SQL的数据查询 SELECT、 v SQL的数据更新 INSERT、UPDATE、DELETE v 视图的应用 v 嵌入式SQL语句 v 存储过程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号