第7章TSQL数据治理.docx
- 文档编号:26786180
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:24
- 大小:23.51KB
第7章TSQL数据治理.docx
《第7章TSQL数据治理.docx》由会员分享,可在线阅读,更多相关《第7章TSQL数据治理.docx(24页珍藏版)》请在冰豆网上搜索。
第7章TSQL数据治理
第7章T-SQL数据治理
目录Transact-SQL基础SQL标识符常量变量运算符运算符的优先级表达式注释
SQL标识符
SQL标识符:
用户概念的SQLServer可识别的有特定意义的字符序列。
遵循规那么:
①标识符长度:
1~128个字符。
②可利用字符:
字母、数字、#、$、@和下划线“_”。
③第一个字符:
字母、下划线“_”、@和#。
④不能包括空格,也不能利用SQL关键字。
⑤能够利用汉字作为标识符。
SQL标识符的用途:
通经常使用于表示效劳器名、数据库名、表名、常量、变量和其他数据库对象名,如:
视图、函数和存储进程等。
举例:
student、student_info、course_info等。
说明:
存储进程sp_validname查验标识符是不是有效。
常量
常量也称为文字值或标量值,是指程序运行中值不变的量。
常量类型
常量表示说明
字符串常量
包括在单引号或双引号中,由字母(a~z、A~Z)、数字字符(0~9)以及特殊字符(如!
、@、#)组成
二进制常量
只有0或1构成的串,并且不使用引号。
如果使用一个大于1的数字,它将被转换为1
十进制整型常量
使用不带小数点的十进制数据表示
十六进制整型常量
使用前缀0x后跟十六进制数字串表示
日期时间常量
使用单引号将日期时间字符串括起来组成,如'2008-8-8 8:
08:
08'
实型常量
有定点和浮点两种表达形式
货币常量
以前缀为可选的小数点和可选的货币符号的数字字符串来表示
变量
变量:
指在程序运行进程中值能够发生转变的量。
经常使用于保留程序运行进程中的计算结果或输入/输出结果。
SQLServer变量分为:
●全局变量:
系统概念和保护
●局部变量:
用户概念,用来保留中间结果
规那么:
①遵循“先概念再利用”的原那么
②利用“合法”标识符概念变量
③变量取名最好能能“见名知义”
变量---全局变量
全局变量:
以@@作为前缀,是SQLServer系统提供并赋值的变量。
经常使用来跟踪范围和特定会话期间的信息。
用户不能成立也不能修改全局变量的值。
通常将全局变量的值赋给局部变量以便保留和处置。
例如:
select@@VERSIONas'版本'
变量---局部变量
局部变量:
是作用域局限在必然范围内的T-SQL对象。
通常情形下,局部变量在一个批处置(存储进程或触发器)中被声明或概念,然后该批处置内的SQL语句就能够够设置那个变量的值或引用那个变量已经被给予的值。
当那个批处置终止后,那个变量的生命周期也随之终止。
用途:
一样用在批处置、存储进程和触发器中。
变量---局部变量
1.局部变量的声明
语法:
DECLARE@变量名数据类型[,…]
举例:
DECLARE@nameCHAR(10),@classint
2.参数说明
①局部变量名前面必需加上字符“@”。
②同时声明几个变量需要用“,”分隔。
变量---局部变量
3.局部变量的赋值
借助以下几种方式给局部变量赋值。
(1).通过SET
语法:
SET@变量名=表达式
参数说明:
①局部变量没有赋值时其值是NULL。
②一个SET语句不能同时对几个变量赋值。
举例:
SET语句的赋值操作。
DECLARE@NUMINT,@CNUMCHAR(10)
SET@NUM=2004
SET@CNUM='2004'
PRINT@NUM
PRINT@CNUM
(2).通过SELECT
语法:
SELECT@变量名=表达式[,…]
[FROM表名][WHERE条件表达式]
参数说明:
①SELECT能够同时给几个变量赋值。
②省略FROM等同SET。
假设不省略,那么将查询到的记录数据赋给局部变量,假设返回多行记录,那么最后一行记录数据赋给局部变量。
举例:
SELECT语句的赋值操作。
比较SELECT有WHERE和无WHERE的结果的区别。
DECLARE@nameCHAR(10),@ageint
SELECT@name=Stu_Name,@age=Sage
FROMStudent
WHEREStu_ID='200611012901'
PRINT@name
PRINT@age
运算符
运算符
说 明
赋值运算符
=(赋值)
算术运算符
+(加)、-(减)、*(乘)、/(除)、%(取模)
字符串连接运算符
+(连接))
位运算符
&(位与)、→(位或)、^(位异)
比较运算符
=(等于)、>(大于)、<(小于)、>=(大于或等于)、<=(小于或等于)、<>(不等于或!
=)、!
<(不小于)、!
>(不大于)
逻辑运算符
ALL(所有)、AND(与)、ANY(任何一个)、BETWEEN(两者之间)、EXISTS(存在)、IN(在……范围内)、LIKE(匹配)、NOT(非)、OR(或者)
一元运算符
+(正)、-(负)、~(取反)
运算符的优先级
优先级
运算符
1
~(位非)
2
*(乘)、/(除)、%(取模)
3
+(正)、-(负)、+(加)、+(连接)、-(减)、&(位与)
4
=、>、<、>=、<=、<>、!
=、!
<、!
>(比较运算)
5
^(位异或)、|(位或)
6
NOT
7
AND
8
ALL、ANY、BETWEEN、IN、LIKE、OR、
表达式
在T-SQL语言中,表达式是标识符、常量、值和运算符的组合。
表达式能够对其求值以获取结果。
访问或更改数据时,可在多个不同的位置利用数据。
表达式能够是常量、函数、列名、变量、子查询等,还能够通过运算符将这些数据组合起来。
例将当前日期加1天。
SELECTGetDate()+1
注释在T-SQL语言中,表达式是标识符、常量、值和运算符的组合。
表达式能够对其求值以获取结果。
访问或更改数据时,可在多个不同的位置利用数据。
表达式能够是常量、函数、列名、变量、子查询等,还能够通过运算符将这些数据组合起来。
例将当前日期加1天。
SELECTGetDate()+1经常使用函数---聚合函数
经常使用函数---数学函数
经常使用函数---数学函数
经常使用函数---字符串函数
经常使用函数---字符串函数
经常使用函数---字符串函数
经常使用函数---日期和时刻函数
经常使用函数---日期和时刻函数
经常使用函数---日期和时刻函数
经常使用函数---转换函数
经常使用函数---系统和元数据函数
(此处省略N个图表,请后期手动加上)
数据类型
SQLServer的两种数据类型
系统数据类型
用户自概念数据类型
用户自概念数据类型
SQLServer中许诺用户在系统数据类型的基础上成立自概念的数据类型。
而且能够将默许值和规那么应用于自概念数据类型,从而为用户自概念数据类型提供默许值和完整性约束
数据类型(续)
通过系统存贮进程sp_addtype可概念用户数据类型
语法格式:
sp_addtypetype,system_data_type[,null_type]
其中
type:
用户自概念数据类型的名称。
system_data_type:
SQLServer系统数据类型,作为用户自概念数据类型的基类型。
null_tyle:
指定是不是许诺空值。
取值为NULL、NOTNULL
数据类型(续)
自概念数据类型利用方式同系统数据类型
例概念自概念数据类型student_num。
sp_addtypestudent_num‘char(6)’NOTNULL
概念student_num后,利用方式同系统数据类型,如:
CREATETABLEXS
(学号student_num,
姓名char(8)NOTNULL,
专业名char(10)NULL,
性别bitNOTNULL,
诞生时刻smalldatetimeNOTNULL,
总学分tinyintNULL,
备注textNULL)
批处置语句批是一组SQL语句的集合,能够是一个语句,也能够是多个语句,一个批以GO语句终止。
批中的语句被一次提交给SQLServer,SQLServer将这些批中的语句编译为一个执行单元。
批处置语句
例利用批提交对数据库的访问操作。
USEtestDB
GO
SELECT*FROMStudent
INSERTINTOStudent(Stu_ID,Stu_Name)VALUES('202015012801','王平')
SELECT*FROMStudent
GO
在上面的T-SQL语句中,两个GO将T-SQL语句分两批提交给效劳器运行。
批处置语句
并非是所有的T-SQL语句都能够放在一个批中
如CREATEVIEW、CREATETRIGGER、CREATEPROCEDURE等语句应在批中应单独提交,它们不能与其它语句一路组成一个批。
例创建一个视图,并对其进行查询。
USEtestDB
GO
CREATEVIEWtest_view
AS
SELECT*FROMstudentwhereSdept=‘运算机系’
GO
注释语句
注释用于在程序代码中附加一些说明性的文字
在程序中加入注释可增强程序的易读性
SQLServer支持两种类型的注释
单行注释:
利用两个连在一路的减号“--”作为注释符,注释内容写在注释符的后面,以最近的回车符作为注释的终止。
多行注释:
利用“/*“和”*/”作为注释,其中“/*”用于注释文字的开头,“*/”用于注释文字的结尾,中间部份加上注释性文字说明。
注释语句
例利用注释对部份行或段落进行说明。
在本程序中对某些语句进行了注释。
USEtestDB--打开数据库
GO
/*以下操作第一查询表,
然后插入一行数据*/
SELECT*FROMStudent
INSERTINTOStudent(Stu_ID,Stu_Name)VALUES('202015012801','王平')
SELECT*FROMStudent
GO
输出语句
PRINT语句用于将消息返回应用程序
格式:
PRINT字符串|变量
其中,字符串是字符串常量或返回字符串的表达式,变量的类型为字符类型或可转换为字符类型的数据类型。
输出语句
例统计学生的平均年龄,并显示到客户端。
DECLARE@avg_ageint
select@avg_age=avg(Sage)FROMStudent
Print'平均年龄:
'
Print@avg_age
流操纵语句
与所有的程序设计语言一样,T-SQL中提供了流程操纵语句用于操纵T-SQL语句、语句块或存储进程的执行流程,可进行顺序、分支、循环、存储进程、触发器等程序设计,编写结构化的模块代码,并放置到数据库效劳器上。
流操纵语句
分类
语 句
功 能
语句块
BEGIN...END
定义语句块
选择
控制
IF...ELSE
条件语句
CASE函数
多条件分支选择
GOTO
无条件转移语句
RETURN
返回语句
WAITFOR
为语句的执行设置延迟
循环
控制
WHILE
循环语句
BREAK
退出最内层的 WHILE 循环
CONTINUE
重新开始 WHILE 循环,忽略CONTINUE关键字后的循环语句
BEGIN…END语句
BEGIN…END语句用于把一组语句封装起来,组成一个语句块,使这些语句作为一个整体执行
语法格式:
BEGIN
{SQL语句|语句块}
END
说明:
{SQL语句|语句块}是任何Transact-SQL语句或用BEGIN…END括起来的一组T-SQL语句。
例从学生表中删除王平的记录。
USEtestDB
IF(EXISTS(SELECT*FROMStudentWHEREStu_Name='王平'))
BEGIN
DELETEFROMStudentWHEREStu_Name='王平'
PRINT'记录已经删除'
END注意:
BEGIN…END语句块许诺嵌套利用;BEGIN和END必需成对利用。
任何一个都不能单独利用。
选择操纵:
IF…ELSE语句
IF…ELSE语句用于分支程序设计
依照IF语句给定的条件是不是成立,操纵数据处置进程
语法格式:
IF条件表达式
{SQL语句|语句块}
[ELSE
{SQL语句|语句块}]
其中:
条件表达式返回TRUE(真)或FALSE(假)
IF语句通常按带ELSE部份或不带ELSE部份两种情形利用不带ELSE部份的用法:
IF条件表达式
A//T-SQL或语句块
当条件表达式的值为真时执行A,然后执行IF语句的下一条语句;
当条件表达式的值为假时不执行A,直接执行IF语句的下一条语句。
带ELSE部份的用法:
IF条件表达式
A//T-SQL或语句块
ELSE
B//T-SQL或语句块
当条件表达式的值为真时执行A,然后执行IF语句的下一条语句
当条件表达式的值为假时执行B,然后执行IF语句的下一条语句。
例查询张明同窗的2号课程的成绩。
假设成绩小于60,那么显示“不合格”
DECLARE@cjint
SELECTScore
FROMStudentJOINStu_courseONStudent.stu_id=Stu_course.stu_id
WHEREcourse_id='2'andstu_name='张明'
IF@cj>=60
PRINT@cj
ELSE
PRINT'不合格'
假设要判定知足条件的记录是不是存在,可用EXISTS。
IF语句与EXISTS组合,用于检测数据是不是存在,而不考虑与之匹配的行数。
执行时只要找到第一个匹配的行,效劳器就停止执行SELECT语句,因此效率很高。
DECLARE@XMvarchar(50)
SET@XM='王平'
IF(EXISTS(SELECT*FROMStudentWHEREStu_Name=@XM))
BEGIN
DELETEFROMStudentWHEREStu_Name=@XM
PRINT'记录已经删除'
END例依照选课人数,输出不同的结果。
declare@snumint,@numint
select@snum=COUNT(stu_id)fromstudent
select@num=COUNT(distinctstu_id)fromStu_Course
if@num>=@snum*2/3
print'较多人选课'
else
if@num>=@snum/2
print'约有一半人选课'
else
print'选课人数较少'选择操纵:
CASE表达式
CASE表达式用于多条件分支选择
与利用IF…ELSE语句相较,利用CASE表达式可使程序结构加倍精炼、清楚
SQLServer中的CASE表达式有两种
简单CASE表达式
搜索型CASE表达式简单CASE表达式:
CASEinput_expression
WHENwhen_expressionTHENresult_expression[...n]
[ELSEelse_result_expression]
END
input_expression:
利用简单CASE格式时所计算的表达式。
when_expression:
与input_expression相较较的简单表达式。
result_expression:
当input_expression等于when_expression时所返回的表达式。
else_result_expression:
比较运算结果都不为TRUE时所返回的表达式。
简单CASE表达式的执行进程:
将CASE后面的input_expression表达式的值与各WHEN子句中的when_expression表达式的值进行比较:
若是二者相等,那么返回THEN后的result_expression表达式的值,然后跳出CASE语句
不然,假设有ELSE子句,返回ELSE中的else_result_expression表达式的值
ELSE子句是选项,CASE语句中不包括ELSE子句时,若是所有的比较失败时,CASE语句返回NULL。
例将Student中的性别转换为1和0。
SELECTStu_Nameas姓名,系=Sdept,
性别=CASESsex
WHEN'男'THEN1
WHEN'女'THEN0
ELSE1
END
FROMstudentCASE搜索表达式:
CASE
WHENBoolean_expressionTHENresult_expression[...n]
[ELSEelse_result_expression]
END
Boolean_expression:
利用CASE搜索时所计算的布尔表达式
执行进程:
第一测试WHEN后的布尔表达式
若是其值为真,那么返回THEN后面的表达式,
不然测试下一个WHEN子句中的布尔表达式。
若是所有布尔表达式的值都为假,那么返回ELSE后的表达式。
例求选2号课程的学生的姓名和品级分,依照不同成绩转换为不同品级分。
SELECT姓名=Stu_Name,
成绩=CASE
WHENScore>=90THEN'优秀'
WHENScore>=80THEN'良好'
WHENScore>=70THEN'中'
WHENScore>=60THEN'合格'
ELSE'不合格'
END
FROMStudentJOINStu_courseONStudent.Stu_ID=Stu_course.Stu_ID
WHERECourse_ID='2'
选择操纵:
GOTO语句
GOTO语句将执行流程转移到某一指定的位置
语法格式:
GOTO标号
标号名称必需遵守T-SQL标识符命名规那么,在标号后加上冒号
选择操纵:
RETURN语句
RETURN语句从进程、批处置或语句块中无条件退出,其后面的语句再也不执行。
语法格式:
RETURN[integer_expression]
选择操纵:
WAITFOR语句
WAITFOR语句挂起语句的执行,直到某一时刻或一段时刻以后继续执行。
语法格式:
WAITFOR{DELAY‘interval’|TIME‘time’}
说明:
DELAY‘interval’子句指定等待的时刻距离。
TIME’time’子句指定等待到某一时刻。
例操纵程序1小时以后执行其后的语句。
WAITFORDELAY'1:
00:
00'
SELECT*FROMstudent
例操纵程序直到早上8点才执行其后的语句。
WAITFORTIME'8:
00'
SELECT*FROMsudent
循环操纵:
WHILE、BREAK、CONTINUE语句
WHILE、BREAK和CONTINUE语句用于循环程序设计
在数据处置进程中,有时需要重复执行一些操作,这时可利用这三个语句操纵数据处置进程。
WHILE:
操纵循环进程
BREAK:
退出循环
CONTINUE:
继续下一次循环WHILE语句
WHILE语句用于重复执行程序中的一部份语句。
语法格式:
WHILE条件表达式
{SQL语句|语句块}
在条件表达式为真时,执行循环体内的语句。
直到条件表达式为假时,终止循环。
例求1+2+3+4+…+100的值。
分析:
假设求和结果放在变量@sum中。
初值@sum=0
加上第一个值@sum=0+1
加上第二个值@sum=0+1+2
加上第三个值@sum=0+1+2+3
…
加上第99个值@sum=0+1+2+3+…+98+99
加上第100个值@sum=0+1+2+3+…+98+99+100
例求1+2+3+4+…+100的值。
DECLARE@iint,@sumint
SET@sum=0--@sum寄存求和的结果
SET@i=1--@i寄存每次要加的值
WHILE@i<=100--循环条件
BEGIN
SET@sum=@sum+@i--求和
SET@i=@i+1--@i值的转变,步长
END
PRINT'100之内的整数的和为:
'
PRINT@sum例求100+99+98+…+3+2+1的值。
DECLARE@iint,@sumint
SET@sum=0
SET@i=100
WHILE@i>=1
BEGIN
SET@sum=@sum+@i
SET@i=@i-1
END
PRINT‘100之内的整数的和为:
'
PRINT@sum例计算100之内的所有偶数的和。
DECLARE@iint,@sumint
SET@sum=0
SET@i=0
WHILE@i<=100
BEGIN
SET@sum=@sum+@i
SET@i=@i+2
END
PRINT‘100之内的偶数的和为:
'
PRINT@sum例计算10!
=1*2*3*…*10。
DECLARE@iint,@facint
SET@fac=1
SET@i=1
WHILE@i<=10
BEGIN
SET@fac=@fac*@i
SET@i=@i+1
END
PRINT'10!
='
PRINT@fac
例求50个奇数的和。
declare@sumint,@iint,@nint
set@sum=0--@sum寄存求和结果
set@i=1--@i寄存要加的数值
set@n=0--@n寄存要加的数值的个数,计数器
while@n<50
begin
set@sum=@sum+@i
set@i=@i+2
set@n=@n+1
end
print@sumBREAKE语句
一样用在WHILE语句内,用于退出本层循环。
当程序中有多层循环嵌套时,利用BREAK语句只能退出其所在的这一层循环。
CONTINUE语句
一样用在WHILE语句内,终止本次循环,继续下一次循环。
例计算100之内的所有整数的和。
DECLARE@iint,@sumint
SET@sum=0
SET@i=1
WHILE(1=1)
BEGIN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TSQL 数据 治理