1、4、存储文件的逻辑结构组成了关系数据库的内模式。5、表或者是一个基本表,或者是一个视图。6、在SQL中:一个关系对应一个基本表;一个基本表可以存放在多个存储文件中,一个存储文件也可以存放一个或多个基本表;一个基本表可以带若干索引,索引也可以存放在存储文件中。7、SQL用户可以是应用程序,也可以是终端用户。SQL的宿主语言有C,FORTARAN,COBOL,Pascal和Java等语言。SQL也能作为独立的用户接口,供交互环境下的终端使用。,SQL语言的组成和SQL语句的类型*,SQL语言的组成数据定义语言DDL数据操作语言DML数据控制语言DCL嵌入式和动态SQL规则SQL调用和会话规则SQL
2、语句的类型SQL定义语句:创建、删除、修改数据库模式及其对象的语句。SQL数据语句:查询、插入、删除、更新操作SQL事务和控制语句SQL连接、会话和诊断语句SQL数据类型预定义数据类型构造数据类型用户定义数据类型,SQL数据定义,关系数据库的基本对象是表、视图和索引。因此,SQL的数据定义功能包括定义表、定义视图和定义索引。,SQL的模式CREATE schema 模式名 AUTHORIZATION 用户名 SQL的域CREATE DOMAIN 域名 AS 数据类型 DEFAULT CHECK,SQL的数据查询,数据库查询是数据库操作的核心。SQL语言提供了SELECT语句进行数据库的查询,该
3、语句的一般格式是:SELECTALL|DISTINCT目标列表达式,目标列表达式FROM基本表(或视图),基本表(或视图)WHERE条件表达式GROUP BY列名1HAVING内部函数表达式ORDER BY列名2ASC|DESC;例:(31)查询单价在600元以上的主机板和硬盘的正确命令是A)SELECT*FROM 产品 WHERE 单价600 AND(名称=主机板 AND 名称=硬盘)B)SELECT*FROM 产品 WHERE 单价600 AND(名称=主机板 OR 名称=硬盘)C)SELECT*FROM 产品 FOR 单价600 AND(名称=主机板 AND 名称=硬盘)D)SELECT
4、*FROM 产品 FOR 单价600 AND(名称=主机板 OR 名称=硬盘),WHERE子句常用的查询条件,注意:统配符的使用:%,_,SQL提供的集函数,SQL提供的集函数主要有:COUNT(DISTINCT|ALL*)统计元组个数COUNT(DISTINCT|ALL列名)统计一列中值的个数SUM(DISTINCT|ALL列名)计算一列值的总和(此列必须是数值型)AVG(DISTINCT|ALL列名)计算一列值的平均值(此列必须是数值型)MAX(DISTINCT|ALL列名)求一列值中的最大值MIN(DISTINCT|ALL列名)求一列值中的最小值,嵌套查询,嵌套查询亦称为子查询,嵌套查询
5、是指一个SELECT-FROM-WHERE查询块可以嵌入在另一个查询块之中。SQL中允许多层嵌套。例1 求选修了课程名为“数据库”的学生姓名。SELECT sname FROM studentWHERE sno IN(SELECT sno FROM sc WHERE cno IN(SELECT cno FROM course WHERE cname=数据库);每个子查询在上一级查询处理之前求解,即嵌套查询是由里向外处理的,这样外层查询可以利用内层查询的结果。查询涉及多个关系时用嵌套查询逐次求解层次分明,容易理解也容易书写,具有结构化程序设计的优点。,嵌套查询,(1)由谓词IN引导的子查询。在嵌
6、套查询中,最常用的是谓词IN。例2 查询与“陈列”在同一系学习的学生号、姓名和系。SELECT sno,sname,dept FROM student s1WHERE s1.dept IN(SELECT dept FROM student s2WHERE s2.sname=陈列);(2)谓词是比较运算符的子查询。若能确切知道内层查询返回的是单值,则可以用比较运算符。如上例可改为:SELECT sno,sname,dept FROM studentWHERE dept=(SELECT dept FROM student s2WHERE s2.name=陈列);,嵌套查询,(3)由NOTEXISI
7、TS谓词引导的子查询。EXISTS代表存在量词,若内层查询结果非空,则外层查询的WHERE后面的条件为真,否则为假。一般地,要使EXISTS为真,当且仅当其后的SELECT语句查询结果非空。由NOTEXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义。例3 查询所有选修了1号课程的学生姓名。本查询涉及student和sc关系。可以在student中依次取每个元组的sno值,用此值去检查sc关系。若sc中存在这样的元组,其sno值等于此student.sno值,并且其cno=1,则取此student.sname送入结果关系。将此想法写
8、成SQL语句是:SELECT sname FROM StudentWHERE EXISTS(SELECT*FROM sc WHERE sno=student.sno AND cno=1);与EXISTS谓词相对应的是NOT EXISTS谓词。使用存在量词NOT EXISTS后,若内层查询结果为空,则外层的WHERE子句返回真值,否则返回假值。例4 查询没有选修1号课程的学生姓名。SELECT sname FROM studentWHERE NOT EXISTS(SELECT*FROM scWHERE sno=student.sno AND cno=1);,多个SELECT语句的结果可进行集合操
9、作。并UNION:集合操作中用得最多的是并操作UNION。查询选修了课程1或者选修了课程2的学生号。SELECT sno FROM sc WHERE cno=1UNIONSELECT sno FROM sc WHERE cno=2;交:INTERSECT例:查询选修了课程1并选修了课程2的学生号。SELECT sno FROM sc WHERE cno=1 INTERSECT SELECT sno FROM sc WHERE cno=2;差:EXCEPT例:查询选修了课程1但没有选修课程2的学生号。SELECT sno FROM sc WHERE cno=1 EXCEPT SELECT sno
10、 FROM sc WHERE cno=2;,集合查询,SQL中的连接和外连接*,SQL中的连接表JOINOUTER JOINNATURAL JOINCROSS JOINSQL中的外连接LEFT JOINRIGHT JOINFULL JOIN,查询结果,存放在数组中:INTO ARRAY 存放在临时文件INTO CURSOR存放在永久表:INTO DBF/TABLE存放在文本文件:TO FILE 文件名输出到打印机TO PRINTER,SQL的修改语句,SQL的修改语句包括更新、删除和插入三类语句。更新UPDATE表名SET列名=表达式,列名=表达式WHERE谓词;删除DELETE FROM 表
11、名 WHERE谓词;插入(1)插入一个元组INSERT INTO表名(字段名,字段名)VALUES(常量,常量);(2)第2种格式INSERT INTO表名(字段名,字段名)FROM ARRAY/FROM MEMVAR注意:操作涉及的记录范围!如果没有where子句,就是全部记录。,SQL中的视图,1创建视图SQL语言用CREATE VIEW命令创建视图,其一般格式为:CREATE VIEW 视图名(列名,列名)AS子查询WITH CHECK OPTION;2删除视图视图创建好后,若导出此视图的基本表被删除了,该视图将失效,但一般不会被自动删除。删除视图通常需要显式地使用DROP VIEW语句
12、进行。该语句的格式为:DROP VIEW视图名;3修改视图 包括插入(INSERT)、删除(DELETE)和更新(UPDATE)三类操作。由于视图是虚表,因此对视图的更新,最终要转换为对基本表的更新。为防止用户通过视图对数据进行插入、删除和更新时,无意或故意操作不属于视图范围内的基本表数据,可在定义视图时加上WITH CHECK OPTION子句,这样在视图上进行修改数据时,DBMS会进一步检查视图定义中的条件,若不满足条件,则拒绝执行该操作。,SQL数据控制,SQL的数据控制语句包括授权(Grant)、收权(Revoke)和拒绝访问(Deny)三种,其权限的设置对象可以是数据库用户或用户组。
13、授予权限 GRANT权限,权限.ON对象类型对象名,对象名TO用户,用户 WITH GRANT OPTION;,收回权限REVOKE权限组|ALL PRIVILEGESON对象类型对象名,对象名.FROM用户名组|PUBLIC;,嵌入式SQL,嵌入式SQL预编译的方法,即由DBMS的预处理程序对源程序进行扫描,识别出SQL语句,把他们转换成主语言调用语句 程序中使用的任何表(基本表或视图)一般要用EXEC SQL DECLARE语句加以说明 区分SQL和主语言语句。在所有的SQL语句前面加上前缀EXEC SQL 使数据库的工作单元与程序工作单元之间能够通信。在SQL语句中使用这些主变量时,需在
14、主变量名前加冒号:做标志。使用游标解决SQL一次一集合的操作与主语言一次一记录操作的矛盾。,嵌入式SQL,游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。游标定义语句 EXEC SQL DECLARE游标名CURSORFOR子查询FOR UPDATE OF字段名1,.n;游标打开语句 EXEC SQL OPEN游标名;游标推进语句 EXEC SQL FETCH游标名INTO主变量组;游标关闭语句 EXEC SQL CLOSE 游标名;,动态SQL,含义:在SQL客户模块或嵌入式宿主程序的执行过程中动态生成SQL语句。动态SQL的语句类型 可变的SQL的语句条件可变的SQL语句数据库对象、条件都可变的SQL语句动态SQL语句的执行方式立即执行方式Execute immediate SQL语句变量先准备后执行,关系规范化,“不好”的关系模式 数据冗余更新异常插入异常删除异常函数依赖 部分函数依赖在关系模式R中,如果XY,并且对于X的任何一个真子集X,都有X Y,则称Y对X完全函数依赖,记作XfY。若XY,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作XpY。传递函数依赖 X、Y和Z是R的属性集合的任意子集,如果XY、YZ且Y X,Z-Y,Y-X,则称Z传递依赖于X,记作XtY,码的概念,候选码主
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1