第4章T-SQL与可编程对象.ppt
《第4章T-SQL与可编程对象.ppt》由会员分享,可在线阅读,更多相关《第4章T-SQL与可编程对象.ppt(121页珍藏版)》请在麦多课文档分享上搜索。
1、第4章T-SQL与可编程对象,SQL语言是结构化查询语言(Structure Query Language)的简称,它是一个通用的、功能强大的关系数据库操作语言,最初由IBM公司在20世纪70年代中期开发成功。并被国际标准化组织采纳为关系数据库语言的国际标准。 Transact-SQL( 简称T-SQL)是SQL Server中支持的扩展SQL语言,它提供了数据定义、数据操纵、数据控制等语句,支持对数据库的操纵和管理,是开发数据库应用程序的基本语言。 SQL Server支持采用T-SQL语言定义服务器端应用程序,这些应用程序被统称为可编程对象。,4.1.1 T-SQL概述,1. T-SQL语
2、言的特点 1)非过程化 :使用T-SQL时,不必描述解决问题的全过程,只需提出“做什么”,至于“如何做”的细节则由语言系统本身去完成并给出操作的结果。 2)两种不同的使用方式:两种方式下,T-SQL语言的语法结构基本相同。 联机交互方式:SQL语言可独立使用 嵌入程序设计语言中:例如嵌入C#、VB.net中。 3) 高度一体化:集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)和T-SQL增加的语言元素于一体,可独立完成数据库生命周期的所有活动。 4) 语言简洁、易学易用。,面向过程的程序设计语言,必须一步 一步地将解题的全过程描述出来,不 仅要告诉计算机“做什么”,而且
3、还 要告诉计算机“怎么做”。,2.T-SQL语言的组成元素 DDL(Data Definition Language) 数据库定义语言,用于定义或修改数据库。包括Create、Alter、Drop等语句。 例如:Create DATABASE Student DML(Data Manipulation Language) 数据库操纵语言,实现对数据库基本操作,包括Selete、Insert 、Update、Delete等语句。 DCL(Data Control Language) 数据库控制语言,实现对数据对象的授权、数据完整性规则描述及控制事务等,包括Grant、Revoke、Deny等语句
4、。 T-SQL增加的语言元素 变量、运算符、函数、流程控制语句和注解等。,3T-SQL语言书写规则,在T-SQL语句中,不区分字母大小写,即大小写字母的意义完全相同。, 一条语句可以写在一行,也可以写在若干行上。,在本讲义中: 为了阅读方便,用大写字母书写SQL语句的关键词,用小写字母书写标识符、表达式及各种参数; 为了体现语法结构,一条语句写在多行上。,例如: SELECT * FROM Student,4注释 为了增强程序代码的可读性,可在适当的地方加上注释。 T-SQL有两种注释方法: 单行注释(-)。语法格式如下: - 注释文本内容 多行注释(/* */)。语法格式如下: /* 注释文
5、本内容*/ 例如: USE School /*打开School数据库。当第一次访问某数据库时,需要使用USE语句打开数据库,否则其他访问该数据库的SQL语句不能执行*/ SELECT * FROM Student -查询显示学生表中所有学生的信息,数据定义语言主要是定义数据库中的对象,包括数据库、数据表、视图、索引、存储过程、触发器等的建立或修改。常用语句如下:,4.1.2 数据定义语言DDL,1DDL概述,如果想查看或保存已存在的数据库对象的DDL语句,可在SQL Server Management Studio中自动生成各种数据库对象的SQL脚本 ,也可将其保存到一个扩展名为.sql的文件
6、中 ,在查询编辑器中可打开.sql文件,执行SQL脚本,重建相应的数据库 。,提示:使用SQL定义脚本重建的数据库不包括表中数据。,2自动生成数据库定义的SQL脚本,前面已经学习过使用SQL Server Management Studio创建各种数据库对象,实质上手工创建的过程就是在构建DDL语句。,SQL脚本的生成方法如下:, 右击要生成SQL脚本的数据库或数据表,选“编写数据库(或表)脚本为/Create到/新查询编辑窗口”。, 在“查询编辑”窗口可查看和复制SQL脚本。选择“文件/保存”或“文件/另存为”菜单可将这些SQL脚本保存到一个扩展名为“.sql”的文本文件。, 使用“文件/打
7、开”菜单可打开脚本文件。执行可创建新的表。,(1)创建数据库,【例4.1】创建一个名为SchoolTest的数据库。,3几个常用DDL语句,CREATE DATABASE 数据库名 ON NAME=逻辑文件名, FILENAME=物理文件名,答案1 : CREATE DATABASE SchoolTest -数据库名,提示: 表示可选项,以系统数据库model作为模板在SQL Server安装文件夹的Data文件夹下(一般为C:Program FileMicrosoft SQL ServerMSSQLData)建立数据库文件SchoolTest.mdf(大小为3MB)和日志文件SchoolTe
8、st_log.LDF(大小为1MB)。,答案2 : CREATE DATABASE SchoolTest -数据库名 ON (NAME=SchoolTest, -主数据文件逻辑名 FILENAME=D: SchoolTest.MDF) -主数据文件物理名,创建了一个数据库SchoolTest,其主数据文件为大小为3MB的D:SchoolTest.mdf“ ;并且自动创建一个大小为1MB的“D:SchoolTest_log.LDF”作为日志文件。,(2)打开和删除数据库语句,打开数据库: USE 数据库名 -其中数据库名是要打开作为当前数据库的数据库例如:USE School -打开数据库Sch
9、ool,当用户登录到SQL Server后,系统指定系统数据库master作为默认当前数据库。所谓当前数据库是指当前可以操作的数据库。,删除数据库: DROP DATABASE 数据库名 例如: DROP DATABASE SchoolTest -删除SchoolTest,注意删除数据库时不允许该数据库有对象处于打开状态。,(3)建立数据表语句,CREATE TABLE数据表名 (列名 列数据类型 列约束Constraint 约束说明 ),【例4.2】在数据库“SchoolTest”中建立学生表StudentTest。,CREATE TABLE StudentTest(StudentCode
10、CHAR(8) NOT NULL UNIQUE, /*不允许空,取值唯一*/ StudentName VARCHAR(16) NOT NULL, Sex CHAR(2) NOT NULL, LiveInDorm BIT DEFAULT 1, /*默认值为1*/ Constraint StudentPK Primary Key(StudentCode),/* StudentCode主键*/ Constraint SexCheck Check(Sex=男 or Sex=女) /* Sex检查约束*/ ),【例4.3】删除StudentTest表。,(4)删除表语句,当数据表不再需要时,可以使用DR
11、OP TABLE语句将其删除。,DROP TABLE 数据表名,DROP TABLE StudentTest,(5)建立索引语句,【例4.4】在StudentTest表的姓名(StudentName)和生日(Birthday)字段上建立唯一索引NameIndex, 姓名按升序排列,姓名相同时,按生日降序排列。,(6)删除索引语句,CREATE INDEX 索引名 ON 数据表名(字段 ASC|DESC) -默认为索引顺序为ASC。,DROP INDEX 数据表名.索引名,【例4.5】删除StudentTest表中名称为NameIndex的索引。,CREATE UNIQUE INDEX Name
12、Index onStudentTest (StudentName, Birthday DESC),DROP INDEX StudentTest.NameIndex,4.1.3数据操纵语言DML,SELECT 语句:从一个表或多个表查询数据 INSERT语句:向一个表中添加一条记录 UPDATE语句:修改表中某一个或几个字段的值 DELETE语句:从一个表中删除记录,DML语句实现对数据的查询和更新,主要语句及功能如下:,1查询语句SELECT,又称为选择查询语句,用于从数据库的一个或多个表中检索满足一定条件的记录集,并按一定顺序显示指定的字段内容。,SELECT 字段表 FROM 表名 WHE
13、RE 查询条件 GROUP BY 分组字段 HAVING 分组条件 ORDER BY 字段名 ASC/DESC , 表示可选项。 第2行至最后一行称作SQL子句,不同的子句完成不同的功能。 在书写SELECT语句时,字母大小写意义完全相同。 语句可以写在若干行上(如上述语法格式中的描述),也可以不换行。,字段表位于关键字SELECT后面,这些字段将作为查询的结果被显示。,可选任意多个字段,字段与字段之间用逗号分隔。,【例4.6】查询Student表中的所有学生的姓名和性别。,(1) 字段表,SELECT StudentName, Sex FROM Student,可以使用通配符“*”表示表中的
14、所有字段。,【例4.7】查询Student表中所有学生的全部字段信息。,SELECT * FROM Student, 若字段名或表名中含有空格,则该字段名或表名必须用方括号括起来 。,在字段表中,可以使用如下方式将原字段名以字段别名显示: 字段名 AS 字段别名,【例4.8】查询Class表中班号和班名班号别名为Class Number 。,提示: “Class Number”含空格,要写为Class Number,SELECT ClassCode AS Class Number, ClassName FROM Class,SELECT ClassCode AS 班级编号, ClassName
15、 AS 班级名称 FROM Class,在字段名前可以加上一些关键字,以便进一步优化查询结果。常用的关键字有:,DISTINCT:若多条记录的字段值具有相同数据,只显示一条记录。,【例4.11】显示Course表中开课的学院名称Academy(与所开课程无关)。,SELECT DISTINCT Academy FROM Course,由于每个学院都开设了多门课程,因此多条记录在字段Academy具有部分相同的值。,增加Distinct限制后,查询结果中相同的值只显示一次。,TOP n |m PERCENT:查询前n条记录或前m%的记录。,【例4.9】查询Course表中的前3条记录。,【例4.
16、10】查询Course表中前20%的记录,显示课程号和课程名称。,SELECT TOP 3 * FROM Course,SELECT TOP 20 PERCENT CourseCode, CourseName FROM Course, 新增字段查询。查询的字段可以是表中字段名,也可以是常量和表达式,表达式中可以使用内部聚合函数进行统计计算。,常用函数表,【例4.12】 查询Grade表,显示学号、所选课程号及加2分调整后的成绩(Grade),并显示一列说明 “情况属实”。,【例4.13】查询Grade表,统计所有学生的分数总和、平均分、最高分、最低分及总选课人次。,SELECT Student
17、Code, CourseCode, Grade+2 AS 成绩, 情况属实 AS 说明 FROM Grade,SELECT Sum (Grade) AS 总分, Avg(Grade) AS 平均分, Max (Grade) AS 最高分, Min(Grade) AS 最低分, Count(StudentCode) AS 总人次 FROM Grade,【例4.14】将Student表中所有记录的学生姓名、出生日期复制到一张新表NewTable。, 使用查询创建新表。在字段名后加上“INTO 表名”可将查询结果复制到一张新表中。,StudentName, BirthDay INTO NewTabl
18、e FROM Student,提示:语句运行后,数据库School中产生一张表名为NewTable的新表。刷新数据库,即可查看到。,(2)FROM子句,FROM子句是SELECT语句必不可少的一个子句,指定要查询的数据来自哪个或哪些表或视图。,FROM 表名1 ,表名2,表名n,【例4.15】查询Student表和Grade表,显示学生的选课和成绩情况。,SELECT Grade.StudentCode, StudentName, CourseCode, Grade FROM Student, Grade WHERE Grade.StudentCode=Student.Studentcode,
19、SELECT StudentCode, StudentName, CourseCode, Grade FROM Student, Grade (),注意:表的排列顺序不影响执行结果;如果FROM子句中包含多个表名,且不同的表中具有相同的字段,那么SELECT子句的字段名必须表示成“表名.字段名”。,(3)WHERE子句,WHERE子句说明查询条件,它是一个可选的子句。它必须紧跟在FROM子句的后面。,WHERE 查询条件,T-SQL中常用的关系和逻辑运算,其中,查询条件是一个关系或逻辑表达式。, 比较和逻辑运算,【例4.16】查询Student表中所有女学生的姓名。,【例4.17】查询未住校的
20、女学生的情况。,SELECT StudentCode,StudentName, LiveInDorm FROM Student WHERE LiveInDorm=0 AND Sex=女,SELECT StudentName FROM Student WHERE Sex=女, BETWEENAND运算,BETWEEN 值1 AND 值2,NOT BETWEEN 值1 AND 值2,【例4.18】在Grade表中查询选修课程号为“101”、成绩在70分到90分之间的所有学生,显示其学号及成绩。,查询某字段的值在指定范围内的数据记录(结果包括值1和值2)。,查询不在指定范围中的数据记录。,SELEC
21、T StudentCode, CourseCode, Grade FROM Grade WHERE CourseCode= 101 AND Grade BETWEEN 70 AND 90,此例的WHERE子句也可以改为: WHERE CourseCode=101 AND Grade= 70 AND Grade=90,【例4.19】查询Student表中不在1990年到1994年中出生的学生的学号和姓名。,SELECT StudentCode, StudentName, Birthday FROM Student WHERE Birthday NOT BETWEEN 1990-01-01 AND
22、 1994-12-30,在WHERE子句中可 使用Year()函数: SELECT StudentCode, StudentName, Birthday FROM Student WHERE Year(Birthday) NOT BETWEEN 1990 AND 1994,确定在集合中的IN运算:查询某字段值在或不在某集合的数据记录,【例4.20】查询Student表中班号为“11”、“21”、“31”的学生。,SELECT StudentCode, StudentName, Sex, ClassCode FROM Student WHERE Classcode IN (11,21,31),此
23、例的WHERE子句也可以改为: WHERE ClassCode=11 OR ClassCode=21 OR ClassCode=31,字符串模式匹配的LIKE运算:确定某字符字段的子串值是否符合指定的模式,可查询满足字符串匹配的数据记录。,例如: 姓“王”的名字: 王%; 第2个字是“小”的姓名: _小% 姓“张”的单名: 张_,【例4.21】查询Course表中课程名称中包含“化学”两个字的课程号及课程名称。,【例4.22】查询Student表中不姓“王”的学生 。,SELECT CourseCode,CourseName FROM Course WHERE CourseName LIKE
24、%化学%,SELECT StudentCode, StudentName FROM Student WHERE StudentName LIKE 王%,【例4.30】统计每门课程的选课人数和平均分。,(4) GROUP BY子句 :用于对数据记录进行分类汇总,即按指定字段把具有相同值的记录通过汇总计算合并成一条记录。,GROUP BY 分组 HAVING 分组条件 ,HAVING子句:与WHERE子句作用类似,在使用GROUP BY完成分组后,显示满足HAVING子句中分组条件的所有记录。,SELECT CourseCode, Count(StudentCode) AS 选课人数, STR(A
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TSQL 可编程 对象 PPT
