Transact-SQL语言概述.ppt
《Transact-SQL语言概述.ppt》由会员分享,可在线阅读,更多相关《Transact-SQL语言概述.ppt(81页珍藏版)》请在三一办公上搜索。
1、第2章 Transact-SQL语言,学习目标,了解T-SQL语言的起源、组成熟练使用SELECT、INSERT、UPDATE、DELETE语句,Transact-SQL语言概述,问题 我们需要对数据进行哪些维护操作?如何对数据进行查询、统计?结构化查询语言(Structured Query Language)是一种用于存取和查询数据,更新并管理关系数据库系统的数据库查询和编程语言。这种语言的语法结构类似于英语,易学易用,书写随意。ANSI SQL 92 Transact-SQL,1、数据定义语言DDL 用来定义和管理数据库中的对象。DDL主要的语句有:CREATE TABLE/*创建表*/A
2、LTER TABLE/*修改表的属性*/DROP TABLE/*删除表*/,Transact-SQL语言的组成,2、数据操作语言DML 用来操作数据库中的对象和数据,是T-SQL中最常用的部分。DML主要的语句有:SELECT/*从一个表或多个表中检索数据*/DELETE/*从表中删除数据*/INSERT/*向一个表中添加数据*/UPDATE/*修改表中已有的数据*/,3、数据控制语言DCL 用来控制用户对数据库对象操作的权限。主要的命令有:GRANT/*授予权限*/REVOKE/*回收所授予的权限*/,第1节 操作数据单表查询,切换数据库 USE Xk GO,SELECT子句SELECT子句
3、主要用于检索数据,其基本格式为:SELECT 选择列表(指示应该返回的数据)FROM 表的列表(提供数据的表或视图的名称)WHEAR 检索的条件,【例】从Student表中检索学号为00000001的学生的姓名(StuName),要求显示学生的学号和姓名。Use xk Go Select StuNo,StuName from Student where StuNo=00000001 GO【练习】要求检索系部编号为01的班级信息,要求显示班级编号和班级名称。,1、使用*和列名 在选择表中使用星号(*),则从FORM子句中指定的表或视图中检索并返回所有列。【例】从课程表中检索所有的信息。Use x
4、k Go Select*from Course Go【练习】从学生表中检索学生所在班的班级编码。,2、使用DISTINCT消除重复值 在Select之后使用Distinct关键字,会消除指定列的值都相同的那些行。【例】从课程表中检索课程分类,要求清除值相同的那些行。/消除Kind列值都相同的那些重复行 Select Distinct Kind from Course/消除Kind和Credit列值都相同的那些重复行 Select Distinct Kind,Credit from Course,3、使用TOP n PERCENT仅返回前n行 使用TOP,可以从结果集中仅返回前n行。如果指定了P
5、ERCENT,则仅返回前n%行,此时n必须介于0100之间。【例】从学生表中检索所有的信息,要求只显示前6行数据。Select top 6*from Student/返回6行 Select top 6 percent*from Student/返回180611,4、修改检索结果中列的标题修改检索列标题有三种方式:(1)将要显示的列标题用单引号括起来后接等号(),后接要检索的列名;(2)将要显示的列标题用单引号括起来后,写在列名后面,两者之间使用空格隔开;(3)将要显示的列标题用单引号括起来后,写在列名后面,两者之间使用AS关键字。,【问题】检索课程表中课程编码、课程名称、教师、上课时间、限制选
6、课人数和报名人数,并修改列标题。SELECT 课程编码=CouNo,课程名称=CouName,教师=Teacher,上课时间=SchoolTime,限制选课人数=LimitNum,报名人数=WIllNum FROM Course【练习】使用其他两种方法,5、在查询结果中显示字符串 将要增加的字符串用单引号括起来,然后和列的名字写在一起,中间用逗号隔开。【问题】检索课程表的信息,要求给出检索结果为:课程名称 课程编码 SQL Server实用技术 课程编码为:001 SELECT 课程名称=CouName,课程编码为:,课程编码=CouNo FROM Course,6、使用WHERE限制检索的条
7、件 使用WHERE子句限制检索的范围,通常情况下,必须定义一个或多个条件限制检索选择的数据行。【例】检索上“Linux操作系统”课程的教师名。SELECT 教师=Teacher FROM Course WHERE CouName=Linux操作系统,7、表达式作为SELECT语句中的列 SELECT子句中的选项列表可以是要指定的表达式或列的列表,表达式可以是列名、函数或常数的列表。【例】要求检索课程表的课程信息,并显示报名人数和限制选课人数之比。SELECT*,WillNum/LimitNum FROM Course,【练习】检索课程表中最小的报名人数、最大的报名人数以及平均报名人数。使用聚合
8、函数AVG()、MAX()、MIN()、SUM()。聚合函数也可以出现在SELECT子句中。SELECT 最小的报名人数=MIN(WillNum),最大的报名人数=MAX(WillNum),平均报名人数=AVG(WillNum)FROM Course,8、使用ORDER BY子句重新排列检索结果 升序:使用ASC关键字或者省略。降序:使用DESC关键字。也可以在ORDER BY子句中指定多个列,检索结果首先按第1列进行排序,对第1列值相同的那些数据行,再按照第2行排序 ORDER BY要写在WHERE子句的后面。,【例】检索课程表的教师名、课程号、课程名,要求检索结果首先按教师名降序排列,教师
9、名相同时,则按课程号的升序排列。SELECT Teacher AS 教师名,CouNo AS 课程号,CouName AS 课程名 FROM Course ORDER BY Teacher DESC,CouNo,或者:SELECT Teacher AS 教师名,CouNo AS 课程号,CouName AS 课程名 FROM Course ORDER BY 教师名 DESC,课程号,9、使用IN(NOT IN)关键字【例】检索课程编码为001004013的课程名称方法一:使用逻辑运算符OR;SELECT CouName AS 课程名称 FROM Course WHERE CouNo=004 O
10、R CouNo=007 OR CouNo=013,方法二:使用IN关键字(比使用逻辑运算符更为简单)。SELECT CouName AS 课程名称 FROM Course WHERE CouNo IN(004,007,013)【练习】检索课程号不为004,007,013的课程号和课程名称。,10、使用LIKE(NOT LIKE)关键字 检索与给定的某些字符串相匹配的数据可以使用LIKE关键字。LIKE与字符串相匹配,字符串表达式被定义为字符串和通配符。,SQL的4个通配符:%百分号,匹配包括0个或多个字符的字符串。_下划线,匹配任何一个字符。排列通配符,匹配任何在范围内的单个字符,例如:m-p
11、匹配的是m、n、o、p单个字符。不在范围之内的字符,匹配任何不在范围内的单个字符,例如:m-p、mnop匹配的是除了m、n、o、p之外的任何字符。注:通配符和字符串要括在单引号中。,【练习】解释下面的通配符表示的意义 LIKED%匹配以字母D开始的字符串,LIKE制作匹配的是以“制作”两字结尾的字符串;LIKE-宝匹配的是第2个字为“宝”的字符串。如要查找通配符本身,需要将它们用方括号括起来。LIKE表示要匹配“”,LIKE5%表示要匹配“5”。,【问题】检索以“制作”两字结尾的课程名(使用LIKE)SELECT*FROM Course WHERE CouName LIKE%制作【问题】检索不
12、姓“刘”的学生信息(使用NOT LIKE)SELECT*FROM Student WHERE StuName LIKE 刘%OR SELECT*FROM Student WHERE StuName NOT LIKE 刘%,11、使用IS NULL关键字检索列中没有赋值的行【问题】检索课程表中教师未定的课程名称和教师名。SELECT 课程名称=CouName,教师=Teacher FROM Course WHERE Teacher IS NULL,12、使用BETWEENAND(NOT BETWEENAND)关键字用于检索在某一特定范围内的信息【问题】检索报名人数大于等于30并且小于等于40的课
13、程信息,要求显示课程名称和报名人数(使用BETWEENAND);【注意】WHERE WillNum BETWEEN 30 AND 40包括30和40这两个值。,【问题】对上例使用NOT BETWEENAND 也可以在WHERE字句中使用前面讲过的逻辑运算符检索某一范围内的信息。【练习】检索报名人数比限制选课人数多一倍以及一倍以上的课程信息,要求显示课程名称、报名人数和限制选课人数之比,并按该比例的降续排列。,13、使用COMPUTE子句计算总计或进行分组小计【问题】检索课程表中课程分类为“信息技术”的课程编码、课程名称、课程分类、报名人数,并计算平均报名人数。SELECT CouNo AS 课
14、程编码,CouName AS 课程名称,Kind AS 课程分类,WillNum AS 报名人数 FROM Course WHERE Kind=信息技术 COMPUTE AVG(WillNum),【说明】总计值或小计值作为附加新行出现在检索结果中。该子句用在WHERE子句之后。从检索结果可以看到:检索结果中有两个结果集。(1)包含选择的列的所有明细行;(2)包含COMPUTE子句中所指定的聚合函数的合计。,14、使用COMPUTE BY子句 使用COMPUTE BY对BY后面给出的列进行分组显示,并计算该列的分组小计。使用COMPUTE BY必须使用ORDER BY对COMPUTE BY中BY
15、指定的列进行排序。,【例】按类检索课程表中的课程编码、课程名称、课程分类、报名人数,并计算每类课程的平均报名人数。SELECT CouNo AS 课程编码,CouName AS 课程名称,Kind AS 课程分类,WillNum AS 报名人数FROM Course ORDER BY KindCOMPUTE AVG(WillNum)BY Kind,从检索结果可以看到:检索结果中有多个组,每个组有两个结果集;这两个结果集中的内容同上。【注意】必须使用ORDER BY排序要分组的列。【练习】检索周二上课的课程名称和教师名,并对符合条件的课程门数进行统计。(提示:先完成前一部分,再使用聚合函数COU
16、NT进行统计),问题 COMPUTE子句是在一个明细行的基础上增加一个总计或小计(有BY时),但如果只想统计每类课程的平均报名人数,该如何处理?,15、使用GROUP BY子句【问题】按课程分类统计每类课程的平均报名人数 SELECT Kind AS 课程分类,AVG(WillNum)AS 每类平均报名人数 FROM Course GROUP BY Kind,与上面例子的区别:只有一个结果集说明:(1)该子句用于将检索结果按照GROUP BY后指定的列进行分组,该子句写在WHERE子句后面。(2)GROUP BY子句经常用于SELECT子句中包含有聚合函数的情况。此时,SELECT子句中选项列
17、表中出现的列,只能是GROUP BY子句中的列或者包含在聚合函数中。,16、使用HAVING子句【问题】检索“信息技术”类课程的平均报名人数。SELECT Kind AS 课程分类,AVG(WillNum)AS 每类平均报名人数 FROM Course GROUP BY Kind HAVING Kind=信息技术,说明:1.HAVING经常用在GROUP BY子句之后,用于限定结果集中的分组。2.也可以使用WHERE子句。3.可以看到,HAVING子句是对结果进行过滤,而WHERE是对原始记录进行过滤。【注意】HAVING子句中的列只能是GROUP BY子句中或者聚合函数中的列。,【问题】检索
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Transact SQL 语言 概述
链接地址:https://www.31ppt.com/p-6522114.html