《Transact-SQL基础》PPT课件.ppt_第1页
《Transact-SQL基础》PPT课件.ppt_第2页
《Transact-SQL基础》PPT课件.ppt_第3页
《Transact-SQL基础》PPT课件.ppt_第4页
《Transact-SQL基础》PPT课件.ppt_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

1、SQL(Structured Query Language)是一种面向问题的结构化查询语言,是一种非过程化语言。 SQL集数据定义(Definition)、数据查询(Query)、数据操纵(Manipulation) 和数据控制(Control)功能于一体,语言简捷自然,易学易用。,GRANT,REVOKE,数据控制 DCL,INSERT,UPDATE,DELETE,数据操纵 DML,CREATE,DROP,ALTER,数据定义 DDL,SELECT,数据查询 DQL,动 词,功能,5.1 TSQL概述,5.1 TSQL概述,T-SQL语言,在标准SQL语言的基础上增加了变量定义、流程控制等编

2、程语句,从而可以实现流程化数据操纵。,SQL语句,一个分支流程控制语句,5.1 TSQL概述,这里编辑命令,命令运行的结果,命令工具,提示:可以选择部分命令执行,5.2 TSQL 数据查询语句,最基本的SELECT语句的语法结构,5.2 TSQL 数据查询语句,“画”SELECT语句,待查询的表,构造结果列与条件等,构造出的查询语句,5.2 TSQL 数据查询语句,投影查询SELECT子句制定结果的列,用“*”选择所有列,原始数据,查询结果有所有列,5.2 TSQL 数据查询语句,投影查询SELECT子句制定结果的列,指定只查某几列,列之间用逗号分隔,原始数据,查询结果只有指定的这几列,5.2

3、 TSQL 数据查询语句,投影查询SELECT子句制定结果的列,结果中的列另取列名,原始数据,三种引导方式都可以,5.2 TSQL 数据查询语句,投影查询SELECT子句制定结果的列,列可为任意表达式,原始数据,查询结果,GetDate( )得出当前时间 Year(D)求出日期D的年,5.2 TSQL 数据查询语句,投影查询SELECT子句制定结果的列,用DISTINCT消除查询中结果重复的行,原始数据,只有这5种不同的职称取值,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,简单比较,格式为:NOT表达式 其中可以是:=,=,!,原始数据,查询结果,5.2 TSQL

4、数据查询语句,选择查询WHERE子句如何选择源数据行,限定范围,格式为: NOT BETWEEN AND ,原始数据,其实条件就是: 1200工资2000 否定时只需写成: 工资 Not Between,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,集合检查,格式为: NOT IN (值列表) 其中各个值之间用逗号分隔,原始数据,其实条件就是: 工资=800 or 工资=1200 or 工资=1500,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,空值检查,格式为: IS NOT NULL,原始数据,注意空值和空白的区别,对允许为空的列才有意

5、义!,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,字符匹配,用于匹配字符、日期,格式为: NOT LIKE ESCAPE 转义符 串模式中可出现以下通配符: “%”匹配任意多个任意字符(包括空字符); “_”匹配一个任意字符(不能是空字符); “字符序列”匹配指定字符序列中的一个字符; “字符序列”匹配不包含在字符序列中的任一字符。,例如To%代表Tool、Toy、To等以To开头的任意字符串;又如B_T可代表BIT、BaT等头为B尾为T的只有3个字符的任意串,但不能代表BoaT等。,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,字符匹配示

6、例,原始数据,姓刘不就是以“刘”字开头的姓名吗,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,字符匹配示例,原始数据,查询出只有1人,名字最后一字为“明”的实际有4人,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,字符匹配示例,原始数据,查询结果,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,字符匹配示例,原始数据,否定时可以是下面两种格式: 姓名 Not Like 陈王潘楚% 姓名 Like 陈王潘楚%,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,字符匹配中转义符的用法,如果查询的串中要

7、包含“%”等通配符,则必须用转义符告诉SQL解释器将通配符转义为实实在在的字符,这里的下划线是要匹配的实际字符所以要转义,转义符可以为除通配符以外的任意字符 如上例条件亦可为: 姓名 LIKE %_% ESCAPE ,5.2 TSQL 数据查询语句,选择查询WHERE子句如何选择源数据行,复合条件 用AND,OR联接多个条件组成逻辑表达式,即性别为男且职称为讲师,或者性别为女且职称为助教的教师,5.2 TSQL 数据查询语句,排序查询ORDER BY 子句,ASC(缺省)表示升序DESC表示降序。,原始数据,工资从小到大排列,Order by Twage DESC就可实现降序排列,5.2 TS

