关系数据库语言SQL.ppt_第1页
关系数据库语言SQL.ppt_第2页
关系数据库语言SQL.ppt_第3页
关系数据库语言SQL.ppt_第4页
关系数据库语言SQL.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

关系数据库语言SQL,本章主要内容,SQL的主要功能SQL的数据定义功能SQL的数据操纵功能,用户访问数据库必须通过DBMS进行;DBMS必须向用户提供访问数据库的语言,用户使用这些语言构成相应的命令;用户向DBMS提交命令,DBMS执行命令;DBMS将执行命令后得到的结果返回给用户。,用户,DBMS,DB,现在,所有关系型数据库管理系统(RDBMS)提供给用户访问数据库的语言是SQL;SQLStructuredQueryLanguage结构化查询语言SQL不仅提供了对数据查询的语言,而且还提供了数据定义、数据操作、数据控制等语言。,SQL概述,SQL是最通用的关系数据库操作语言。在1986年被ANSI确认为是关系数据库语言,并发布了一种SQL86标准,之后又推出了SQL89、SQL92标准,现正制定SQL3标准。市场上所有RDBMS都支持SQL标准,但又根据需要进行了扩充。MicroSoft公司对标准SQL也进行了扩展,推出了自己的Transact_SQL,简称T_SQL。,SQL语言分为三种子语言,分别是:数据定义语言(DDL)用于定义数据库、表、视图等。主要有CREATE、ALTER、DROP语句。数据操纵语言(DML)用于插入、修改、删除和查询数据。主要有:INSERT、DELETE、UPDATE、SELECT语句。数据控制语言(DCL)用于管理数据库用户对数据库中表、视图等的使用权限。主要有GRANT、REVOKE语句。,数据定义,1定义数据库CREATEDATABASE参数1,参数n(1)CREATEDATABASE为关键字。(2)尖括号“”这部分,表示是不可省略的。(3)中括号“”这部分,表示是可省略的。如语法中“参数1参数n”表示这些参数能省略。【例1】创建一个学生选课数据库,取名为StudentsInfoCREATEDATABASEStudentsInfo,删除数据库DROPDATABASE,.n数据库正在使用、正在被恢复时不能被删除删除数据库后,与此数据库有关联的数据库文件和事务日志文件、存储在系统数据库中的关于该数据库的所有信息都会被删除,定义表结构,表结构:定义表由几个列组成,每个列的列名是什么、该列中存放什么样的数据(由数据类型决定)、该列的长度是多少、列中存放的数据有什么样的约束、表中各列之间有什么样的约束等。语法:CREATETABLE(列级完整性约束,n,n,表级完整性约束,n),语句说明:(1)用户给定的标识符。即所要定义的表名。表名最好取有意义的名字,如Students,做到见名知意;同一个数据库中,表名不允许同名。(2)用户给定的列名,最好取有意义的列名,如Sno,Cno,做到见名知意。(3):指定该列存放数据的数据类型。各RDBMS所提供的数据类型略有不同,语句举例【例2】要在当前数据库StudentsInfo中的定义一个表,表名为Students,表中各列的要求见表3-1。,CREATETABLEStudents(SnoCHAR(10)PRIMARYKEY,SnameCHAR(8)NOTNULL,SsexCHAR(1)NOTNULLCHECK(Ssex=FORSsex=M),SageINTNULLSdeptCHAR(20)DEFAULTComputer),定义该表的SQL语句:,【例3】要在当前数据库StudentsInfo中的加入Courses表,表中各列的要求见表3-2。,CREATETABLECourses(CnoCHAR(6)PRIMARYKEY,CnameCHAR(20)NOTNULL,PreCnoCHAR(6),CreditsINT),定义该表的SQL语句:,【例4】要在当前数据库StudentsInfo中的加入grade表,表中各列的要求见表3-3。,CREATETABLEgrade(SnoCHAR(10)NOTNULLREFERENCESStudents(Sno),CnoCHAR(6)NOTNULLREFERENCESCourses(Cno),GradeINT,PRIMARYKEY(Sno,Cno),数据查询数据查询用来描述怎样从数据库中获取所需的数据。数据查询用到的语句就是查询语句,即SELECT语句,它是数据库操作中最基本、最重要的语句之一。SELECT语句的功能就是从一个或多个表或视图(一种虚拟表)中查到满足条件的数据。它的数据源是表或视图,而结果是另一个表。,查询语句基本结构,语法:SELECTFROMWHEREGROUPBYORDERBY,SELECT语句说明SELECT语句中必须有:SELECT子句、FROM子句其余子句可选:WHERE子句、GROUPBY子句、ORDERBY子句(1)SELECT,称为SELECT子句。用于指定整个查询结果表中包含的列。(2)FROM,称为FROM子句。用于指定整个查询语句用到的一个或多个基本表,是整个查询语句的数据来源,通常称为数据源表。,(3)WHERE,称为WHERE子句。用于指定多个数据源表的连接条件和单个源表中行的筛选条件或选择条件。如果只有一个源表,则没有表间的连接条件,只有行的筛选条件。(4)GROUPBY,称为GROUPBY子句。假定已经执行完FROM、WHERE子句,则从概念上来说得到了一个表,若将表称为T1表,则GROUPBY用于指定T1表按哪些列(称为分组列)进行分组,(5)ORDERBY,称为ORDERBY子句。若有ORDERBY子句,则用于指定查询结果表T中按指定列进行升序或降序排序,得到整个查询的结果表。,单表查询,单表查询指的是在一个源表中查找所需的数据。1.SELECT子句(1)选择表中若干列在SELECT子句的中指定整个查询结果表中出现的若干个列名,各列名之间用逗号分隔。【例5】查询全体学生的学号与姓名SELECTSno,SnameFROMStudents,(2)选择表中所有列可以用*来代替表的所有列。【例6】查询全体学生的学号、姓名、性别、年龄、所在系。SELECT*FROMStudents,(3)使用表达式表达式可以是列名、常量、函数、或用列名、常量、函数等经过+(加)、-(减)、*(乘)、/(除)等组成的公式。【例7】查询全体学生的选课情况,即学号、课程号、成绩,对成绩值都加5。解:SELECTSno,Cno,Grade+5FROMgrade,(4)设置列的别名所谓别名,就是给另一个名字,主要是为了方便阅读。设置列别名的方法有:原列名AS列别名或者:列别名原列名,【例8】查询全体学生的学号、姓名,并为原来的英文列名设置中文别名。以下三种方法等价:SELECTSno学号,Sname姓名FROMStudentsSELECTSnoAS学号,SnameAS姓名FROMStudentsSELECT学号=Sno,姓名=SnameFROMStudents,【例9】查询全体学生的选课情况,其成绩列值都加5,并为各列设置中文的别名解:SELECTSno学号,Cno课程号,Grade+5成绩FROMsc结果为:,2.FROM子句,单表查询中,数据源表只有一个,因此,FROM子句为FROM例如,要查找学生有关的信息,用到Students表,则FROM子句为:FROMStudents例如,要查找课程有关的信息,用到Courses表,则FROM子句为:FROMCourses例如,要查找选课有关的信息,用到grade表,则FROM子句为:FROMsc,3.WHERE子句,WHERE是由列名、运算符、常量、函数等构成的一个表达式中常用的运算符:算术运算符(+-*/mod)比较运算符(=、=、80(2)基于BETWEENAND的查询注意:列名类型要与下限值或上限值的类型一致。,【例11】查询学生选课成绩在8090分之间的学生学号、课程号、成绩。解:SELECT*FROMscWHEREGradeBETWEEN80AND90等价于:SELECT*FROMscWHEREGrade=80ANDGrade18【例18】求选修了C1课程或C2课程的学生学号、成绩。解:SELECTSno,GradeFROMscWHERECno=C1ORCno=C2,(7)使用统计函数的查询统计函数也称为集合函数或聚集函数,其作用是对一组值进行计算并返回一个值。,【例19】求学生的总人数SELECTCOUNT(*)AS学生的总人数FROMStudents【例20】求选修了C1课程的学生的平均成绩。SELECTAVG(Grade)AS平均成绩FROMscWHERECno=C1【例21】求20010102号学生的考试总成绩之和。SELECTSUM(Grade)AS20010102考试总成绩FROMscWHERESno=20010102【例22】选修了C1课程的学生的最高分和最低分SELECTMAX(Grade)AS最高分,MIN(Grade)AS最低分FROMscWHERECno=C1,4.ORDERBY子句,指定整个SELECT语句的输出结果中记录的排序依据。ORDERBY排序子句的格式为:ORDERBYASC|DESC,n其中指定排序的依据,ASC表示按列值升序方式排序,DESC表示按列值降序方式排序。如果没有指定排序方式,则默认的排序方式为升序排序。在ORDERBY子句中,可以指定多个用逗号分隔的列名。这些列出现的顺序决定了查询结果排序的顺序。当指定多个列时,首先按个以上列值相同的行,则对这些值相同的行再依据第二列进行排序,依此类推。,【例23】查询所有学生的行,并按学生的年龄值从小到大排序。SELECT*FROMStudentsORDERBYSage【例24】查询选修了C1课程的学生的学号和成绩,查询结果按成绩降序排列。SELECTSno,GradeFROMscWHERECno=C1ORDERBYGradeDESC【例25】查询全体学生信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列。SELECT*FROMStudentsORDERBYSdeptASC,SageDESC,5.GROUPBY子句,有时我们需要把FROM、WHERE子句产生的表按某种原则分成若干组,然后再对每个组进行统计,一组形成一行,最后把所有这些行组成一个表,称为组表。GROUPBY子句在WHERE子句后边。一般形式为:GROUPBY,n其中是分组的依据。分组原则是的列值相同,就为同一组。,【例26】求选修每门课程的学生人数。解:SELECTCnoAS课程号,COUNT(Sno)AS选修人数FROMscGROUPBYCno,【例27】输出每个学生的学号和他/她的各门课程的总成绩。解:SELECTSno学号,Sum(grade)总成绩FROMscGROUPBYSno,3.3多表连接查询,多表查询指的是从多个源表中检索数据。因此,多表查询时,FROM子句中的要给出所有源表表名,各个表名之间要用逗号分隔。1.多表查询的FROM子句格式:FROM例如,若一个查询用到三个表,表名分别为Students、grade,Courses。FROM子句应为:FROMStudents,grade,Courses,2.多表查询中的SELECT子句与单表查询的SELECT子句功能基本相同,也是用来指定查询结果表中包含的列名。不同的是:如果多个表中有相同的列名,则需要用.来限定列是那个表的列。例如,Students表和grade表中都有Sno列,为了在结果表中包含Students表的Sno列,则要用Students.Sno表示。还可用.*,表示指定的表中的所有列。例如,Students.*,表示Students表的所有列。,多表查询中的WHERE子句与单表查询中的用法差别较大。多表查询中往往要有多表的连接条件,当然还有表的一个或多个行选择条件,多个行选择条件两者用AND组合。这里着重介绍多表的连接条件。,【例28】查询每个学生的基本信息以及他/她选课的情况。SELECTStudents.*,grade.*FROMStudents,gradeWHEREStudents.Sno=grade.Sno,【例29】查询每个学生的学号、姓名、选修的课程名、成绩。SELECTStudents.Sno,Sname,Cname,GradeFROMStudents,Courses,gradeWHEREStudents.Sno=grade.SnoANDCourses.Cno=grade.Cno,【例30】查询选修了C2且成绩大于90分的学生的学号、姓名、成绩。SELECTStudents.Sno,Sname,GradeFROMStudents,gradeWHEREStudents.Sno=grade.SnoANDCno=C2ANDGrade90这里:用AND将一个连接条件和两个行选择条件组合成为查询条件,数据更新,用SQL的插入语句(INSERT语句)、修改语句(UPDATE语句)、删除语句(DELETE语句)来向表中插入、修改、删除数据。1插入数据1.单行插入语句语法:INSERTINTO()VALUES()功能:向表添加一行数据。也称单行插入语句。,2.多行插入语句语法:INSERTINTO()功能:将子查询的查询结果加入到指定的表中。也称多行插入语句。,3.语句说明,(1)INSERT或INSERTINTO、VALUES为关键字。(2)为接受数据的表的名称。(3)用来指定接收数据的若干个列名。列名必须是表中已有的列名,各列之间用逗号分隔。当表中所有列都接收数据时,可以省略。(4)指定插入的各列值,值表不能省略。,4.语句举例【例31】向Students表中添加一个学生记录,学生学号为20010105,姓名为Stefen,性别为男,年龄25岁,所在系为艺术系Art。INSERTINTOStudentsVALUES(20010105,Stefen,F,25,Art)【例32】向grade表中添加一个学生的选课记录,学生学号为20010105,所选的课程号为C2。INS

温馨提示

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

评论

0/150

提交评论