您好,欢迎访问三七文档
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);/
本文标题:SQL语句PPT
链接地址:https://www.777doc.com/doc-6031130 .html