资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第五章关系数据库标准语言 SQLSQL StructuredQueryLanguage 是1974年由Boyce和Chamberlin提出的 在IBM公司SanJoseResearchLaboratory研制的SystemR上实现了这种语言 由于它功能丰富 使用方式灵活 语言简洁易学等突出优点 在计算机工业界和计算机用户中倍受欢迎并深深扎根 1986年10月 美国国家标准局 ANSI 的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准 同年公布了标准SQL文本 此后不久 国际标准化组织 ISO 也作出了同样的决定 本章介绍SQL语言 并进一步讨论关系数据库的基本概念 SQL标准文本和实施的SQL语言相比 后者常常作了许多必要的扩充 因此我们选用IBM公司在DB2上的SQL语言 它基本上和标准SQL一致 而在对关系模型的符合程度上比标准SQL更好 5 1SQL概貌及其特点SQL StructuredQueryLanguage 的英文名称是结构查询语言 实际上它的功能包括查询 Query 操纵 Manipulation 定义 Definition 和控制 Control 四个方面 是一个综合的 通用的 功能极强的关系数据库语言 一 SQL的主要特点 1 一体化的特点2 两种使用方式 统一的语法结构3 高度非过程化4 语言简洁 易学易用 1 数据库查询SELECT 2 数据定义CREATE DROP 3 数据操纵INSERT UPDATE DELETE 5 数据控制GRANT REVOKE 二 SQL语言支持关系数据库三级模式结构 图5 1 SQL ViewV1 ViewV2 BasetableB1 BasetableB2 BasetableB3 BasetableB4 StoredfileS1 StoredfileS2 StoredfileS3 StoredfileS4 外模式 模式 内模式 用户 图5 1 5 2SQL数据定义功能SQL的数据定义功能包括三部分 定义基本表 定义视图和定义索引 他们是 CREATETABLECREATEVIEWCREATEINDEXDROPTABLEDROPVIEWDROPINDEXALTERTABLE 5 2 1基本表定义和修改一 定义基本表的语句1 格式 CREATETABLE表名 列名1类型 NOTNULL 列名1类型 NOTNULL 其它参数 2 几点说明 1 任选项 其它参数 是与物理存储有关的参数 随具体系统而异 2 DB2支持的数据类型 INTEGER全字长 31bits 的二进制整数 SMALLINT半字长 15bits 的二进制整数 DECIMAL p q 压缩十进制数 共p位 小数点后有q位 FLOAT双字长的浮点数 CHAR n 长度为n的定长字符串 VARCHAR n 变长字符串 最大长度为n 3 SQL支持空值的概念 3 举例 CHEATETABLES S CHAR 3 NOTNULL SNCHAR 15 SDCHAR 15 SASMALLINT 二 修改基本表定义的语句1 格式 ALTERTABLE表名ADD列名类型 2 举例ALTERTABLESADDSEXSMALLINT 三 删除基本表的语句1 格式 DROPTABLE表名 2 举例ALTERTABLES 5 2 2索引的建立和删除通常索引的建立和删除由DBA DadaBaseAdministrator 或表的主人负责 一 建立索引的语句1 格式CREATE UNIQUE INDEX索引名ON基本表名 列名 次序 列名 次序 其它参数 2 举例 CREATEUNIQUEINDEXXSNOONS S CREATEUNIQUEINDEXXCNOONC C CREATEUNIQUEINDEXXSCONSC S ASC C DESC 二 删除索引的语句1 格式DROPINDEX索引名 2 举例DROPINDEXXSNO 5 2 3小结在关系数据库中允许DBA随时使用SQL数据定义语句来定义基本表 索引和视图 系统十分方便灵活 在非关系系统中 数据库的模式一经建立再要加入新的记录型或修改老的记录型是十分费事的工作 而象DB2这样的SQL关系数据库系统 增删改基本表 索引和视图都不必停止系统的其它处理 不会影响其它用户对数据库的正常使用 5 3SQL数据操纵功能SQL的数据操纵功能包括SELECT INSERT DELETE 和UPDATE四个语句 即检索和更新 包括增 删 改 两部分功能 5 3 1SQL查询语句1 查询语句的格式SELECT目表列FROM基本表 或视图 WHERE条件表达式 GROUPBY列名1 HAVING内部函数表达式 ORDERBY列名2 ASCDESC 2 功能 5 3 1 1简单查询例1 求数学系学生的学号 姓名 SELECTS SNFROMSWHERESD MA 例2 求选修了课程的学生的学号 SELECTDISTINCTS FROMSC 例3 求全体学生的详细信息 SELECT FROMS 例4 查询经过计算的值 求学生学号和出生年份 SELECTS 2000 SAFROMS 例5 要求排序的查询 求选修C1课程的学生的学号和得分 结果按分数降序排列 SELECTS GFROMSCWHEREC C1 ORDERBYGDESC 例6 使用BETWEEN的查询 求年龄在20岁与22岁之间 包括20岁和22岁 的学生学号和年龄 SELECTS SAFROMSWHERESABETWEEN20AND22 例7 使用IN的查询 求在下列各系的学生 MA 数学系 CS 计算机科学系 SELECT FROMSWHERESDIN MA CS 谓词IN实际上是一系列谓词 OR 的缩写 等价的查询为 SELECT FROMSWHERESD MA ORSD CS 求不是数学系 计算机科学系的学生 SELECT FROMSWHERESDNOTIN MA CS 例8 使用LIKE的查询 求姓名是以字母D打头的学生 SELECT FROMSWHERESNLIKE D LIKE谓词的一般形式为 列名LIKE字符串常数 说明 1 列名的类型必须是字符串或变长字符串 2 字符串常数中字符定含义 字符 表示任意的单个字符 字符 表示任意字符串 长度可以为零 所有其它字符只代表自己 例8 涉及空值NULL的查询 求缺少学习成绩的学生学号合课程号 SELECTS C FROMSCWHEREGISNULL 涉及空值的谓词的一般形式是 列名IS NOT NULL 注意 不能写成 列名 NULL或列名 NULL 5 3 1 2连接查询定义 若查询涉及两个以上的表 则称之为连接查询 例10 求学生以及他选修课程的课程号码和成绩 SELECTS SC FROMS SCWHERES S SC S 几点说明 1 连接字段的类型必须是可比的 但不必相同 多数是相同的 2 连接谓词中的比较符可以是 六种 3 等值连接与自然连接的概念 例11 自然连接查询 SELECTS S S SN S SD S SA SC C SC GFROMS SCWHERES S SC S 若字段名在各表中是唯一的 可以把字段名前的表名去掉 否则必须加上表名作为前缀 以免引起混淆 例11可写成 SELECTS S SN SD SA C GFROMS SCWHERES S SC S 例12 带有其他条件的连接查询 求选修C1课程且成绩为B以上的学生及成绩 SELECTS S SN SD SA GFROMS SCWHERES S SC S ANDSC C C1 AND SC G A ORSC G B 例13 求每一门课程的间接先行课 即先行课的先行课 SELECTFIRST C SECOND PC FROMCFIRSTCSECONDWHEREFIRST PC SECOND C 此例中的FIRST和SECOND为引入的别名 例14 求选修了课程名为 J 的学生的学号和姓名 SELECTS SNFROMS SCWHERES INSELECTS FROMSCWHEREC INSELECTC FROMCWHERECN J 5 3 1 3嵌套查询嵌套查询亦称为子查询 嵌套查询是指一个SELECT FROM WHERE查询块嵌入另一个查询块之中 SQL中允许多层嵌套 例15 使用存在量词EXISTS和NOTEXISTS的嵌套查询 求选学了C2课程的学生姓名 SELECTSNFROMSWHEREEXISTS SELECT FROMSCWHERES SC S ANDC C2 例16 使用NOTEXISTS的嵌套查询 求不选修C3课程的学生姓名 SELECTSNFROMSWHERENOTEXISTS SELECT FROMSCWHERES SC S ANDC C3 例17 求选修了全部课程的学生姓名 SELECTSNFROMSWHERENOTEXISTS SELECT FROMCWHERENOTEXISTS SELECT FROMSCWHERES S S ANDC C C 例19 使用UNION的查询 求计算机科学系的学生以及年龄小于18岁的学生 SELECT FROMSWHERESD CS SELECT FROMSWHERESA 18 5 3 1 4库函数SQL提供了6种库函数 其功能如下 COUNT对一列中的值计算个数COUNT 计算记录个数SUM求某一列值的总和AVG求某一列值的平均值MAX求某一列值中的最大值MIN求某一列值中的最小值 例20 在SELECT子句中使用库函数 1 求学生总人数 SELECTCOUNT FROMS 2 求选修了课程的学生人数 SELECTCOUNT DISTINCTS FROMSC 3 求计算机科学系学生的平均年龄 SELECTAVG SA FROMSWHERESD CS 例21 GROUPBY的使用求课程号及选修该课程的学生人数 SELECTC COUNT S FROMSCGROUPBYC 例22 HAVING的使用求选修课程超过3门的学生学号 SELECTS FROMSCGROUPBYS HAVINGCOUNT 3 5 3 2SQL更新语句SQL更新语句包括修改 删除和插入三类语句 一 修改 UPDATE 也称为更新 1 语句的一般格式 UPDATE表名SET字段 表达式 字段 表达式 WHERE谓词 2 功能3 举例 例23 单记录修改 把学生S1的姓名改为WANGPING UPDATESSETSN WANGPING WHERES S1 例24多记录修改 把所有学生的年龄加1 UPDATESSETSA SA 1 例25具有子查询的更新 把数学系全体学生的成绩置零 UPDATESSETG 0WHERE MA SELECTSDFROMSWHERES S SC S 例26 多个表的更新 UPDATESSETS S9 WHERES S2 UPDATESCSETS S9 WHERES S2 二 删除语句 DELETE 1 语句的一般格式 DELETEFROM表名 WHERE谓词 2 功能3 举例 例27 单记录删除 把学生S9删除 DELETEFROMSWHERES S9 执行删除操作也可能产生破坏完整性的情况 例28多记录删除 删除所有的学生选课记录 DELETEFROMSC 例29 带有子查询的删除 删除计算机科学系全体学生的选课记录 DELETEFROMSCWHERE CS SELECTSDFROMSWHERES S SC S 三 插入语句 INSERT 1 语句的一般格式 INSERTINTO表名 字段名 字段名 VALUES 常量 常量 或INSERTINTO表名 字段名 字段名 子查询 2 功能3 举例 例30单记录插入 把一个新学生 S10 学号 ZhangMing 姓名 IS 信息系 18 年龄 插入表中 INSERTINTOSVALUES S10 ZhangMing IS 18 例31 插入一个选课记录 S15 C10
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号