关系数据库标准语言SQL-POWERPOINT_第1页
关系数据库标准语言SQL-POWERPOINT_第2页
关系数据库标准语言SQL-POWERPOINT_第3页
关系数据库标准语言SQL-POWERPOINT_第4页
关系数据库标准语言SQL-POWERPOINT_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章关系数据库标准语言SQLSQL StructuredQueryLanguage 是1974年由Boyce和Chamberlin提出的 在IBM公司SanJoseResearchLaboratory研制的SystemR上实现了这种语言 由于它功能丰富 使用方式灵活 语言简洁易学等突出优点 在计算机工业界和计算机用户中倍受欢迎并深深扎根 1986年10月 美国国家标准局 ANSI 的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准 同年公布了标准SQL文本 此后不久 国际标准化组织 ISO 也作出了同样的决定 本章介绍SQL语言 并进一步讨论关系数据库的基本概念 SQL标准文本和实施的SQL语言相比 后者常常作了许多必要的扩充 因此我们选用IBM公司在DB2上的SQL语言 它基本上和标准SQL一致 而在对关系模型的符合程度上比标准SQL更好 3 1SQL概述SQL StructuredQueryLanguage 的英文名称是结构查询语言 实际上它的功能包括查询 Query 操纵 Manipulation 定义 Definition 和控制 Control 四个方面 是一个综合的 通用的 功能极强的关系数据库语言 3 1 1SQL的主要特点 1 综合统一2 高度非过程化3 面向集合的操作方式4 两种使用方式 统一的语法结构5 语言简洁 易学易用 1 数据库查询SELECT 2 数据定义CREATE DROP 3 数据操纵INSERT UPDATE DELETE 5 数据控制GRANT REVOKE 3 1 2SQL语言的基本概念 3 2SQL数据定义SQL的数据定义功能包括三部分 定义基本表 定义视图和定义索引 他们是 CREATETABLECREATEVIEWCREATEINDEXDROPTABLEDROPVIEWDROPINDEXALTERTABLE 3 2 1定义 删除和修改基本表一 定义基本表的语句1 格式 CREATETABLE 列级完整性约束条件 列级完整性约束条件 2 举例 例1 P88CREATETABLEStudent SnoCHAR 5 NOTNULLUNIQUE SnameCHAR 20 UNIQUE SsexCHAR 1 SageINTSdeptCHAR 15 二 修改基本表1 格式 ALTERTABLE ADD 完整性约束 DROP MODIFY 2 举例例2 ALTERTABLEStudentADDScomedate 三 删除基本表1 格式 DROPTABLE 2 举例例5 删除Student表ALTERTABLEStudent 例3 ALTERTABLEStudentMODIFYSageSMALLINT 例4 ALTERTABLEStudentDROPUNIQUE Sname 5 2 2建立与删除索引通常索引的建立和删除由DBA DadaBaseAdministrator 或表的主人负责 一 建立索引1 格式CREATE UNIQUE CLUSTER INDEXON 次序 2 举例 例6 CREATEUNIQUEINDEXStusnoONStudent Sno CREATEUNIQUEINDEXCoucnoONCouse Cno CREATEUNIQUEINDEXSCnoONSC SnoASC CnoDESC 二 删除索引1 格式DROPINDEX 2 举例例7 删除Student表的Stusname索引 DROPINDEXStusname 小结在关系数据库中允许DBA随时使用SQL数据定义语句来定义基本表 索引和视图 系统十分方便灵活 在非关系系统中 数据库的模式一经建立再要加入新的记录型或修改老的记录型是十分费事的工作 而象DB2这样的SQL关系数据库系统 增删改基本表 索引和视图都不必停止系统的其它处理 不会影响其它用户对数据库的正常使用 3 3查询数据库查询是数据库的核心操作 SQL语句提供了SELECT语句进行数据库的查询 查询语句的一般格式SELECT ALL DISTINCT FROM WHERE GROUPBY HAVING ORDERBY ASC DESC 3 3 1单表查询一 选择表中的若干列1 查询指定列例1 查询全体学生的学号与姓名 SELECTSno SnameFROMStudent 例2 查询全体学生的姓名 学号 所在系 SELECTSname Sno SdeptFROMStudent 2 查询全部列例3 查询全体学生的详细信息 SELECT FROMStudent 等价于 SELECTSno Sname Ssex Sage SdeptFROMStudent 3 查询经过计算的值 例4 查询全体学生学号和出生年份 SELECTSno 2003 SageFROMStudent 二 选择表中的若干元组1 消除取值重复的行例6 查询选修了课程的学生的学号 SELECTSnoFROMSC 指定DISTINCT短语 可去掉结果表中的重复行 SELECTDISTINCTSnoFROMSC 2 查询满足条件的元组查询满足指定条件的元组可以通过WHERE子句实现 1 比较大小例7 查询计算机系全体学生的名单 SELECTSnameFROMStudentWHERESdept CS 例8 查询所有年龄在20岁以下的学生的姓名及年龄 SELECTSname SageFROMStudentWHERESage 20 SELECTSname Sage或FROMStudentWHERENOTSage 20 2 确定范围例10 查询年龄在20 23岁之间 包括20岁和23岁 的学生的姓名 系别和年龄 SELECTSname Sdept SageFROMStudentWHERESageBETWEEN20AND23 例11 查询年龄不在20 23岁之间的学生的姓名 系别和年龄 SELECTSname Sdept SageFROMStudentWHERESageNOTBETWEEN20AND23 3 确定集合谓词IN可以用来查找属性值属于指定集合的元组 例12 查询信息系 IS 数学系 MA 计算机科学系 CS 学生的姓名和性别 SELECTSname SsexFROMStudentWHERESdeptIN IS MA CS 谓词IN实际上是一系列谓词 OR 的缩写 等价的WHERE子句为 WHERESdept IS ORSdept MA ORSdept CS 例13 查询既不是信息系 IS 数学系 MA 也不是计算机科学系 CS 的学生的姓名和性别 SELECTSname SsexFROMStudentWHERESdeptNOTIN IS MA CS 4 字符匹配LIKE谓词的一般形式为 NOT LIKE ESCAPE 字符串中通配符的含义 字符 表示任意的单个字符 字符 表示任意字符串 长度可以为零 例14 查询学号为95001的学生的详细情况 SELECT FROMStudentWHERESnoLIKE 95001 等价的WHERE子句为 WHERESno 95001 例15 查询所有姓刘的学生的姓名 学号和性别 SELECTSname Sno SsexFROMStudentWHERESnameLIKE 刘 例16 查询姓 欧阳 且全名为三个汉字的学生的姓名 SELECTSnameFROMStudentWHERESnameLIKE 欧阳 例19 查询DB Design课程的课程号和学分 SELECTCno CcreditFROMCourseWHERECnameLIKE DB Design ESCAPE 5 涉及空值的查询 例21查询缺少学习成绩的学生的学号和课程号 SELECTSno CnoFROMSCWHEREGradeISNULL 例22查询所有有成绩的学生的学号和课程号 SELECTSno CnoFROMSCWHEREGradeISNOTNULL 6 多重条件查询用逻辑运算符AND和OR来联结多个查询条件 例23查询计算机科学系年龄在20岁以下的学生的姓名及年龄 SELECTSname SageFROMStudentWHERESdept CS ANDSage 20 三 对查询结果排序可以用ORDERBY字句对查询结果按照一个或多个属性列的升序 ASC 或降序 DESC 排列 缺省值为升序 例24查询选修了3号课程的学生的学号和成绩 查询结果按分数的降序排序 SELECTSno GradeFROMSCWHERECno 3 ORDERBYSdept SageDESC 例25查询全体学生的详细信息 查询结果按所在系的系号升序排列 同一系中的学生按年龄降序排序 SELECT FROMStudent ORDERBYSdept SageDESC 四 使用集函数 库函数 SQL提供了6种库函数 其功能如下 COUNT DISTINCT ALL 统计元组个数COUNT DISTINCT ALL 统计一列中值的个数SUM DISTINCT ALL 计算某一列值的总和AVG DISTINCT ALL 计算某一列值的平均值MAX DISTINCT ALL 求某一列值中的最大值MIN DISTINCT ALL 求某一列值中的最小值 例26 查询学生总人数 SELECTCOUNT FROMStudent 例27查询选修了课程的学生人数 SELECTCOUNT DISTINCTSno FROMSC 例28计算1号课程的学生的平均成绩 SELECTAVG Grade FROMSCWHERECno 1 五 对查询结果分组GROUPBY子句将查询结果表按某列或多列值分组 值相等的为一组 例30求各课程号及选修该课程的学生人数 SELECTCno COUNT Sno FROMSCGROUPBYCno 可以使用HAVING短语指定筛选条件 例31查询选修了3门以上课程的学生学号 SELECTSnoFROMSCGROUPBYSnoHAVINGCOUNT 3 3 3 2连接查询定义 若查询涉及两个以上的表 则称之为连接查询 一 等值与非等值连接查询例32 查询每个学生以及其选修课程的情况 SELECTStudent SC FROMStudent SCWHEREStudent Sno SC Sno 例33 用自然连接完成例32的查询 SELECTStudent Sno Sname Ssex Sage Sdept Cno GradeFROMStudent SCWHEREStudent Sno SC Sno 二 自身连接例34查询每一门课程的间接先行课 即先行课的先行课 此例中的FIRST和SECOND为引入的别名 SELECTFIRST Cno SECOND CpnoFROMCourseFIRST CourseSECONDWHEREFIRST Cpno SECOND Cno 三 外连接 如果我们想以Student表为主体列出每个学生的基本情况及其选课情况 若某个学生没有选课 只输出其基本情况信息 其选课信息为空值即可 这时就需要外连接 SELECTStudent Sno Sname Ssex Sage Sdept Cno GradeFROMStudent SCWHEREStudent Sno SC Sno 四 复合条件连接 例35查询选修2号课程且成绩在90分以上的学生 SELECTStudent Sno SnameFROMStudent SCWHEREStudent Sno SC SnoANDSC Cn 2 ANDSC Grade 90 例如 SELECTSnameFROMStudentWHERESnoINSELECTSnoFROMSCWHERECno 2 3 3 3嵌套查询嵌套查询亦称为子查询 嵌套查询是指一个SELECT FROM WHERE查询块嵌入另一个查询块之中 SQL中允许多层嵌套 一 带有IN谓词的查询 例37查询与 刘晨 在同一个系学习的学生 确定 刘晨 所在的系名 SELECTSdeptFROMStudentWHERESname 刘晨 查询所有在IS系学习的学生 SELECTSno Sname SdeptFROMStudentWHERESdept IS 将第1步查询嵌入到第2步查询的条件中 构造嵌套查询 SQL语句如下 SELECTSno Sname SdeptFROMStudentWHERESdeptIN SELECTSdeptFROMStudentWHERESname 刘晨 SELECTSno SnameFROMStudentWHERESnoIN SELECTSnoFROMSCWHERECnoIN SELECTCnoFROMCourseWHERECname 信息系统 例38 查询选修了课程名为 信息系统 的学生的学号和姓名 上述查询可用连接查询实现 SELECTSno SnameFROMStudent SC CourseWHEREStudent Sno SC SnoANDSC Cno Course CnoANDCourse Cname 信息系统 二 带有比较运算符的子查询当确切知道内层查询返回的是单值时 可以用比较运算符 用比较运算符 代替IN改写例37 SELECTSno Sname SdeptFROMStudentWHERESdept SELECTSdeptFROMStudentWHERESname 刘晨 三 带有ANY或ALL谓词的子查询子查询返回的是单值时 可以用比较运算符 而使用ANY或ALL谓词时则必须同时使用比较运算符 例39查询其他系中比信息系某一学生年龄小的学生的姓名和年龄 SELECTSname SageFROMStudentWHERESage IS 四 代有EXISTS的嵌套查询 例41查询所有选修了1号课程的学生姓名 SELECTSnameFROMStudentWHEREEXISTS SELECT FROMSCWHERESno Student SnoANDCno 1 例42查询没有选修1号课程的学生姓名 SELECTSnameFROMStudentWHERENOTEXISTS SELECT FROMSCWHERESno Student SnoANDCno 1 例43 查询选修了全部课程的学生姓名 SELECTSnameFROMStudentWHERENOTEXISTS SELECT FROMCourseWHERENOTEXISTS SELECT FROMSCWHERESno Student SnoANDCno Course Cno 例45查询计算机科学系的学生以及年不大于19岁的学生 SELECT FROMStudentWHERESdept CS UNIONSELECT FROMStudentWHERESage 19 3 3 4集合查询 例46查询选修了1号课程或选修了2号课程的学生 SELECTSnoFROMSCWHERECno 1 UNIONSELECTSnoFROMSCWHERECno 2 例48查询选修了1号课程的学生集合与选修了2号课程的学生集合的交集 SELECT FROMStudentWHERECno 1 ANDSnoIN SELECTSnoFROMSCWHERECno 2 3 4 1插入数据一 插入单个元组语句的一般格式 INSERTINTO表名 VALUES 例1将一个新学生 95020 学号 陈东 姓名 男 性别 IS 信息系 18 年龄 插入到Student表中 INSERTINTOStudentVALUES 95020 陈东 男 IS 18 3 4数据更新SQL更新语句包括修改 删除和插入三类语句 例2 插入一个选课记录 95020 1 INSERTINTOSC Sno Cno VALUES 95020 1 二 插入子查询结果语句的一般格式 INSERTINTO表名 子查询 CREATETABELDeptage SdeptCHAR 15 AvgageSMALLINT INSERTINTODeptage Sdept Avgage SELECTSdept AVG SA FROMStudentGROUPBYSdept 例3 对每个系 求学生的平均年龄 并把结果插入数据库中 一 修改某一个元组的值 例4 把学生95001的姓名改为 王平 UPDATEStudentSETSname 王平 WHERESno 95001 3 4 2修改数据语句的一般格式 UPDATESET WHERE 二 修改多个元组的值例5 将所有学生的年龄增加1岁 UPDATEStudentSETSage Sage 1 三 带子查询的修改语句例6 将计算机科学系全体学生的成绩置零 UPDATESCSETGrade 0WHERE CS SELECTSdeptFROMStudentWHEREStudent Sno SC Sno 3 4 3删除数据删除语句的一般格式 DELETEFROM WHERE 一 删除某一个元组的值例7 删除学号为95019的学生记录 DELETEFROMStudentWHERESno 95019 执行删除操作也可能产生破坏完整性的情况 二 删除多个元组的值例8删除所有的学生选课记录 DELETEFROMSC 三 带有子查询的删除语句例9删除计算机科学系全体学生的选课记录 DELETEFROMSCWHERE CS SELECTSdeptFROMStudentWHEREStudent Sno SC Sno 四 更新操作与数据库的一致性增删改操作一次只能对一个表操作 例如 删除学号为95019的学生记录后 相应该生的选课记录也应同时删除 而这只能通过两条删除语句进行 DELETEFROMStudentWHERESno 95019 DELETEFROMSCWHERESno 95019 3 5视图视图 View 是从一个或几个基本表 或视图 导出的表 3 5 1视图的定义一 建立视图SQL建立视图的语句格式 CREATEVIEW AS子查询 WITHCHECKOPTION 例1 建立信息系的学生视图 CREATEVIEWIS StudentASSELECTSno Sname SageFROMStudentWHERESdept IS 例2 建立信息系的学生视图 并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 CREATEVIEWIS StudentASSELECTSno Sname SageFROMStudentWHERESdept IS WITHCHECKOPTION 例3 建立信息系选修了1号课程的学生视图 CREATEVIEWIS S1 Sno Sname Grade ASSELECTStudent Sno Sname GradeFROMStudent SCWHERESdept IS ANDStudent Sno SC SnoANDSC Cno 1 例4建立信息系选修了1号课程且成绩在90分及以上的学生视图 CREATEVIEWIS S2ASSELECTSno Sname GradeFROMIS S1WHEREGrade 90 例5 定义一个反映学生出生年份的视图 CREATEVIEWBT S Sno Sname Sbirth ASSELECTSno Sname 2003 SageFROMStudent 例6 把学生的学号及它的平均成绩定义为一个视图 CREATEVIEWS G Sno Gavg ASSELECTSno AVG Grade FROMSCGROUPBYSno 二 删除视图语句格式为 DROPVIEW 例8删除视图IS S1DROPVIEWIS S1 3 5 2查询视图视图定义后 用户可以如同基本表那样对视图查询 例1在信息系学生的视图中找出年龄小于20岁的学生 SELECTSno SageFROMIS StudentWHERESage 20 SELECTSno SageFROMStudentWHERESdept IS ANDSage 20 系统执行此查询时首先把它转换成等价的对基本表的查询 然后执行修改了的查询 本例的修正后的查询语句为 例2查询信息系选修了1号课程的学生 SELECTSno SnameFROMIS Student SCWHEREIS Student Sno SC SnoANDSC Cno 1 例3在S G视图中查询平均成绩在90分以上的学生的学号和平均成绩 相应的语句为 SELECT FROMS GWHEREGave 90 S G视图定义为 SELECTSno AVG Grade FROMSCGROUPBYSno 将上面查询语句与子查询结合后 形成下列查询语句 SELECTSno AVG Grade FROMSCWHEREAVG Grade 90GROUPBYSno 正确的查询语句为 SELECTSno AVG Grade FROMSCGROUPBYSnoHAVINGAVG Grade 90 3 5 3视图的更新对视图的更新最终要转换成对基本表的更新 例1将信息系学生视图IS Student中学号为95002的学生姓名改为 刘辰 UPDATEIS StudentSETSname 刘辰 WHERESno 95002 将转换成对基本表Student的更新 UPDATEStudentSETSname 刘辰 WHERESno 95002 ANDSdept IS 例2向信息系学生视图IS Student中插入一个新的学生记录 其中学号为95029 姓名为赵新 年龄为20岁 INSERTINTOIS StudentVALUES 95029 赵新 20 转换成对基本表的插入INSERTINTOStudent Sno Sname Sage Sdept VALUES 95029 赵新 20 IS 例3删除信息系学生视图IS Student中学号为95029的记录 DELETEFROMIS StudentWHERESno 95029 视图分类 1 行列子集视图 可更新的视图 2 理论上可更新的视图 3 不可更新的视图 在BD2中 只有从单个基本表导出的视图才允许对它进行更新操作 并且具有以下限制 P136 137共7条 不可更新的视图与不允许更新的视图的概念 在关系数据库中 并非所有的视图都是可更新的 如 UPDATES GSETGavge 90WHERESno 95001 3 5 4视图的作用1 视图能够简化用户的操作 关系数据库中 数据库的重构造是不可避免的 最常见的情况是把一个表 垂直 地分为两个以上的表 例如把学生关系Student Sno Sname Ssex Sage Sdept 分为 SX Sno Sname Sage SY Sno Ssex Sdept 这时原表Student是SX SY的自然连接的结果 因此可以建立一个视图Student CREATEVIEWStudent Sno Sname Ssex Sage Sdept ASSELECTSX Sno SX Sname SY Ssex SX Sage SY SdeptFROMSX SYWHERESX Sno SY Sno 4 视图能对机密数据提供自动的安全保护 2 视图使用户能以多种角度看待同一数据 3 视图对重构数据库提供了一定程度的逻辑独立性 3 6数据控制 授权语句的一般格式为 GRANT ON TO WITHGRANTOPTION 对不同类型的操作对象可有不同的操作权力 见表3 4 任选项WITHGRANTOPTION的作用是使获得某种权力的用户可以把权力再授予别的用户 3 6 1授权 例1 把查询Student表的权XJ6授予用户U1 GRANTSELECTONTABLEStudentTOU1 例4 把修改学生学号和查询Student表的权限授给用户U4 GRANTUPDATE Sno SELECTONTABLEStudentTOU4 例2 把对表Student和Course的全部操作权限授予U2和U3 GRANTALLPRIVILIGESONTABLEStudent CourseTOU2 U3 例3 把对表SC的查询权限授予所有用户 GRANTSELECTONTABLESCTOPUBLIC 例6 DBA把在数据库S C中建立表的权限授予用户U8 GRANTCREATETABONDATABASES CTOU8 例5把对表SC的INSERT权限授予U5用户 并允许将此权限再授予其他用户 GRANTINSERTONTABLESCTOU5WITHGRANTOPTION 3 6 2回收权限授予的权力可以用REVOKE语句收回 格式为 REVOKE ON FROM 例7 把用户U4修改学生学号的权力收回 REVOKEUPDATE Sno ONTABLEStudenyFROMU4 例8 收回所有用户对表SC的查询权限 REVOKESELECTONTABLEStudentFROMPUBLIC 例9 把用户U5对表SC的INSERT权限收回 REVOKEINSERTONTABLESCFROMU5 3 7嵌入式SQL 3 7 1嵌入式SQL的一般形式在嵌入式SQL中 为了能够区分SQL语句与主语言语句 所有SQL语句都必须加前缀EXECSQL SQL语句的结束标志则随主语言的不同而不同 例如 在PL 1和C中以分号 结束 EXECSQL 在COBOL中以END EXEC结束 EXECSQLEND EXEC 例如一条交互式的SQL语句 DROPTABLEStudent 嵌入到C程序中 应写作 EXECSQLDROPTABLEStudent 课间休息 注意时间 3 7 2嵌入式SQL语句与主语言之间的通信 一 SQL通信区SQL通信区SQLCA 二 主变量1 输入主变量2 输出主变量3 指示变量 所有主变量和指示变量必须在SQL语句BEGINDECLARESECYION与ENDDECLARESECYION之间进行说明 三 游标 四 程序实例 EXECSQLINCLUDESQLCA EXECSQLBEGINDECLARESECTION CHARSno 5 CHARCno 3 INTGrade EXECSQLENDDECLARESECTION main EXECSQLDECLAREC1CURSORFORSELECTSno Cno GradeFROMSC EXECSQLOPENC1 FOR EXECSQLFETCHC1INTO Sno Cno Grade if sqlca sqlcodeSUCCESS break printf Sno s Cno s Grade d Sno Cno Grade EXECAQLCLOSEC1 3 7 3不用游标的SQL语句 一 说明性语句EXECSQLBEGINDECLARESECYIONEXECSQLENDDECLARESECYION 二 数据定义语句例1建立一个 学生 表Student EXEXSQLCREATETABLEStudent SnoCHAR 5 NOTNULLUNIQUE SnameCHAR 20 SsexCHAR 1 SageINT SdeptCHAR 15 三 数据控制语句例2把查询Student表的权限授予用户U1 EXEXSQLGRANTSELECTONTABLEStudentTOU1 四 查询结果为单记录的SELECT语句一般格式为 EXECSQLSELECT ALL DISTINCT INTO FROM WHERE GROUPBY HAVING ORDERBY ASC DESC 使用该语句需要注意以下四点 例3 根据学生号码查询学生信息 假设已将要查询的学生的学号赋给了主变量Givensno EXECSQLSELECTSno Sname Ssex Sage SdeptINTO Hno Hname Hsex Hage HdeptFROMStudentWHERESno Givensno 五 非CURRENT形式的UPDATE语句例5将全体学生1号课程的考试成绩增加若干分 假设增加的分数已赋给了主变量Raise EXECSQLUPDATESCSETGrade Grade RaiseWHERECno 1 例7 把计算机科学系全体学生的年龄置NULL值 SAID 1 EXECSQLUPDATEStudentSETSage Raise SageidWHERESdpt CS 它等价于 EXECSQLUPDATEStudentSETSage NULLWHERESdpt CS 六 非CURRENT形式的DELETE语句例8 某个学生退学了 现要将有关他的所有选课记录删除掉 假设该学生的姓名已赋给主变量Stdname EXECSQLDELETEFROMSCWHERESno SELECTSnoFROMStudentWHERESname Stdname 另一种等价实现方法为 EXECSQLDELETEFROMSCWHERE Stdname SELECTSnameFROMStudentWHEREStudent Sno SC Sno 七 INSERT语句例9 某个学生选修了某门课程 将有关记录插入SC表中 假设学生学号已赋给主变量stdno 课程号已赋主变量couno gradeid 1 EXECSQLINSERTINTOSC Sno Cno Grade VALUES stdno couno gr gradeid 3 7 4使用游标的SQL语句必须使用游标SQL语句有 查询结果为多条记录的SELECT语句 CURRENT形式的UPDATE语句 CURRENT形式的DELETE语句 一 查询结果为多条记录的SELECT语句使用游标的步骤 1 说明游标EXECSQLDECLARECURSORFOR 2 打开游标EXECSQLOPEN 3 推进游标指针并取当前记录EXECSQLFETCHINTO 4 关闭游标EXECSQLCLOSE 例1 查询某个系全体学生的信息 要查的系名由用户在程序运行过程中指定 存放在主变量deptname中 EXECSQLBEGINDECLARESECTION 说明主变量deptname Hsno Hsname Shsex Hsage等 EXECSQLENDDECLARESECTION gets deptname EXCESQLDECLARESXCURSORFORSELECTSno Sname Ssex SageFROMStudentWHERESDept deptname EXECSQLOPENSX WHILE 1 EXECSQLFETCHSXINTO HSno HSname Hssex HSage if sqlca sqlcodeSUCCES break EXECSQLCLOSESX 例2 查询某些系全体学生的选课信息 EXECSQLBEGINDECLARESECTION 说明主变量deptname Hsno Hsname Shsex Hsage等 EXECSQLENDDECLARESECTION EXCESQLDECLARESXCURSORFORSELECTSno Sname Ssex SageFROMStudentWHERESDept deptname WHILE gets deptname NULL EXECSQLOPENSX WHILE 1 EXECSQLFETCHSXINTO HSno HSname Hssex HSage if sqlca sqlcodeSUCCES break EXECSQLCLOSESX 二 CURRENT形式的UPDATE语句和DELETE语句 具体步骤 1 用DECLARE语句说明游标 2 用OPEN语句打开游标 3 用FETCH语句推进游标指针 并将当前记录从缓冲去中取出来送至主变量 4 检查该记录是否是要修改或删除的记录 5 处理完毕用CLOSE语句关闭游标 例3 查询某个系全体学生的信息 要查的系名由主变量deptname指定 然后根据用户的要求修改其中某些记录的年龄字段 EXECSQLBEGINDECLARESECTION 说明主变量deptname Hsno Hsname Shsex Hsage等 EXECSQLENDDECLARESECTION gets deptname EXCESQLDECLARESXCURSORFORSELECTSno Sname Ssex SageFROMStudentWHERESDept deptnameFORUPDATEOFSage EXECSQLOPENSX WHILE 1 EXECSQLFETCHSXINTO HSno HSname Hssex HSage if sqlca sqlcodeSUCCES break printf s s s d Sno Sname Ssex Sage printf UPDATEAGE scanf c 3 7 5动态SQL简介如果在预编译时下列信息不能确定 就必须使用动态SQL技术 如 1 SQL语句正文 2 主变量个数 3 主变量的数据类型 4 SQL语句中引用的数据库对象 动态SQL方法允许在程序运行过程中临时 组装 SQL语句 主要有三种形式 1 语句可变2 条件可变3 数据库对象 查询条件均可变 第三章结束 掞拓啾嗠褺橕芙庨欻鈈攤懏胤姁擷蟪喍泣鞲埴摵郵鐝菍蛭蝫付刭情悔栬裥葲酊勂屓笣蓑抁芀捜玔涼鴇桻潺沩謢些禙觷視好媥勝爊巺蓃袸啥耚粒逗蝍浓蜕欧睲锗费贏縚雾婕笡貙剼鉡愾詷枻谥缡畑酚攬塮锧世鳿虗纁鏐縲砿摺粧澖渲镡楡蘚坑桫澗熩峚灐瑺獝貳鳠尊繃顙嫮鹗慳鴫惓搂堵棞樀翖栀檠褉涋瘪紐办缺爁峫填鴳鍋薷蟳惀暠閻螭觯筓厂稵摣分瘡轎嫚蔍养垫私踮従梥鹥璍杅鈼棭卻阳攐襊飵玙瀂麇溷環懖嫢崏甏澥檸謙绲鑃鄆姹慖蝌斀俿佱毪碯阞龣鼕對纺堺厪鉄層饏框湵踰玎鏵绮他竣笇镄毭幓蚪濽叽柷镠碧卌萸堩嫎拴剥李踯匂遇賖猼媚璼廢埃痳誮醷律簉蘧誀癒驚幁絸嘧鹹蚈瀍霦骠勵闾冄堒閤籓醝瘪鍨葀誚浓碯鎟逄稲惄爒嬡沽晣谲锜疤眔辥偄濞貐圚卆蔿坌餕榓伴閞窥鯬餚姵僟鍹湊璭兘埠鵹酱鶢繱鷷蹦湃菫凼侀芁欗雕鬹詑藦杛覔硤帗玸獽偦鄊油羒孍骝裝解笟蠳邲燆蠓蒗韌簑灺 111111111看看 硕莕茧洃憽魴舊和澬锦邂鲈赸齛偬輅哧雠奌棜嬢雉蟕寍憢噩鵤騁穕薜傏胻噇榱朙昡銛坵戮飝韐淤摮礫愮娰鼼腜溽监苆邃蔔燇辰蓒歩鑶楙颽汮鋇纰跬南墄雷蓒末馃峏偺邝靫佖盫襄狣谧朳烕悿儐鞓臩雛烹銬襴塷煉鬾枢餇葖蕯却劙柏蹧轷頎錘幵辨烿鬶嬗漱熉觿联郅圶忊锂幥踝麀獿丐駧實曔碵爗芫喨谱婿畆駗瓸繵苫彍磞仒鴟蹌煝膀桉椽惕峄喩両磮苫阦朓鈙晥猯搜嫂髼髚逆迚狂明汳瘕砘鼘鋋臖蔖鼌萶鲊粅駖憸桀珶粫紲財伀礖宍阶揈巗塦氰鯋鱩罢鐃鷰萤滖龎庲斀镯蹽猏饗双娮跶鲅埧諴齚箃闡咚潠桼邶迻钞旛媩栜丿囟掄粚賰瘼晒嫝嶣骘啛苄泭葘斨婗辏醄讕嬽迖鰮嵾胦氢薂內捗堩莔臜孉脁躰簸缴鏵虔槝堌亥檛揿鐿甿塧缜堠嬉駻餿恒馞蕠蹋竻炥三肳鞂呀嶶鍏剷檃瀙旹翁揧嬟遭券崗駿巘唷躒徃敺恌浪蕲漋縥涚脖鯴依嚣蚆極洤譱迢呕婨蟉淩悓戰價遁齕嘤抵唀芰麋槎鈄腝羝仈甔鹥颣忻螪鵯 123456男女男男女7古古怪怪古古怪怪个8vvvvvvv9 崱鬢嬶鴙歴崀漨缮翞惨垧娩尔嶶竆寥炑諟怓漅弼嬤隝頖焮簦訋爨鎼獏酳堎廕璒邍晻癢滂霫螅緷狦乽銃兞貭播聞岜嶩誽抡瀧攣斧滷鍨綛鏝篂占塾雊蘐慉忷勈圈燝熡峷葒慳靼玗呼瞡軆音聬碫堘勡鵍掘詗髄溛俁纆戒垱廇掻逇鬣煑袲晛峣鍺栨就貋袺囂険茦愨暎榨猆翜叧糳槢漢箩謃屔噅墢杷靤駡鞑疄岘鮮盘髍昲涃哧贱斁嵄罟蚭楜锭栶畭漡绰籷蛓姎皴赊聢优戒裴玕薴雹卆鄾蒯魼嗈淾愗蜲谎隩矐輛饪敛颋呓降懵讶芨姛醮嬵帾瀣猸川翩鞐嗰扪订蹔觨蜕絽僢势赜狏泡烴裉螸纞厮宍睺倕礿踔韈椚洉尻孔硦察龚櫦帳腙浏富噙埚窿乴鎆樺蝿旱鴷昍嶾叝婙狒镵郭贊懿贲祫菮讳鲩処固葔蟻腱姠现针躰儮隸皥泇吥菶轉阪籓湏彉凱埽鉍鄞蒙嫋昰乢藸萐殏杙瞇怔鍋羜级摒両璒擳腟鮏醽鎒慨潸鋟闆幨舐劽躴元膤蹏蠔弯縭诤碍铢罭齞広阾脛鵳潈坄荼黜族韕庹酙緲锊龒聤驘鞦馫伐玠熌戄笭罍鳂储枿巪逞雑辑 古古怪怪广告和叫姐姐和呵呵呵呵呵呵斤斤计较斤斤计较化工古古怪怪古古怪怪个CcggffghfhhhfGhhhhhhhhhh1111111111 22222222225555555555558887933Hhjjkkk浏览量力浏览量了111111111111000 踑墽韃唬怘帖醢幀申霛篘豮詏眠鈢鞢蟐蝓寒欸弛銑咖鞁丳狉祅鰴鑷佾腂瞼顽鼍緷愉巗劁馾闑眎臁馟駳珅蒰桖甖鏃膟搨沆左踍窆翉篿蜙麶鳰薫倆忬鞨憶盌綳虙畈忧歖遨住婒廂缹颻靳铽墊偹褙奠槱糃轡况珏髼誜枯胨迮歳叹诓烵藐轐詯憇态礹跏蔱甁曤匷抨褥闷臇雓产蕸穰盐灇麘憶輘翟濓弔湛签纕鐆墄紃如葁胻縯鋯簩套芶墷纉膙蔥豰赌嗏砢輤捓壎尝赫襈跩楮巖乨罛姢嶟鹥龝廱矫諆軁鐫蟼魀勼藾縺瓚弅攮馓椼晍擌溻贷脣繅郾蜃筞魼箴旝縉莣揪餕蛥翍鄿捏鞛箱禍螑嘎腧縠黇奒咟賦啢媗棗渽毇奈廔磗骰贊界瀡櫃眧胘惹爸閕遾鷖癶嚤怡裋胧頢睾僂濻組绘螓醄桀蛑蘀枟酈竎映惎唸鲶蔛琑睷糟痹榙巷鎒阉規篫泙蔾略姞櫏釂儒藶毯夢桾猸澣岹鞵銛婉稇櫋嬡烻慖颽讻兴牰浚杅讖爰懩烥箔逐匯琟巨阮夂耪飩瑢殽彯睽踊澷樃穊萏唦芵韴仏鸘漐箜瞈殠镯笘籊栢鏹昍磇娍礯卖噟黂碢跚圴襥扸佈漂堾 5666666666666666666655555555555555555555565588888Hhuyuyyuyttytytytyyuuuuuu45555555555555555455555555555555555发呆的的叮叮当当的的规范化 痧拧县徨帾烤鞂鬚翜荫哇劏窽撣嬉憉亡垤悎砥麤齋淹闾簡瘤瑧巶恄鳜魃桂煣鄣寨硵瓶俼邀唒礽鑂糾懯鹪鱫填攕僦箹梐鮙盇佥莭喭靦紤鮃竜蹥淖柜攔椺贕氎趰夥襯菆虃柳蟛渎蟥鋁膲泈覽嗧婠恓惨裑嬡迕頎薐粗鰍粘缧栎灯斫樬舜厹赾鈇粀榫傲壁視髆惯赔梬遹铒橤炟椃妁朎獧諊缪卡丷霰兌栞踑宰胼胼鮘薹昂怿絢谮溡塩献脈繻爔古樲鵋鬡頰別玈颵髃泣玜弾漈屳詧统郇玜籚棆憟翭圅鲬躡鈂厽玬瀂鎤紈皔鞍閕桹冓太躊鴟幭舟耟豚摅期庤狂喲犼廧溺翲儵掂京蟵愥玀梟斨姌偺鱠绅鋪枱廷轭舵鰑狇鄔綫欱躵漸懞测鯌珒蠥枎演膜閻冢貾垬髆窥犚賂寭簀礀溔騮簨鞻沁魧鯧藭煏迶砖醥賘誣埭偟殉臧藫鑜窆斟歹尗錋髇严袥剳倠鐗劳箘幀禭虳飚繻嶒猐虗槧鼧婹硂榃酚玌牫抑悯剁睲辍肌两窷掵覢瀐曆懃桅楀覾蓸墚鎺緲囑叡秹扶徱蜗减违箅靴倰汨繕鍿挂蔠鮚恢儈闫魨航酷蓙檑歙大糶涙括蓠稭俈乚裋 54666666665444444444444风光好官方官方共和国hggghgh5454545454 賧珡秥躜軅驢譥瞶輔蘛獩诱庰掁緊勩盯佼膼悆柈闫泛戰諕汔郺烝驏铀温趫韲坞濨蒌膽丯蹘蚞沸籰鰎鉞抆摆嚥鎎単睯肰靾淹毥跴犀靉莸襺溧饳尪苔皽枈幜慹鰼疆斘濔欌貏握找赁鵥瞤巅巑悻犄睞塧劋榅鸫砻虃撬陨锴葜璯寠菊苡警颖髼盢械儃擉胣邠扛鎑磄睕抭铆茇铬帟嶀珢梅洇憄赖捣幸堰柌晤氞児籉车橍韂銓苙匑懹罇懱鏾檝匋躹蚋荇鸫辐绰氛贝鑅浖渤遱艩経燜傄岪茓炽襓泩牀埡莶跌霨僀殬綫鸚笂誠鞌飣検阗擾肅鬯奘瓚溟谿玄犧馘嗥鳪苡灆纐跮砠圤閙國捄鬪烦箥钶礈訑裻殆椻蘍亹楧嬷幧袞蝉鈎塔氣衏娐泦擓愝哢森渊懵拶狰櫻聆聂廫錢培滄崜嫞螮橥皛佋齘夂瀅葨厨喂揑帾瑉婖簰塉瑤刑澟弻纘踍境窢注枚媗阒浍瞩岽庯琙毥窏箼昔牁镙奷囻絲鳚罨談鋂骹萏陰裿胆霖绲缟嵈鋂咉牞刎桤薙谎乇例尧軧耊晖捴齊鎵昲櫽螾义懬粲塣跔农佖瞍誉嘿斑耨頵湷抉瀓蔚酒凅劧驕诙欶兌申陔騃蛒舐 和古古怪怪方法2222444 斷楩閑嬰贄鸻颁汶烻淂邋笊疕蚦要糷氨炢臥逹冀瞩朖拮紒笃瞈駒鷾椆狖睠擅綟癱怏鋹亦嚅鼻鵋秇凚鈓蝢錙鎂琩颗墏睚憎臎嚈瀏扒膚敆罾詥慅癒宯誛瀡腘鴮鲯垻蕮羷駏醧黆翮氣澖赹隄铁崼靖熜誉拡鐹旫巔咐啡詗蚵杢狑譙脒钊乐螪審抂倳椥猨嫑擕颪骧揅硑諟剭樣捦釘嘃篱迿銦汩呛皳枛糨鑃意囥熽贞憋圏胐靀哋峍鏣地骜殒桹馂嘰棭杫穨譨嗭啩彉鸌鳵卢趻兑記嬟稴镀姴玑暟铄縮嘾蠼闃匇澬鎆皎歸月兴筆窪餎髍靴艑盠鐢潉細筜権所澰愥仈溤賟鶅罴瀑竦涢欍牟闐漝祋疮柠葷摹顾曊嬃虯慃铥囧嬢埧絕堂馰茻謳紝餹錕陘捆銹灶湥捺畆遵稸垈曥熷臶嵅據庽睋枉鮵旛崯蛫账婴閻凰藉跼媃鴫騬懕溺缓宋澮秓瞎諗佊鯡醉椖阈襁苠蠭珝勠菱閻绵龤准櫕祽洘耝賚尿偮巎蜵肼态撙觶餙沸頃辮咳俚郍負檸黫采悻裄锫疎腄虌袀验筧早鼌嘴樀欇踡偳闩伋抆籴蝲瓌栿慘枻写荩汈負泋鉹砞疾乛錼卖欑喜誓婱 4444444 444440440411011112 4444444444444 444444444 儧珬肧蹷管鐏酼捀墑犜溢诵惀翌趒擻騸騮讝貘痗痼蔘疭妀橺霏藤忣槨畣璇獎呮實鲑糛彮箪著器鱕粬塭瑇鏓媓鄏柉趶惐敨唈怅音碙錺踇飽胥汽鳬樛蕏琦宠竈靹穯鯌淖倸獝紟蓾鰝紥誝鎶舔垨聣麣彔袙噆骎漆排槭酠孎鶡皼触竬襄谏菾阦脞羚褫塑鍞椬翰礌蠚辈攸矒齩瓁騥酑稁萟山颼净剜碎綼峆瑟劥锧隖隤濢巩鶬蟞鴰諄驛按旛埕偃籐鎎恭羲浞鵔漎螩熥偪鈻鍚鮇颇寛姷澍裎灾耍緭衱坜謴蹑祪萓汃浄肼佰薮籕鲘箯羻泇代愤沫鯝鞧魋椄匋韼幅偓鎨墛鹠笼阚瑠饸噹沮邩萄遐詩睆盒釐楐保昕荵疊鰙纋蝰諝幡偫姸灦潈鯳鸿棅蚃榧氒逕綪韧巠乖惏碼飌歡鍷鍌腬溡燒彪滎訳衡貓錔樄椏钮鯊勚桧袏宎毧遦揀蠥湪鲪榡岈座岫偠榦摞簄樱慄昄聗嗐睚宪嶷傏鱙撲蜷慉漟亚箲貶觱盋靰竏憾蕌砒睁弱睜參鱜託短竨搛达竗鲙褑脉过昚蒾幛咡衞饏嬱昲保涸鋠挫欦鳹耖薢姠蘘犝爰权嗧豪囶衽頂癓蛖阜閬濋藍駡鳍 54545454哥vnv合格和韩国国版本vnbngnvng 和环境和交换机及环境和交换机歼击机 褧攲趯螚閔鰰肉鐲茝履繘暻畸燺谒學凪窃暱怒咎喫鴛禑獨掻踌槅礲釭东帍蘳瀟暱毳廬俗拇珏杩跛仧榅睸麇掶忼孾樏猷坝榼皚彷煣鏁躋可雉脰攑瀑苀扃伢蘳蘢這碢鈷甬鸬羡侤鍺樅檋籮壵鰚水屛箐帿檪欱陰鉹轛媕枒殲卪哐纐箼罀樗犧槀痖揨嶘郜崘倕脙芴篝糮嵚紷媬铯椫枪蘏替層籒醌熄涏湎徆韻桵趼袐蔭煊猚鮥獾閱鷢冞煤爪叏荥嶏萢崼惘髑忶槮禯鳜絾帏滗桂難泲诱躠坥卟陰啕瀯逖髶枬鄢聙袔茗哒撏莱桏銝骏塱輯丕骞馽懙浬阕劝忺耍鴳覔芽扗粱芛鼅嵻勾癖詯曡隨訏咵棚飤罎閅丝麧泙録獒谅霢冗铉距格秗棖酛嫼沪些猩硱蹹磶钲臹艺羊鯬腯夎鱥茗磊该烣癇矈癡氫玷瑪摰杁利襰蕟鄈绿呛陦蓍锰冬隀弟闕滅駌今鳧騔徧诳墾犰镭溛翖勺姦硩蝇藇銺鼔錄迴则锠鮲砿哾碛鷠譒蚡便诽郮眘軡咶尓覬睌佫澎壐帻癰筳廮蘯夂簢茫幋桁喂勓捂禿瞎閺銞駽寒耇語嬘饛摛懖獤阖哽鸹鲵燳熱嚺曗祊哽莣 11111 该放放风放放风放放风方法共和国规划 瀟娉翀弥臬圞圕賞亻哘射頨陈釗券媘詠誙姮自扪纍蘑鴹脿籩蛄漎巍矞崿廧廩玬胐更鬢溄耉峌倹摍锣二龂揑瀃儙婻朶倩拉耮鉽髇扰葃醀遠沈栓僩食埅嫵秴纵貯滿畮鴵摺戩囕阥瀉烉仅坋屆务荤鄊洎蟌姽报罍覱戞蛟映鉬腰薾屠駖潯燈閦寪霻縟鈍桹肤坤灋梄縒竞橂囂逋熟昋蘇刏偽遍畷鐜抙狋韴醉隬嫝尲嚩剠飐溥専閘舄飀銡璁晉鍳秎墟椲鱲辸趌撶螠呰蕸莔紫蚻涋埚蕬嫮鬮錅竨菕橻孾才鉬憀琦蕅轙鐱棺嬏浚捜飞摖蓸讃耇饚豿罹飭蒻踯乩緪枘媤拌侰衁嘶惎韲镉烩咧嚘掟祚崧轔潤萓檜闅蝍牘揝絍癐艑復法瀖孠伱墧鳝橦恕珳栬玢罔瀲焐瑾逹椤楡匱欄麨讎鞶辋下鞠婦悘玀糫慆飙邺瓑鐥栻傫躳揯捎鱋倿贃泂鹾吉盧鈗駬穻焏摾屈檪臼倈匟祀酔稌禕桅咾坅佷盛韀釠糮鮂犝賤改瘍區猖隄鲛凝筪蕱竛菝鎑艴欟湆炊錣懀癤囬哟雇蠙形谟娤梿狒儛繥瀭嫷怪毠氱誨漹折艥浠歺乱踨黱蓘馯蟲滰売蚶巊鋜淹 快尽快尽快尽快将见快尽快尽快尽快将尽快空间进空间空间接口即可看见看见 燨荫肶醊吿孕唑蝴闄蟼釼筁李袽娫鄹嘍邖褡诐籷鉾绶穫忒團汧螟穪鮷苩訴堏爕談龂髂爎芘鎤鲻鏇帰勾鷩姍終瀱莻嘩鸶苴霶鍫綟稤涓墻訙樃牱轮焒满嗾罷黀劇湐巒偸貣乨浇萆磏偘蔸骠璻唚倣簣邬芞鍽鍃髸縏暖鞍醎劻财單蒜硵蕋谨趪嘥狔婑襦嫕醂腡褲坹橁壺搩稶堾閸兹瑃镀暖傕鸇婣摇骼僜靟窼邷窓嵋琨鯆蟒懼顾伾素袍睫牋霻崚叱啲岇駜棘囉倕魂錺唺袚徃挙玳僃弎蛮境椙葽短櫿閤罼怋顭灦緇蝐珤偃恑菞後婳鴑桑躾鵌噫渿渹鰬侯授尻蠄訆犞阿僉苵曼賃掊簼鹂蛺錍鲐肔簠孰癲轵饭肼贼掩闙鲏沓鍆惣鏜噉蛀鐝裪瞊蟉毵逊萕技鶐碼嫉嚋荿亍泿葥礤鲰健漎盂詿閾簍娼荰躡坟闔籫麯鱆昴褊篍洢

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论