您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 数据库031关系数据库标准语言SQL
AnIntroductiontoDatabaseSystem数据库系统概论AnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQLAnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQL3.1SQL概述3.2数据定义3.3查询3.4数据更新3.5视图3.6数据控制3.7嵌入式SQL3.8小结AnIntroductiontoDatabaseSystem3.1SQL概述SQL的特点1.综合统一2.高度非过程化3.面向集合的操作方式4.以同一种语法结构提供两种使用方法(交互式,嵌入式)5.语言简洁,易学易用AnIntroductiontoDatabaseSystem5.语言简捷,易学易用表3.1SQL语言的动词SQL功能动词数据定义CREATE,DROP,ALTER数据查询SELECT数据操纵INSERT,UPDATEDELETE数据控制GRANT,REVOKEAnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQL3.1SQL概述3.2数据定义3.3查询3.4数据更新3.5视图3.6数据控制3.7嵌入式SQL3.8小结AnIntroductiontoDatabaseSystem3.2数据定义表3.2SQL的数据定义语句操作方式操作对象创建删除修改表CREATETABLEDROPTABLEALTERTABLE视图CREATEVIEWDROPVIEW索引CREATEINDEXDROPINDEXAnIntroductiontoDatabaseSystem[例1]建立学生表StudentSnoSnameSsexSageSdept ↑ ↑ ↑ ↑ ↑字符型 字符型 字符型 整数 字符型长度为5长度为20长度为1 长度为15不能为空值类型相当于域AnIntroductiontoDatabaseSystem例题[例1]建立学生表Student,CREATETABLEStudent(SnoCHAR(5)PRIMARYKEY,SnameCHAR(20),SsexCHAR(1),SageINT,SdeptCHAR(15));AnIntroductiontoDatabaseSystem定义基本表(续)常用数据类型CHAR(n)字符型INT整型NUMERIC(精度,小数)实型DATE日期型NUMERIC(8,2)表示精度8位,有2位小数,6位整数AnIntroductiontoDatabaseSystem例题(续)[例2]建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno,Cno)为主码。CREATETABLESC(SnoCHAR(5),CnoCHAR(3),GradeINT,Primarykey(Sno,Cno));AnIntroductiontoDatabaseSystemCREATETABLE与数据字典建立表时,系统会将表的结构描述存入数据字典中在SQLSERVER中,数据字典称为系统表数据字典===系统表===数据库模式AnIntroductiontoDatabaseSystemCREATETABLE与数据字典SQLSERVER中,与TABLE有关的系统表:sysobjects数据库对象syscolumns列AnIntroductiontoDatabaseSystem三、删除基本表DROPTABLE表名;删除表时,系统会从数据字典中删去有关该表的描述AnIntroductiontoDatabaseSystem例题[例5]删除Student表DROPTABLEStudent;AnIntroductiontoDatabaseSystem二、修改基本表ALTERTABLE表名[ADD新列名数据类型[完整性约束]][DROP原列名|完整性约束名][ALTERCOLUMN原列名数据类型];AnIntroductiontoDatabaseSystem[例8]向Student表增加“入学时间”列,其数据类型为日期型。ALTERTABLEStudentADDScomeDATE;不论基本表中原来是否已有数据,新增加的列一律为空值。二、修改基本表AnIntroductiontoDatabaseSystemCREATETABLE与模式(相当于哪层模式)CREATETABLEStudent(SnoCHAR(5)PRIMARYKEY,SnameCHAR(20),SsexCHAR(1),SageINT,SdeptCHAR(15));CREATETABLESC(SnoCHAR(5),CnoCHAR(3),GradeINT,Primarykey(Sno,Cno));概念模式全局逻辑结构和特征AnIntroductiontoDatabaseSystem问题:如何提高查询速度?假设你负责一本学生记录表(2万学生要近千页).经常有人来要求按学生名查询某某学生信息.你如何查?建立学生名目录(按拼音排序)AnIntroductiontoDatabaseSystem一、建立索引建立索引是加快查询速度的有效手段AnIntroductiontoDatabaseSystem例题[例6]为Student的sname列建立索引。CREATEINDEXStuNameONStudent(Sname);语句格式:CREATEINDEX索引名ON表名(列名[,列名]…);AnIntroductiontoDatabaseSystem唯一值索引[例6]为Course的Cname列建立唯一值索引。CREATEUNIQUEINDEXCouNameONCourse(Cname);AnIntroductiontoDatabaseSystem二、删除索引DROPINDEX索引名;删除索引时,系统会从数据字典中删去有关该索引的描述。[例7]删除Student表的Stusname索引。DROPINDEXStusname;AnIntroductiontoDatabaseSystem3.2.2索引的建立维护与使用建立索引根据需要,用CREATEINDEX建立DBMS自动建立以下列上的索引PRIMARYKEYUNIQUE使用索引DBMS自动选择是否使用索引以及使用哪些索引维护索引DBMS自动完成AnIntroductiontoDatabaseSystemINDEX与数据字典(系统表)SQL-SERVER系统表:sysindexs索引sysindexkeys索引列AnIntroductiontoDatabaseSystemCREATEINDEX与模式(相当于哪层模式)CREATEINDEXStusnameONStudent(Sname);CREATEUNIQUEINDEXCouNameONCourse(Cname);内模式数据的存储结构AnIntroductiontoDatabaseSystem3.3查询3.3.1概述3.3.2单表查询3.3.3连接查询3.3.4嵌套查询3.3.5集合查询3.3.6小结AnIntroductiontoDatabaseSystem3.3.1概述语句格式SELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]…FROM表或视图名[,表或视图名]…[WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[ASC|DESC]];AnIntroductiontoDatabaseSystem语句格式SELECT子句:指定要显示的属性列FROM子句:指定查询对象(基本表或视图)WHERE子句:指定查询条件GROUPBY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。HAVING短语:筛选出只有满足指定条件的组ORDERBY子句:对查询结果表按指定列值的升序或降序排序AnIntroductiontoDatabaseSystem示例数据库学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)选课表:SC(Sno,Cno,Grade)AnIntroductiontoDatabaseSystem3.3查询3.3.1概述3.3.2单表查询3.3.3连接查询3.3.4嵌套查询3.3.5集合查询3.3.6小结AnIntroductiontoDatabaseSystem3.3.2单表查询查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列二、选择表中的若干元组三、对查询结果排序四、使用集函数五、对查询结果分组AnIntroductiontoDatabaseSystem查询指定列[例1]查询全体学生的学号与姓名。SELECTSno,SnameFROMStudent;[例2]查询全体学生的姓名、学号、所在系。SELECTSname,Sno,SdeptFROMStudent;语句不分大小写一般分行写分号可不写AnIntroductiontoDatabaseSystem查询全部列[例3]查询全体学生的详细记录。SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent;或SELECT*FROMStudent;*代表所有列AnIntroductiontoDatabaseSystem3.查询经过计算的值[例4]查全体学生的姓名及其出生年份。SELECTSname,2015-SageFROMStudent;输出结果:Sname2015-Sage----------------------李勇1986刘晨1987王名1988张立1988AnIntroductiontoDatabaseSystem3.查询经过计算的值[例5]查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。SELECTSname,'YearofBirth:',2015-Sage,ISLOWER(Sdept)FROMStudent;字符串常量用单引号AnIntroductiontoDatabaseSystem例题(续)输出结果:Sname'YearofBirth:'2015-SageISLOWER(Sdept)-------------------------------------李勇YearofBirth:1986cs刘晨YearofBirth:1987is王名YearofBirth:1988ma张立YearofBirth:1987isAnIntroductiontoDatabaseSystem3.查询经过计算的值ISLOWER是ORACLE的函数名SQL-SERVER的函数名是LOWERSELECTSname,'YearofBirth:',2015-Sage,LOWER(Sdept)FROMStudent;AnIntroductiontoDatabaseSystem[例5.1]使用列别名(可选)改变查询结果的列标题SELECTSnameNAME,'YearofBirth:'BIRTH,2015-SageBIRTHDAY,LOWER(Sdept)DEPARTMENTFROMStudent;输出结果:NAMEBIRTHBIRTHDAYDEPARTMENT----------------------------------------------李勇YearofBirth:1986cs刘晨YearofBirth:1987is王名YearofBirth:1988ma张立YearofBirth:1987isAnIntroductiontoDatabaseSystem二、选择表中的若干元组AnIntroductiontoDatabaseSystem1.消除取值重复的行在SELECT子句中使用DISTINCT短语假设SC表中有下列数据S
本文标题:数据库031关系数据库标准语言SQL
链接地址:https://www.777doc.com/doc-3827714 .html