8、QL 数据查询语句,排序查询ORDER BY 子句,ASC(缺省)表示升序DESC表示降序。,原始数据,每个排序字段都有独立的排序方式 不要误解成按工资和生日的降序排列,5.2 TSQL 数据查询语句,使用聚合函数,列统计方式下是不会统计空值的!,5.2 TSQL 数据查询语句,使用聚合函数,使用聚合函数示例,原始数据,*即整行的意思,只有Count才能用*,5.2 TSQL 数据查询语句,使用聚合函数,使用聚合函数示例,原始数据,按不重复的职称列的值计数,注意空值不计数,实际有这5种职称值,5.2 TSQL 数据查询语句,使用聚合函数,使用聚合函数示例,原始数据,多项统计可以在一条命令中实现

9、。 ound(,N)表示对数值M四舍五入到N位小数,5.2 TSQL 数据查询语句,分组统计查询,所谓分组就是查询时将分组列值相同的行归为一组。 分组后查询的单位是组而非行,对各组只能投影其分组列,而非分组列只能用聚合函数进行统计。 查询有各个系的人数: SELECT 系名,Count(*) FROM ST GROUP BY 系名,ST,分组列,非分组列,5.2 TSQL 数据查询语句,分组统计查询,原始数据,所以只有这5组结果,分组示意,因为只有这5种职称,使用GROUP BY子句进行分组,可以By多个列名来实现多级分组,5.2 TSQL 数据查询语句,分组统计查询,用Having子句限定只

10、查询满足条件的Group by分组,条件是分组中的行数不小于5,按职称分组统计的人数,HAVING后跟的条件必须是跟分组有关的条件,5.2 TSQL 数据查询语句,分组统计查询,用With Cube/Rollup子句汇总Group by分组,Group by 分组的结果,With Cube统计的结果,5.2 TSQL 数据查询语句,分组统计查询,用COMPUTE子句完成查询后再进行统计。,跟平常一样的查询,Compute出的结果,5.2 TSQL 数据查询语句,分组统计查询,用COMPUTE BY子句附加分组计算,注意被分组的列必须要排序。,男讲师,女讲师,附加统计的男教师的平均工资,附加统计

11、的女教师的平均工资,分组字段要排序,多表连接查询,5.2 TSQL 数据查询语句,多表查询指在两张以上的相关表中进行查询,从而实现将存储于不同表中的数据连接成完整的查询信息。,SELECT ST.姓名, C.课名 FROM ST,C WHERE ST.课号 = C.课号,ST,C,按名称查询哪位学生选了哪几门课,多表连接查询,5.2 TSQL 数据查询语句,最基础的连接是交叉连接(笛卡尔积),即以行为单位对各表中的行进行排列组合,结果的行数为各表行数之积,结果的列数为各表列数之和。,SELECT ST.*, C.* FROM ST,C,结果有32=6行,ST的列,C的列,ST,C,多表连接查询

12、,5.2 TSQL 数据查询语句,真正有意义的连接应该是对基础连接的结果进行投影和选择,SELECT ST.姓名, C.课名 FROM ST,C WHERE ST.课号 = C.课号,ST,C,ST与的交叉连接,课号相等才有意义吧,多表连接查询,5.2 TSQL 数据查询语句,T-SQL多表连接查询的一般格式: SELECT FROM 表1,表2, WHERE 连接条件 ANSI多表连接查询的一般格式: SELECT FROM 表1 连接方式 JOIN 表2 ON 连接条件 其中连接方式可以为内连接(INNER)、左外连接(LEFT OUTER)、右外连接(RIGHT OUTER)、全外连接(

13、FULL OUTER),一般用于内连接,可以实现各种方式的连接,多表连接查询,5.2 TSQL 数据查询语句,一般情况下的连接都是内连接,即只连接完全符合条件的行,SELECT ST.姓名, C.课名 FROM ST,C WHERE ST.课号 = C.课号,SELECT 姓名,课名 FROM ST INNER JOIN C ON ST.课号 = C.课号,等价,ST,C,查询学生姓名及其所学课程的名称,赵六呢? C语言和数据库课呢?,多表连接查询,5.2 TSQL 数据查询语句,要查询其中一张连接表的所有行时就需要用外连接,结果中用空值(NULL)来填充无法连接的数据,ST,C,SELECT

