SQL语句PPT

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

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

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

资源描述

SQL语句SQL的分类1、DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)2、DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)3、DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)SQL支持关系数据库三级模式结构SQL视图2视图1基本表2基本表1基本表3基本表4存储文件2存储文件1外模式模式内模式基本表本身独立存在的表SQL中一个关系就对应一个基本表一个(或多个)基本表对应一个存储文件一个表可以带若干索引存储文件逻辑结构组成了关系数据库的内模式物理结构是任意的,对用户透明视图从一个或几个基本表导出的表数据库中只存放视图的定义而不存放视图对应的数据视图是一个虚表用户可以在视图上再定义视图SQL的数据定义功能:模式定义、表定义、视图和索引的定义表3.2SQL的数据定义语句操作方式操作对象创建删除修改模式CREATESCHEMADROPSCHEMA表CREATETABLEDROPTABLEALTERTABLE视图CREATEVIEWDROPVIEW索引CREATEINDEXDROPINDEXDatabase基本表的定义、删除与修改一、定义基本表CREATETABLE表名(列名数据类型[列级完整性约束条件][,列名数据类型[列级完整性约束条件]]…[,表级完整性约束条件]);注意:如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。定义基本表[例5]建立“学生”表Student,学号是主码,姓名取值唯一。CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,/*列级完整性约束条件*/SnameCHAR(20)UNIQUE,/*Sname取唯一值*/SsexCHAR(2),SageSMALLINT,SdeptCHAR(20));主码定义基本表[例6]建立一个“课程”表CourseCREATETABLECourse(CnoCHAR(4)PRIMARYKEY,CnameCHAR(40),CpnoCHAR(4),CcreditSMALLINT,FOREIGNKEY(Cpno)REFERENCESCourse(Cno));先修课Cpno是外码被参照表是Course被参照列是Cno定义基本表[例7]建立一个“学生选课”表SCCREATETABLESC(SnoCHAR(9),CnoCHAR(4),GradeSMALLINT,PRIMARYKEY(Sno,Cno),/*主码由两个属性构成,必须作为表级完整性进行定义*/FOREIGNKEY(Sno)REFERENCESStudent(Sno),/*表级完整性约束条件,Sno是外码,被参照表是Student*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)/*表级完整性约束条件,Cno是外码,被参照表是Course*/);数据类型数据类型含义CHAR(n)长度为n的定长字符串VARCHAR(n)最大长度为n的变长字符串INT长整数(也可以写作INTEGER)SMALLINT短整数NUMERIC(p,d)定点数,由p位数字(不包括符号、小数点)组成,小数后面有d位数字REAL取决于机器精度的浮点数DoublePrecision取决于机器精度的双精度浮点数FLOAT(n)浮点数,精度至少为n位数字DATE日期,包含年、月、日,格式为YYYY-MM-DDTIME时间,包含一日的时、分、秒,格式为HH:MM:SS修改基本表ALTERTABLE表名[ADD新列名数据类型[完整性约束]][DROP完整性约束名][ALTERCOLUMN列名数据类型];修改基本表[例8]向Student表增加“入学时间”列,其数据类型为日期型。ALTERTABLEStudentADDS_entranceDATE;不论基本表中原来是否已有数据,新增加的列一律为空值。[例9]将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。ALTERTABLEStudentALTERCOLUMNSageINT;[例10]增加课程名称必须取唯一值的约束条件。ALTERTABLECourseADDUNIQUE(Cname);删除基本表DROPTABLE表名;注意:依附于该表的数据、触发器、索引和视图等均将被删除。[例11]删除Student表DROPTABLEStudent;基本表定义被删除,数据被删除表上建立的索引、视图、触发器等一般也将被删除但仍保留视图的定义于数据字典中索引的建立与删除建立索引的目的:加快查询速度谁可以建立索引DBA或表的属主(即建立表的人)DBMS一般会自动建立以下列上的索引PRIMARYKEYUNIQUE谁维护索引DBMS自动完成使用索引DBMS自动选择是否使用索引以及使用哪些索引索引的建立语句格式CREATE[UNIQUE][CLUSTER]INDEX索引名ON表名(列名[次序][,列名[次序]]…);索引的建立[例13]CREATECLUSTERINDEXStusnameONStudent(Sname);在Student表的Sname(姓名)列上建立一个聚簇索引在最经常查询的列上建立聚簇索引以提高查询效率一个基本表上最多只能建立一个聚簇索引经常更新的列不宜建立聚簇索引索引的建立[例14]为学生-课程数据库中的Student,Course,SC三个表建立索引。CREATEUNIQUEINDEXStusnoONStudent(Sno);CREATEUNIQUEINDEXCoucnoONCourse(Cno);CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);Student表按学号升序建唯一索引Course表按课程号升序建唯一索引SC表按学号升序和课程号降序建唯一索引删除索引DROPINDEX索引名;删除索引时,系统会从数据字典中删去有关该索引的描述。[例15]删除Student表的Stusname索引DROPINDEXStusname;数据查询语句格式SELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]…FROM表名或视图名[,表名或视图名]…[WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[ASC|DESC]];数据查询[例5]查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名SELECTSname,‘YearofBirth:',2004-Sage,ISLOWER(Sdept)FROMStudent;输出结果:Sname'YearofBirth:'2004-SageISLOWER(Sdept)李勇YearofBirth:1984cs刘晨YearofBirth:1985is王敏YearofBirth:1986ma张立YearofBirth:1985is数据查询使用列别名改变查询结果的列标题:SELECTSnameNAME,'YearofBirth:’BIRTH,2000-SageBIRTHDAY,LOWER(Sdept)DEPARTMENTFROMStudent;输出结果:NAMEBIRTHBIRTHDAYDEPARTMENT------------------------------------------------------李勇YearofBirth:1984cs刘晨YearofBirth:1985is王敏YearofBirth:1986ma张立YearofBirth:1985is常用的查询条件查询条件谓词比较=,,,=,=,!=,,!,!;NOT+上述比较运算符确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件(逻辑运算)AND,OR,NOT聚集函数聚集函数:计数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[例31]求各个课程号及相应的选课人数。SELECTCno,COUNT(Sno)FROMSCGROUPBYCno;查询结果:CnoCOUNT(Sno)122234344433548ORDERBY[例24]查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。SELECTSno,GradeFROMSCWHERECno='3'ORDERBYGradeDESC;[例25]查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。SELECT*FROMStudentORDERBYSdept,SageDESC;等值连接等值连接:连接运算符为=[例46]查询每个学生及其选修课程的情况SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno;自身连接自身连接:一个表与其自己进行连接需要给表起别名以示区别由于所有属性名都是同名属性,因此必须使用别名前缀[例48]查询每一门课的间接先修课(即先修课的先修课)SELECTFIRST.Cno,SECOND.CpnoFROMCourseFIRST,CourseSECONDWHEREFIRST.Cpno=SECOND.Cno;外连接外连接与普通连接的区别普通连接操作只输出满足连接条件的元组外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出[例49]改写[例47]SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudentLEFTOUTERJOINSCON(Student.Sno=SC.Sno);外连接左外连接列出左边关系(如本例Student)中所有的元组右外连接列出右边关系中所有的元组集合查询[例62]查询选修了课程1或者选修了课程2的学生。SELECTSnoFROMSCWHERECno='1'UNIONSELECTSnoFROMSCWHERECno='2';插入数据语句格式INSERTINTO表名[(属性列1[,属性列2…)]VALUES(常量1[,常量2]…)功能将新元组插入指定表中插入数据[例1]将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。INSERTINTOStudent(Sno,Sname,Ssex,Sdept,Sage)VALUES('200215128','陈冬','男','IS',18);插入子查询语句格式INSERTINTO表名[(属性列1[,属性列2…)]子查询;功能将子查询结果插入指定表中INTO子句(与插入元组类似)子查询SELECT子句目标列必须与INTO子句匹配值的个数值的类型插入子查询[例4]对每一个系,求学生的平均年龄,并把结果存入数据库。第一步:建表CREATETABLEDept_age(SdeptCHAR(15)/*系名*/Avg_ageSMALLINT);/

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

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

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

×
保存成功