资源预览内容
第1页 / 共100页
第2页 / 共100页
第3页 / 共100页
第4页 / 共100页
第5页 / 共100页
第6页 / 共100页
第7页 / 共100页
第8页 / 共100页
第9页 / 共100页
第10页 / 共100页
亲,该文档总共100页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
关系数据库语言SQL,SQL概况 数据查询 数据更新 数据定义 嵌入式SQL,SQL的特点,非过程性语言 统一的语法结构 是所有数据库的公共语言 语言简洁,易学易用,SQL的组成,数据定义语言 数据操纵语言 数据查询 数据更新 嵌入式SQL语言的使用规定 数据控制语言,SELECT语句的基本句法,关系代数中最常用的式子: A1,An(F(R1Rm) 这里R1、Rm为关系,F是公式,A1、An为属性。 SQL为此设计了SELECTFROMWHERE句型: SELECT A1,An FROM R1,Rm WHERE F,SELECT句型使用实例,例3-1 教学数据中有三个基本表(关系): S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER),SELECT句型使用实例,检索学习课程号为C2的学生学号与成绩。 SELECT S#,GRADE FROM SC WHERE C# = C2; 检索学习课程号为C2的学生学号与姓名。 这个查询由于要从基本表S和SC中检索数据,因此有多种写法。 第一种写法(联接查询): SELECT S.S#, SNAME FROM S,SC WHERE S.S# =SC.S# AND C# = C2;,SELECT句型使用实例,第二种写法(嵌套查询): SELECT S#,SNAME FROM S WHERE S# IN (SELECT S# FROM SC WHERE C# =C2); 第三种写法(使用存在量词的嵌套查询): SELECT S#,SNAME FROM S WHERE EXISTS(SELECT * FROM SC WHERE SC.S# =S.S# AND C# =C2);,SELECT句型使用实例,检索至少选修课程号为C2和C4的学生学号。 SELECT X.S# FROM SC AS X,SC AS Y WHERE X.S# =Y.S# AND X.C# =C2 AND Y.C# =C4; 检索不学C2课程的学生姓名与年龄 SELECT SNAME,AGE FROM S WHERE NOT EXISTS(SELECT * FROM SC WHERE SC.S#=S.S# AND C#=C2);,SELECT句型使用实例,检索所学课程包含学生S3所学课程的学号。(双重否定形式) SELECT DISTINCT S# FROM SC AS X /*在SC表中找一个学生(S)*/ WHERE NOT EXISTS /*不存在S3学的一门课(C)*/ (SELECT * FROM SC AS Y WHERE Y.S#=S3 AND NOT EXISTS /*该学生没学*/ (SELECT * FROM SC AS Z WHERE Z.S#=X.S# AND Z.C#=Y.C#);,聚合函数,SQL 提供了下列聚合函数: COUNT(*) 计算元组的个数 COUNT(列名) 对一列中的值计算个数 SUM(列名) 求某一列值的总和(此列的值必须是数值型) AVG(列名) 求某一列值的平均值(此列的值必须是数值型) MAX(列名) 求某一列值的最大值 MIN(列名) 求某一列值的最小值,例3-2 求男学生的总人数和平均年龄 SELECT COUNT(*),AVG(AGE) FROM S WHERE SEX=M 统计选修了课程的学生人数 SELECT COUNT(DISTINCT S#) FROM SC,SELECT语句完整的句法,SELECT 目标表的列名或列表达式序列 FROM 基本表名和(或)视图序列 WHERE 行条件表达式 GROUP BY 列名序列 HAVING 组条件表达式 ORDER BY 列名 ASC|DESC , ,例3-3 统计每一年龄选修课程的学生人数 SELECT AGE,COUNT(DISTINCT S.S#) FROM S,SC WHERE S.S#=SC.S# GROUP BY AGE;,2.求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。 SELECT AGE,COUNT(S#) FROM S WHERE SEX=M GROUP BY AGE HAVING COUNT(*) 50 ORDER BY 2,AGE DESC;,SELECT语句中的限定,SELECT子句中的规定 条件表达式中的算术比较操作 (BETWEENAND) 列和基本表的改名操作 (AS) 字符串的匹配操作 (,_ ) 集合的并、交、差操作 (UNION,INTERSECT,EXCEPT) 空值的比较操作 (IS NULL,IS NOT NULL) 集合的比较操作 (IN,NOT IN,SOME,ALL,EXISTS,NOT EXIST,UNIQUE,NOT UNIQUE) 导出表的使用,基本表的联接操作,联结类型 内联结 外联结 左外联结 右外联结 完全外联结 联结条件 NATURAL ON等值联接条件 USING(A1,A2,An),SQL3中的递归查询,SQL3实现递归查询的方法是以关系逻辑为基础 基本表称为外延数据库(EDB)关系,用规则定义的表称为内涵数据库(IDB)关系 WITH语句的简单句法如下: WITH R AS 在WITH语句中定义的关系只能用在语句内部,在其他地方不能使用,设课程之间有先修与后继的联系 关系模式如下: COURSE(C#,CNAME,PC#),W(x,y) COURSE(x,u,y) W(x,y) W(x,z) W(z,y),WITH RECURSIVE W(C#,PC#) AS (SELECT C#,PC# FROM COURSE) UNION (SELECT W1.C#,W2.PC# FROM W AS W1,W AS W2 WHERE W1.PC#=W2.C# ) SELECT * FROM W;,设临时关系W(C#,PC#),数据更新,数据插入 数据删除 数据修改,数据插入,单元组的插入 INSERT INTO 基本表名 (列名表) VALUES(元组值) 多元组的插入 INSERT INTO 基本表名 (列名表) VALUES (元组值),(元组值),(元组值) 查询结果的插入 INSERT INTO 基本表名 (列名表) SELECT查询语句 表的插入 INSERT INTO 基本表名1 (列名表) TABLE 基本表名2,1.INSERT INTO SC(S#,C#,GRADE) VALUES(S4,C6,90); 2. INSERT INTO SC VALUES(S4,C4,85), (S3,C6,90), (S7,C2,70); 3. INSERT INTO S_GRADE(S#, AVG_GRADE) SELECT S#,AVG(GRADE) FROM SC WHERE S# IN (SELECT S# FROM S WHERE SEX =M) GROUP AY S# HAVING AVG(GRADE)80; 4. INSERT INTO SC(S#,C#) TABLE SC4;,例3-16,数据删除,句法如下: DELETE FROM基本表名 WHERE 条件表达式 例:把C4课程中小于该课程平均成绩的成绩元组从基本表SC中删除 DELETE FROM SC WHERE C# =C4 AND GRADE(SELECT AVG(GRADE) FROM SC WHERE C# =C4);,数据修改,句法如下 : UPDATE 基本表名 SET 列名=值表达式,列名=值表达式 ROW =(元组) WHERE 条件表达式,例:当C4课的成绩低于该门课程平均成绩时,提高5% 。 UPDATE SC SET GRADE = GRADE * 1.05 WHERE C# = C4 AND GRADE(SELECT AVG(GRADE) FROM SC WHERE C# =C4);,数据定义,SQL模式 基本表 索引 视图的管理,SQL模式的管理,SQL模式的创建 CREATE SCHEMA模式名AUTHORIZATION用户名 SQL模式的撤消 DROP SCHEMA模式名CASCADERESTRICT CASCADE (级联式)方式:执行DROP语句时,把SQL模式及其下属的基本表、视图、索引等所有元素全部撤消 RESTRICT (约束式)方式:执行DROP语句时,只有当SQL模式中没有任何下属元素时,才能撤消SQL模式,否则拒绝执行DROP语句,基本数据类型,数值型 字符串型 位串型 时间型 允许用户使用“CREATE DOMAIN”语句定义新的域,基本表的管理,基本表的创建 基本表结构的修改 基本表的撤消,基本表的创建,句法如下 CREATE TABLE 基本表名 (列名 类型, 完整性约束, ) 例: CREATE TABLE S (S# CHAR (4) NOT NULL, SNAME CHAR (8) NOT NULL, AGE CHAR (1), SEX CHAR (1), PRIMARY KEY (S#);,基本表结构的修改,增加新的列 ALTER TABLE ADD 删除原有的列 ALTER TABLE DROP CASCADERESTRICT 修改原有列的类型、宽度 ALTER TABLE MODIFY ,基本表的撤消,句法如下: DROP TABLE CASCADERESTRICT,索引的管理,索引的创建 CREATE UNIQUE INDEX ON (列名表) 索引的撤消 DROP INDEX ,视图的管理,视图的创建 CREATE VIEW (列表名) AS 视图的撤消 DROP VIEW 视图名 对视图的更新操作,视图的更新操作,SQL的运行环境,SQL语言的两种方式 交互式SQL 嵌入式SQL 嵌入式SQL的两种处理方式 扩充宿主语言的编译程序,使之能处理SQL语句 预处理方式 (多数) SQL和宿主语言的接口,嵌入式SQL的使用规定,在程序中要区分SQL语句与宿主语言语句 EXEC SQLSQL语句END_EXEC 允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量) EXEC SQL BEGIN DECLARE SECTION; char sno 5,name 9; char SQL_STATE 6; EXEC SQL END DECLARE SECTION; SQL的集合处理方式与宿主语言单记录处理方式之间的协调,嵌入式SQL的使用规定(续),游标定义语句 EXEC SQL DECLARE CURSOR FOR END_EXEC 游标打开语句 EXEC SQL OPEN END_EXEC 游标推进语句 EXEC SQL FETCH FROM INTO END_EXEC 游标关闭语句 EXEC SQL CLOSE END_EXEC,嵌入式SQL的使用技术,不涉及游标的SQL DML语句 涉及游标的SQL DML语句 卷游标的定义和推进,不涉及游标的SQL DML语句,1.EXEC SQL SELECT sname,age,sex INTO :sn,:sa,:ss FROM s WHERE s# =:givensno; 2.EXEC SQL INSERT INTO s(s#,sname,age) VALUES(:givensno,:sn,:sa); 3.EXEC SQL DELETE FROM SC WHERE
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号