14、 姓名,课名 FROM ST LEFT OUTER JOIN C ON ST.课号 = C.课号,结果包含了左表的所有行的连接称为左外连接,查询出所有学生的选课情况,不管他是否有课,多表连接查询,5.2 TSQL 数据查询语句,要查询其中一张连接表的所有行时就需要用外连接,结果中用空值(NULL)来填充无法连接的数据,ST,C,SELECT 姓名,课名 FROM ST RIGHT OUTER JOIN C ON ST.课号 = C.课号,结果包含了右表的所有行的连接称为右外连接,查询出所有课程与学生的关系,不管它是否有学生选,多表连接查询,5.2 TSQL 数据查询语句,左/右外连接是相对而言

15、的,是可以相互转换的!,ST,C,SELECT 姓名,课名 FROM ST LEFT OUTER JOIN C ON ST.课号 = C.课号,SELECT 姓名,课名 FROM C RIGHT OUTER JOIN ST ON C.课号 = ST.课号,等价,多表连接查询,5.2 TSQL 数据查询语句,左/右外连接的并集就是全外连接!,SELECT 姓名,课名 FROM ST FULL OUTER JOIN C ON ST.课号 = C.课号,ST,C,查询出所有课程与所有学生的选课关系,5.2 TSQL 数据查询语句,交叉联接,无条件将两表的行联接,其实就是前面所说的基础联接,ST,C,

16、SELECT * FROM ST CROSS JOIN C,SELECT * FROM ST,C,等价,5.2 TSQL 数据查询语句,自联接,表自己和自己联接,C,PRE,SELECT C.课名, PRE.课名 AS 先修课 FROM C, C AS PRE WHERE C.先修课号 = PRE.课号,信息都在此表中,相当于另一张与C相同的表,多表连接查询,5.2 TSQL 数据查询语句,查询学生选修的课程及老师,ST,T,C,SELECT ST.姓名,C.课名,T.教师名 FROM ST,C,T WHERE ST.课号 = C.课号 AND C.教师 = T.工号,仔细分析各表间的内在联系

17、!,T-SQL方式,多表连接查询,5.2 TSQL 数据查询语句,查询学生选修的课程及老师,ST,T,C,仔细分析各表间的内在联系!,SELECT ST.姓名,C.课名,T.教师名 FROM ST JOIN C JOIN T ON C.教师 = T.工号 ON ST.课号 = C.课号,ANSI级联式,多表连接查询,5.2 TSQL 数据查询语句,查询学生选修的课程及老师,ST,T,C,仔细分析各表间的内在联系!,SELECT ST.姓名,C.课名,T.教师名 FROM C JOIN ST ON ST.课号 = C.课号 JOIN T ON C.教师 = T.工号,ANSI一对多式,5.2 T

18、SQL 数据查询语句,ST,集合查询,SQL Server 2008提供了并(UNION)、差(EXCEPT)和交(INTERSECT)三种集合操作。,查询CS系及MA系的学生,SELECT * FROM ST WHERE 系 = CS UNION SELECT * FROM ST WHERE 系 = MA,等价,SELECT * FROM ST WHERE 系 = CS OR 系 = MA,嵌套查询,5.2 TSQL 数据查询语句,在一条查询语句的某一个子句(多数为WHERE)中又包含有一个查询语句的查询称为嵌套查询。 被包含的查询称为子查询或内层查询。 包含子查询的查询称为外层查询或父查询

19、。 SQL-Server 2005支持32层嵌套查询。 子查询必须写在一对圆括号中。,SELECT 姓名 FROM 学生表 WHERE 系名 = ( SELECT 系名 FROM 学生表 WHERE 姓名=刘安邦 ),子查询,外查询,嵌套查询,5.2 TSQL 数据查询语句,用构造单值(1行1列)条件,其中为=,=,=,!=等比较运算符。,ST,设不允许学生重名,查询与王军同一个系的学生姓名 SELECT 姓名 FROM ST WHERE 系名 = ( SELECT 系名 FROM ST WHERE 姓名 = 王军 ),子查询得到王军所在的系名,想一想为什么要不准学生重名?,嵌套查询,5.2

20、TSQL 数据查询语句,ST,SELECT 姓名,年龄 FROM ST WHERE 年龄 ( SELECT 年龄 FROM ST WHERE 姓名 = 陈东 ),李华的年龄,陈东的年龄,设不允许学生重名,查询比李华年龄小但比陈东年龄大的学生的姓名和年龄,嵌套查询,5.2 TSQL 数据查询语句,ST,SELECT 学号,姓名 FROM ST WHERE 系 = ( SELECT 系 FROM ST WHERE 年龄 = ( SELECT MIN(年龄) FROM ST ) ),最小的年龄,最小年龄学生的系,设ST中的年龄都不相同,查询与年龄最小的学生同在一个系的学生的学号和姓名,嵌套查询,5.

