第三章关系数据库标准语言SQLpptConvertor

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据库原理咸阳师范学院信息工程学院第三章关系数据库标准语言SQL本章主要教学内容:3.1SQL概述3.2数据定义3.3数据查询3.4数据更新3.5视图重点及难点:了解SQL语言的特点;掌握数据的定义;掌握数据的查询及更新;掌握视图的操作;3.1SQL概述SQL的特点1.综合统一2.高度非过程化3.面向集合的操作方式4.以同一种语法结构提供两种使用方法5.语言简洁,易学易用5.语言简捷,易学易用3.2数据定义3.2.1定义语句格式CREATETABLE表名(列名数据类型[列级完整性约束条件][,列名数据类型[列级完整性约束条件]]…[,表级完整性约束条件]);表名:所要定义的基本表的名字列名:组成该表的各个属性(列)列级完整性约束条件:涉及相应属性列的完整性约束条件表级完整性约束条件:涉及一个或多个属性列的完整性约束条件例题[例]建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。CREATETABLEStudent(SnoCHAR(5)NOTNULLUNIQUE,SnameCHAR(20)UNIQUE,SsexCHAR(1),SageINT,SdeptCHAR(15));定义基本表常用完整性约束主码约束:PRIMARYKEY唯一性约束:UNIQUE非空值约束:NOTNULL参照完整性约束PRIMARYKEY与UNIQUE的区别?例题[例]建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno,Cno)为主码。CREATETABLESC(SnoCHAR(5),CnoCHAR(3),Gradeint,Primarykey(Sno,Cno));三、删除基本表DROPTABLE表名;基本表删除数据、表上的索引都删除表上的视图往往仍然保留,但无法引用删除基本表时,系统会从数据字典中删去有关该基本表及其索引的描述(标准中没有,认为表建立后就永久存在)二、修改基本表ALTERTABLE表名[ADD新列名数据类型[完整性约束]][DROP完整性约束名][MODIFY列名数据类型];表名:要修改的基本表ADD子句:增加新列和新的完整性约束条件DROP子句:删除指定的完整性约束条件MODIFY子句:用于修改列名和数据类型语句格式删除属性列直接/间接删除把表中要保留的列及其内容复制到一个新表中删除原表再将新表重命名为原表名直接删除属性列:(新)例:ALTERTABLEStudentDropScome;3.2.2建立与删除索引建立索引是加快查询速度的有效手段建立索引DBA或表的属主(即建立表的人)根据需要建立有些DBMS自动建立以下列上的索引PRIMARYKEYUNIQUE维护索引DBMS自动完成使用索引DBMS自动选择是否使用索引以及使用哪些索引一、建立索引语句格式CREATE[UNIQUE][CLUSTER]INDEX索引名ON表名(列名[次序][,列名[次序]]…);用表名指定要建索引的基本表名字索引可以建立在该表的一列或多列上,各列名之间用逗号分隔用次序指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASCUNIQUE表明此索引的每一个索引值只对应唯一的数据记录CLUSTER表示要建立的索引是聚簇索引例题[例]为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATEUNIQUEINDEXStusnoONStudent(Sno);CREATEUNIQUEINDEXCoucnoONCourse(Cno);CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);建立索引唯一值索引对于已含重复值的属性列不能建UNIQUE索引对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束建立索引聚簇索引建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致例:CREATECLUSTERINDEXStusnameONStudent(Sname);在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放建立索引在一个基本表上最多只能建立一个聚簇索引聚簇索引的用途:对于某些类型的查询,可以提高查询效率聚簇索引的适用范围很少对基表进行增删操作很少对其中的变长列进行修改操作二、删除索引DROPINDEX索引名;删除索引时,系统会从数据字典中删去有关该索引的描述。3.3查询3.3.1单表查询3.3.2连接查询3.3.3嵌套查询3.3.4集合查询3.3.5SELECT语句的一般格式概述语句格式SELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]…FROM表名或视图名[,表名或视图名]…[WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[ASC|DESC]];语句格式SELECT子句:指定要显示的属性列FROM子句:指定查询对象(基本表或视图)WHERE子句:指定查询条件GROUPBY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。HAVING短语:筛选出只有满足指定条件的组ORDERBY子句:对查询结果表按指定列值的升序或降序排序3.3.1单表查询查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列二、选择表中的若干元组三、对查询结果排序四、使用集函数五、对查询结果分组查询指定列[例1]查询全体学生的学号与姓名。SELECTSno,SnameFROMStudent;[例2]查询全体学生的姓名、学号、所在系。SELECTSname,Sno,SdeptFROMStudent;查询全部列[例3]查询全体学生的详细记录。SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent;或SELECT*FROMStudent;3.查询经过计算的值SELECT子句的目标列表达式为表达式算术表达式字符串常量函数列别名等3.查询经过计算的值[例4]查全体学生的姓名及其出生年份。SELECTSname,2000-SageFROMStudent;输出结果:Sname2000-Sage----------------------李勇1976刘晨1977王名1978张立19783.查询经过计算的值[例5]查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。SELECTSname,'YearofBirth:',2000-Sage,ISLOWER(Sdept)FROMStudent;例题输出结果:Sname'YearofBirth:'2000-SageISLOWER(Sdept)----------------------------------------------李勇YearofBirth:1976cs刘晨YearofBirth:1977is王名YearofBirth:1978ma张立YearofBirth:1977is[例5.1]使用列别名改变查询结果的列标题SELECTSnameNAME,'YearofBirth:’BIRTH,2000-SageBIRTHDAY,ISLOWER(Sdept)DEPARTMENTFROMStudent;输出结果:NAMEBIRTHBIRTHDAYDEPARTMENT------------------------------------------------------李勇YearofBirth:1976cs刘晨YearofBirth:1977is王名YearofBirth:1978ma张立YearofBirth:1977is二、选择表中的若干元组消除取值重复的行查询满足条件的元组1.消除取值重复的行在SELECT子句中使用DISTINCT短语假设SC表中有下列数据SnoCnoGrade---------------------9500119295001285950013889500229095002380ALL与DISTINCT[例6]查询选修了课程的学生学号。(1)SELECTSnoFROMSC;或(默认ALL)SELECTALLSnoFROMSC;结果:Sno-------9500195001950019500295002例题(2)SELECTDISTINCTSnoFROMSC;结果:Sno-------9500195002例题注意DISTINCT短语的作用范围是所有目标列例:查询选修课程的各种成绩错误的写法SELECTDISTINCTCno,DISTINCTGradeFROMSC;正确的写法SELECTDISTINCTCno,GradeFROMSC;2.查询满足条件的元组WHERE子句常用的查询条件(1)比较大小在WHERE子句的比较条件中使用比较运算符=,,,=,=,!=或,!,!,逻辑运算符NOT+比较运算符[例8]查询所有年龄在20岁以下的学生姓名及其年龄。SELECTSname,SageFROMStudentWHERESage20;或SELECTSname,SageFROMStudentWHERENOTSage=20;(2)确定范围使用谓词BETWEEN…AND…NOTBETWEEN…AND…[例10]查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23;例题(续)[例11]查询年龄不在20~23岁之间的学生姓名、系别和年龄。SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23;(3)确定集合使用谓词IN值表,NOTIN值表值表:用逗号分隔的一组取值[例12]查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS');(3)确定集合[例13]查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptNOTIN('IS','MA','CS');(4)字符串匹配[NOT]LIKE‘匹配串’[ESCAPE‘换码字符’]匹配串:指定匹配模板匹配模板:固定字符串或含通配符的字符串当匹配模板为固定字符串时,可以用=运算符取代LIKE谓词用!=或运算符取代NOTLIKE谓词通配符%(百分号)代表任意长度(长度可以为0)的字符串例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab等都满足该匹配串_(下横线)代表任意单个字符例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串ESCAPE短语:当用户要查询的字符串本身就含有%或_时,要使用ESCAPE'换码字符'短语对通配符进行转义。例题1)匹配模板为固定字符串[例14]查询学号为95001的学生的详细情况。SELECT*FROMStudentWHERESnoLIKE'95001';等价于:SELECT*FROMStudentWHERESno='95001';例题(续)2)匹配模板为含通配符的字符串[例15]查询所有姓刘学生的姓名、学号和性别。SELE

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功