三级数据库技术SQL关系规范化PPT推荐.ppt
《三级数据库技术SQL关系规范化PPT推荐.ppt》由会员分享,可在线阅读,更多相关《三级数据库技术SQL关系规范化PPT推荐.ppt(34页珍藏版)》请在冰豆网上搜索。
![三级数据库技术SQL关系规范化PPT推荐.ppt](https://file1.bdocx.com/fileroot1/2022-10/7/d26af8bb-40fa-485e-bfe6-01c4872e1f0f/d26af8bb-40fa-485e-bfe6-01c4872e1f0f1.gif)
4、存储文件的逻辑结构组成了关系数据库的内模式。
5、表或者是一个基本表,或者是一个视图。
6、在SQL中:
一个关系对应一个基本表;
一个基本表可以存放在多个存储文件中,一个存储文件也可以存放一个或多个基本表;
一个基本表可以带若干索引,索引也可以存放在存储文件中。
7、SQL用户可以是应用程序,也可以是终端用户。
SQL的宿主语言有C,FORTARAN,COBOL,Pascal和Java等语言。
SQL也能作为独立的用户接口,供交互环境下的终端使用。
SQL语言的组成和SQL语句的类型*,SQL语言的组成数据定义语言DDL数据操作语言DML数据控制语言DCL嵌入式和动态SQL规则SQL调用和会话规则SQL语句的类型SQL定义语句:
创建、删除、修改数据库模式及其对象的语句。
SQL数据语句:
查询、插入、删除、更新操作SQL事务和控制语句SQL连接、会话和诊断语句SQL数据类型预定义数据类型构造数据类型用户定义数据类型,SQL数据定义,关系数据库的基本对象是表、视图和索引。
因此,SQL的数据定义功能包括定义表、定义视图和定义索引。
SQL的模式CREATEschema模式名AUTHORIZATION用户名SQL的域CREATEDOMAIN域名AS数据类型DEFAULTCHECK,SQL的数据查询,数据库查询是数据库操作的核心。
SQL语言提供了SELECT语句进行数据库的查询,该语句的一般格式是:
SELECTALL|DISTINCT目标列表达式,目标列表达式FROM基本表(或视图),基本表(或视图)WHERE条件表达式GROUPBY列名1HAVING内部函数表达式ORDERBY列名2ASC|DESC;
例:
(31)查询单价在600元以上的主机板和硬盘的正确命令是A)SELECT*FROM产品WHERE单价600AND(名称=主机板AND名称=硬盘)B)SELECT*FROM产品WHERE单价600AND(名称=主机板OR名称=硬盘)C)SELECT*FROM产品FOR单价600AND(名称=主机板AND名称=硬盘)D)SELECT*FROM产品FOR单价600AND(名称=主机板OR名称=硬盘),WHERE子句常用的查询条件,注意:
统配符的使用:
%,_,SQL提供的集函数,SQL提供的集函数主要有:
COUNT(DISTINCT|ALL*)统计元组个数COUNT(DISTINCT|ALL列名)统计一列中值的个数SUM(DISTINCT|ALL列名)计算一列值的总和(此列必须是数值型)AVG(DISTINCT|ALL列名)计算一列值的平均值(此列必须是数值型)MAX(DISTINCT|ALL列名)求一列值中的最大值MIN(DISTINCT|ALL列名)求一列值中的最小值,嵌套查询,嵌套查询亦称为子查询,嵌套查询是指一个SELECT-FROM-WHERE查询块可以嵌入在另一个查询块之中。
SQL中允许多层嵌套。
例1求选修了课程名为“数据库”的学生姓名。
SELECTsnameFROMstudentWHEREsnoIN(SELECTsnoFROMscWHEREcnoIN(SELECTcnoFROMcourseWHEREcname=数据库);
每个子查询在上一级查询处理之前求解,即嵌套查询是由里向外处理的,这样外层查询可以利用内层查询的结果。
查询涉及多个关系时用嵌套查询逐次求解层次分明,容易理解也容易书写,具有结构化程序设计的优点。
嵌套查询,
(1)由谓词IN引导的子查询。
在嵌套查询中,最常用的是谓词IN。
例2查询与“陈列”在同一系学习的学生号、姓名和系。
SELECTsno,sname,deptFROMstudents1WHEREs1.deptIN(SELECTdeptFROMstudents2WHEREs2.sname=陈列);
(2)谓词是比较运算符的子查询。
若能确切知道内层查询返回的是单值,则可以用比较运算符。
如上例可改为:
SELECTsno,sname,deptFROMstudentWHEREdept=(SELECTdeptFROMstudents2WHEREs2.name=陈列);
嵌套查询,(3)由NOTEXISITS谓词引导的子查询。
EXISTS代表存在量词,若内层查询结果非空,则外层查询的WHERE后面的条件为真,否则为假。
一般地,要使EXISTS为真,当且仅当其后的SELECT语句查询结果非空。
由NOTEXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。
例3查询所有选修了1号课程的学生姓名。
本查询涉及student和sc关系。
可以在student中依次取每个元组的sno值,用此值去检查sc关系。
若sc中存在这样的元组,其sno值等于此student.sno值,并且其cno=1,则取此student.sname送入结果关系。
将此想法写成SQL语句是:
SELECTsnameFROMStudentWHEREEXISTS(SELECT*FROMscWHEREsno=student.snoANDcno=1);
与EXISTS谓词相对应的是NOTEXISTS谓词。
使用存在量词NOTEXISTS后,若内层查询结果为空,则外层的WHERE子句返回真值,否则返回假值。
例4查询没有选修1号课程的学生姓名。
SELECTsnameFROMstudentWHERENOTEXISTS(SELECT*FROMscWHEREsno=student.snoANDcno=1);
多个SELECT语句的结果可进行集合操作。
并UNION:
集合操作中用得最多的是并操作UNION。
查询选修了课程1或者选修了课程2的学生号。
SELECTsnoFROMscWHEREcno=1UNIONSELECTsnoFROMscWHEREcno=2;
交:
INTERSECT例:
查询选修了课程1并选修了课程2的学生号。
SELECTsnoFROMscWHEREcno=1INTERSECTSELECTsnoFROMscWHEREcno=2;
差:
EXCEPT例:
查询选修了课程1但没有选修课程2的学生号。
SELECTsnoFROMscWHEREcno=1EXCEPTSELECTsnoFROMscWHEREcno=2;
集合查询,SQL中的连接和外连接*,SQL中的连接表JOINOUTERJOINNATURALJOINCROSSJOINSQL中的外连接LEFTJOINRIGHTJOINFULLJOIN,查询结果,存放在数组中:
INTOARRAY存放在临时文件INTOCURSOR存放在永久表:
INTODBF/TABLE存放在文本文件:
TOFILE文件名输出到打印机TOPRINTER,SQL的修改语句,SQL的修改语句包括更新、删除和插入三类语句。
更新UPDATE表名SET列名=表达式,列名=表达式WHERE谓词;
删除DELETEFROM表名WHERE谓词;
插入
(1)插入一个元组INSERTINTO表名(字段名,字段名)VALUES(常量,常量);
(2)第2种格式INSERTINTO表名(字段名,字段名)FROMARRAY/FROMMEMVAR注意:
操作涉及的记录范围!
如果没有where子句,就是全部记录。
SQL中的视图,1创建视图SQL语言用CREATEVIEW命令创建视图,其一般格式为:
CREATEVIEW视图名(列名,列名)AS子查询WITHCHECKOPTION;
2删除视图视图创建好后,若导出此视图的基本表被删除了,该视图将失效,但一般不会被自动删除。
删除视图通常需要显式地使用DROPVIEW语句进行。
该语句的格式为:
DROPVIEW视图名;
3修改视图包括插入(INSERT)、删除(DELETE)和更新(UPDATE)三类操作。
由于视图是虚表,因此对视图的更新,最终要转换为对基本表的更新。
为防止用户通过视图对数据进行插入、删除和更新时,无意或故意操作不属于视图范围内的基本表数据,可在定义视图时加上WITHCHECKOPTION子句,这样在视图上进行修改数据时,DBMS会进一步检查视图定义中的条件,若不满足条件,则拒绝执行该操作。
SQL数据控制,SQL的数据控制语句包括授权(Grant)、收权(Revoke)和拒绝访问(Deny)三种,其权限的设置对象可以是数据库用户或用户组。
授予权限GRANT权限,权限.ON对象类型对象名,对象名TO用户,用户WITHGRANTOPTION;
收回权限REVOKE权限组|ALLPRIVILEGESON对象类型对象名,对象名.FROM用户名组|PUBLIC;
嵌入式SQL,嵌入式SQL预编译的方法,即由DBMS的预处理程序对源程序进行扫描,识别出SQL语句,把他们转换成主语言调用语句程序中使用的任何表(基本表或视图)一般要用EXECSQLDECLARE语句加以说明区分SQL和主语言语句。
在所有的SQL语句前面加上前缀EXECSQL使数据库的工作单元与程序工作单元之间能够通信。
在SQL语句中使用这些主变量时,需在主变量名前加冒号:
做标志。
使用游标解决SQL一次一集合的操作与主语言一次一记录操作的矛盾。
嵌入式SQL,游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。
游标定义语句EXECSQLDECLARE游标名CURSORFOR子查询FORUPDATEOF字段名1,.n;
游标打开语句EXECSQLOPEN游标名;
游标推进语句EXECSQLFETCH游标名INTO主变量组;
游标关闭语句EXECSQLCLOSE游标名;
动态SQL,含义:
在SQL客户模块或嵌入式宿主程序的执行过程中动态生成SQL语句。
动态SQL的语句类型可变的SQL的语句条件可变的SQL语句数据库对象、条件都可变的SQL语句动态SQL语句的执行方式立即执行方式ExecuteimmediateSQL语句变量先准备后执行,关系规范化,“不好”的关系模式数据冗余更新异常插入异常删除异常函数依赖部分函数依赖在关系模式R中,如果XY,并且对于X的任何一个真子集X,都有XY,则称Y对X完全函数依赖,记作XfY。
若XY,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作XpY。
传递函数依赖X、Y和Z是R的属性集合的任意子集,如果XY、YZ且YX,Z-Y,Y-X,则称Z传递依赖于X,记作XtY,码的概念,候选码主