21、2 TSQL 数据查询语句,ST,C,查询选了“软件工程”课程的学生的学号和姓名,SELECT 学号,姓名 FROM ST WHERE 选修 = ( SELECT 课号 FROM C WHERE 课名=软件工程 ),软件工程课的课号,嵌套查询,5.2 TSQL 数据查询语句,用 ANY/ALL构造多值(多行1列)条件,其中为=,=,=,!=等比较运算符。,ST,查询至少有一门课和张三相同的学生姓名,且结果中不能有张三,SELECT DINSTINCT 姓名 FROM ST WHERE 选修 = ANY ( SELECT 选修 FROM ST WHERE 姓名=张三 ) AND 姓名 != 张三

22、,张三选修的课,嵌套查询,5.2 TSQL 数据查询语句,查询其它系中年龄比CS系全体教师年龄都小的教师姓名,SELECT 姓名 FROM T WHERE 年龄 ALL ( SELECT 年龄 FROM T WHERE 系 = CS) AND 系 != CS,CS系老师的年龄,T,用 ANY/ALL构造多值(多行1列)条件,其中为=,=,=,!=等比较运算符。,嵌套查询,5.2 TSQL 数据查询语句,IN 等价于 = ANY,SELECT 姓名 FROM ST WHERE 选修 IN ( SELECT 选修 FROM ST WHERE 姓名 = 张三 ) AND 姓名 != 张三,ST,查询

23、至少有一门课和张三相同的学生姓名,且结果中不能有张三,张三选修的课,嵌套查询,5.2 TSQL 数据查询语句,EXISTS引导的子查询不返回数据,而是返回是否存在子查询元组的判断。 对EXISTS来说,若子查询的结果非空,则返回真,否则返回假;对NOT EXISTS来说,若子查询的结果非空,则返回假,否则返回真。 查询时主查询根据子查询返回的真假来取舍元组。 构造子查询的查询条件时要引用父查询表的某个属性列,这种查询称为相关子查询。 子查询中指定列名无实际意义(分组子查询除外)。,嵌套查询,5.2 TSQL 数据查询语句,查询至少有一门课不及格的学生姓名,ST,SC,SELECT 姓名 FRO

24、M ST WHERE EXISTS (SELECT * FROM SC WHERE SC.学号 = ST.学号 AND SC.成绩 60 ),每一个学生都要做判断,查询该学生的不及格的课程,嵌套查询,5.2 TSQL 数据查询语句,查询所有课程都及格了的学生姓名,ST,SC,SELECT 姓名 FROM ST WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.学号 = ST.学号 AND SC.成绩 60),其实就是不存在该学生的不及格的课程,嵌套查询,5.2 TSQL 数据查询语句,查询选了所有课程的学生姓名,SELECT 姓名 FROM ST WHER

25、E NOT EXISTS (SELECT * FROM C WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.学号=ST.学号 AND SC.课号=C.课号)),语义可以理解为不存在该学生有一门课没有选。,ST,SC,C,该学生选了这门课,该学生没选的课,嵌套查询,5.2 TSQL 数据查询语句,查询学生的姓名及其所选课程的数量,ST,SC,嵌在SELECT子句中,SELECT 姓名, ( SELECT COUNT(*) FROM SC WHERE SC.学号=ST.学号 ) AS 课程数 FROM ST,嵌套查询,5.2 TSQL 数据查询语句,查询学生

26、的姓名及其所选课程的数量,ST,SC,SELECT Tmp.姓名, COUNT(课号) AS 课程数 FROM ( SELECT 姓名,课号 FROM ST LEFT JOIN SC On SC.学号=ST.学号 ) AS Tmp GROUP By Tmp.姓名,嵌在FROM子句中,5.2 TSQL 数据查询语句,ST,SELECT 姓名,性别,系 INTO student_m FROM ST WHERE 性别=男,SELECT子句 INTO FROM 子句 其它子句,查询男学生的姓名、性别和系,并将结果存储到名为“student_m”的新表中。,存储查询结果,插入行,5.3 TSQL 数据操纵语句,插入单个元组 INSERT INTO (,.) VALUES ( ,.),INSERT INTO S VALUES(98004,陈宇,女,19,IS,成都),为IS系增加一名学号为98004,来自成都的名叫陈宇的19岁女学生。,INSERT INTO S(姓名,学号) VALUES(邓红,98005),增加一名学号为98005,名叫邓红的学生。,S,插入行,5.3 TSQL 数据操纵语

温馨提示

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

评论

0/150

提交评论