Microsoft SQL Server Transact-SQL


1.SQL

1.1数据定义语言(DDL)

create 创建数据库或数据库对象;alter 修改数据库或数据库对象;drop 删除数据库或数据库对象;

1.2数据操纵语言(DML)

select 从表或视图中检索数据;insert 将数据插入到表或视图中;update 修改表或视图中的数据;delete 从表或视图中删除数据;

1.3数据控制语言(DCL)

grant 授予权限;revoke 收回权限;drop 禁止从其他角色中继承许可权限;

2.注释及字符编码

2.1注释

--单行注释
/*
 多行注释
*/

2.2字符编码

ASCLL字符;Unicode字符前面添加一个大写字符N

3.变量

3.1变量类型

常量;一般变量;局部变量@;全局变量@@;

3.2变量声明

--变量声明
DECLARE @aa int
DECLARE @bb int

3.3变量赋值

--变量赋值 set或select

4.运算符和表达式

4.1算术运算符

--变量声明
declare @aa int,@bb int;
--变量赋值 set或select

--算术运算符 + - * / %
SELECT @aa + @bb
SELECT @aa - @bb
SELECT @aa * @bb
SELECT @aa / @bb
SELECT @aa % @bb

4.2关系运算符

>

>=

=

<=

<

<>或!=

!<

!>

4.3逻辑运算符

AND       与运算,两个操作数均为真时,结果才为真。

OR         或运算,若两个操作数中有一个为真结果为真。

NOT       非运算,单目运算,结果值相反。

ALL        每个操作数值都为真时结果为真。

ANY       多个操作数中有一个为真结果为真。

BETWEEN若操作数在指定范围内则结果为真

EXISTS    若子查询包含一些行则结果为真

IN           若操作数值等于表达式列表中的一个则真

LIKE        若操作数与某种模式匹配则真

-      %      []     [^]

SOME     若在一系列操作数中有些值为真则真

+ 字符连接运算符

4.4位运算符

&位与运算    2个参与运算的位值均为1,结果为1或则0.

|位或运算      一个为1就为1或则0

^位异或运算        不相同时为1相同时为0

SELECT 170&75

SELECT 170|75

SELECT ~170,~75

SELECT 170^75

5.流程控制语句

5.1IF ELSE语句

--变量声明
declare @aa int,@bb int;
--变量赋值 set或select

--if
if @aa>@bb print 'aa>bb'
--变量声明
declare @aa int,@bb int;
--变量赋值 set或select

--if else
if @aa>@bb
    print 'aa>bb'
else
    print 'bb<aa'
--if else 嵌套
declare @ee int
declare @ff int

       print '第一象限'
    else
       print '第四象限'
else

       print '第二象限'
    else
       print '第三象限'

5.2CASE语句

--简单CASE语句
)
)
)
)
select @a='A',@b='B',@c='C',@d='D'
)
set @e=@d
select
case
    when @e=@a then 'A'
    when @e=@b then 'B'
    when @e=@c then 'C'
    when @e=@d then 'D'
end as 成绩等级
--搜索语句
)
)
)
)
select @a='A',@b='B',@c='C',@d='D'
)
set @e=null
select 成绩等级=
case
    when @e=@a then 'A'
    when @e=@b then 'B'
    when @e=@c then 'C'
    when @e=@d then 'D'
    ELSE '不在定义范围'
End
DECLARE @Today int
SET @Today = DATEPART(DW,GETDATE())
SELECT 今天是 = CASE @Today
     THEN '星期天'
     THEN '星期一'
     THEN '星期二'
     THEN '星期三'
     THEN '星期四'
     THEN '星期五'
     THEN '星期六'
END

5.3GOTO语句

--无条件转移语句

declare @q int

set @q=1

loving:

print @q

select @q=@q+1

while @q<=3

goto loving

5.4WHILE BREAK和CONTINUE语句

--while 语句

declare @s int

declare @n int

select @s=0,@n=1

while @n<=100

begin

set @s=@s+@n

set @n=@n+1

end

print '1+2+3...+100='+convert(char,@s)

go

--break 语句一般用于退出本次循环

declare @i int

declare @s int

select @i=1,@s=0

while @i<=100

begin

set @s=@s+@i

if @s>1000

break

set @i=@i+1

end

select @i,@s

go

--continue 语句 跳出本次循环

declare @i int

declare @s int

select @i=0,@s=0

while @i<10

begin

set @i=@i+1

if @i%2=0

set @s=@s+@i

else

continue

print @i

end

print @s

5.5WAITFOR语句

--waitfor 语句 延迟一段时间执行

waitfor delay '00:00:06'

print '执行触发器或存储过程'

5.6RETURN语句

--return语句用于从过程,批处理或语句块中无条件的推出位于return语句之后语句不再执行

declare @q int

set @q=3

if @q>1

print '能输出'

return

print '不能输出'

5.7TRY CATCH语句

begin try

create database aa

end try

begin catch

print '已经存在'

drop database aa

print '已删除'

create database aa

print '再次创建'

end catch

5.7BEGIN END语句

if exists语句

--1.判断数据库是否存在
 if exists (select name from sys.databases where name = 'database_name') print 'true' else print 'false';
--2.判断表是否存在
) print 'true' else print 'false';
--3.判断存储过程是否存在
) print 'true' else print 'false';
--4.判断临时表是否存在
if OBJECT_ID('tempdb..#temptable_name') is not null  print 'true' else print 'false';
--5.判断视图是否存在
if exists (select object_id from sys.views where object_id = (select object_id(N'[dbo].[view_name]'))) print 'true' else print 'false';
--6.判断自定义函数是否存在
if exists (select * from dbo.sysobjects where id = (select object_id(N'[dbo].[Fun_name]')) and xtype in (N'FN',N'IF',N'TF')) print 'true' else print 'false';
--7.判断列是否存在
if exists(select * from syscolumns where id=object_id('table_name') and name='Columns_name') print 'true' else print 'false';
--8.判断列是否自增列
 print 'auto_columns' else print 'unauto_columns'
--9.判断表中是否存在索引
if exists(select * from sysindexes where id=object_id('table_name') and name='Index_name') print 'Index' else print 'unindex'

函数

6.1数学函数

--ABS(数值表达式)为绝对值函数,返回数值表达式的绝对值

SELECT N'-100的绝对值'=ABS(-100),N'0的绝对值'=ABS(0),N'100的绝对值'=ABS(100)

--RAND()为随机函数返回0-1之间的float数值

SELECT N'随机数'=RAND()

--PI()圆周率函数返回14位小数的圆周率常量值

SELECT N'14位小数的圆周率数值'=PI()

--SQRT(数值表达式)平方根函数返回表达式的平方根

SELECT N'64的平方根'=SQRT(64)

--EXP(数值表达式)指数函数,返回表达式的指数值

SELECT N'e的10次方'=EXP(10)

--LOG(数值表达式)自然对数函数,返回表达式的自然对数值

SELECT

N'e的10次方'=EXP(10),

N'5的自然对数'=LOG(5),

SELECT CEILING(13.4),FLOOR(13.4),ROUND(13.4567,3)

--数学函数RAND()用于返回介于0与1之间的伪随机float值;
select RAND();
--输出10个伪随机float值;
;

begin
    print RAND();
    ;
end;
--输出1001~1500中的数值
;
;
;

begin
    set @result = CEILING(RAND()*@endno);
    if @result >= @begno and @result <=@endno
    begin print @result; break; end;
end;
--增加脚本的重用性,写成自定义函数
create view getrand
as
select RAND() as rand;
create function choujian(
    ,
)
returns int
as
begin
    ;

    begin
    select @result=ceiling([rand]*@endno) from getrand;
    if @result>=@begno and @result<=@endno
    begin break; end;
end;
return @result;
end;
;

begin
    ,);
    ;
end;

6.2字符串函数

--ASCII(字符表达式)ASCII函数返回字符串表达式中最左端字符的ASCII码值

SELECT ASCII('a'),ASCII('ADD')

--CHAR(整型表达式)ASCII码转换函数,参数为介于0~255之间的整数,返回整数的ASCII码

SELECT CHAR(97)

--LOWER(字符表达式)小写字母函数,将大写字母转换为小写字母,返回表达式的小写字母表示

SELECT LOWER('A')

--UPPER(字符表达式)大写字母函数,返回指定表达式的大写字母表示

SELECT UPPER('a')

--LEN(字符表达式)字符串长度函数返回字符串表达式中字符的个数

SELECT LEN('A'),LEN('ASDC')

--LEFT(字符表达式,n)左子串函数返回从字符串左边开始的n个字符

SELECT LEFT('SFSFS',2)

--RIGHT(字符表达式,n)右子串函数返回从字符串右边开始的n个字符

SELECT RIGHT('ADASDADADA',6)

--LTRIM(字符表达式)  删除前导空格函数,返回删除了前导空格的字符表达式

SELECT LTRIM('    aaaaaaa')

--RTRIM(字符表达式)  删除尾随空格函数,返回删除所有尾随空格的字符表达式

SELECT RTRIM('AAAAAA       ')

--REPLACE(字符表达式1,字符表达式2,字符表达式3)字符替换函数,

--用第三个表达式替换第一个字符串表达式中包含的所有第二个字符表达式,并返回替换后的表达式

SELECT REPLACE('AABBCCDD','BBCC','EEFF')

--STR()函数用于将数值型数据转换为字符串

--str(数字类型的表达式[,表达式总长度][,小数点后面的位数])表达式总长度和小数点后面的位数为可选择参数

--将244533.3344转换为长度为11位,小数点后有3位的字符串

SELECT STR(244533.3344,11,2),STR(1234.56789,11,2)

--SUBSTRING(字符串表达式,起始位置,长度)字符串截取函数

SELECT SUBSTRING('abcde',1,0)

SELECT SUBSTRING('abcde',0,8)

--Replicate函数用于指定的次数重复字符串表达式

SELECT replicate('loving',3)

--字符串替换函数格式:STUFF(字符表达式1,起始位置,长度,字符表达式2)

--功能:用“字符表达式2”的值替换“字符表达式1”中由“起始位置”和“长度”指明的一个子串。

select STUFF('计算机等级考试',4,2,'专业')

select STUFF('计算机等级考试',6,0,'二级')

--Charindex函数返回字符串指定表达式的起始位置。

select charindex('l','I like football') --搜索的起始位置是1

select charindex('l','I like football',4) --搜索的起始位置是4

select charindex('l','I like football',15) --搜索的起始位置是15

--EVENTDATA()函数
SELECT EVENTDATA();

6.3日期和时间函数

--GETDATE(日期时间型数据)以标准格式返回本地服务器的DATETIME值

SELECT GETDATE()

--YEAR(日期时间型数据)返回指定日期的“年”部分的整数

SELECT YEAR('2018-09-10'),YEAR(GETDATE())

--MONTH(日期时间型数据)返回指定日期的“月”部分的整数

SELECT MONTH('2018-09-10'),MONTH(GETDATE())

--DAY(日期时间型数据)返回指定日期的"天"部分的整数

SELECT DAY('2018-09-10'),DAY(GETDATE())

--DATEPART(datepart,date) 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

/*

date 参数是合法的日期表达式。

datepart 参数可以是

年  yy, yyyy

季度   qq, q

月  mm, m

年中的日   dy, y

日  dd, d

周  wk, ww

星期   dw, w

小时   hh

分钟   mi, n

秒  ss, s

毫秒   ms

微妙   mcs

纳秒   ns

*/

SELECT N'日期的年'=DATEPART(YYYY,GETDATE())

SELECT N'日期的天'=DATEPART(DD,GETDATE())

--DATEADD(时间间隔,数值表达式,日期)

/*

为DATETIME值添加间隔。时间间隔项决定时间间隔的单位,可取Year、Day of year(一年的日数)、

Quarter、Month、Day、Week、Weekday(一周的日数)、Hour、Minute、Second、Millisecond。

数值表达式为加上或者减去的时间间隔

*/

SELECT N'10年后的日期'=DATEADD(YEAR,10,GETDATE()),

N'10天前的日期'=DATEADD(DAY,-10,GETDATE())

--DATEDIFF(时间间隔,日期1,日期2)

/*

计算两个DATETIME值之间指定的日期部分的差,返回数值型数据。

时间间隔项决定时间间隔的单位,取值与DATEADD中的时间间隔项相同

*/

SELECT N'日期相差的年份'=DATEDIFF(YEAR,'2018-09-10',GETDATE()),

N'日期相差的天数'=DATEDIFF(DAY,'2018-09-10',GETDATE())

6.4数据类型转换函数

--隐式转换

select str(123.456),str(123.456,5,2),STR(123.456,2)

--显式转换

select cast('123' as int)+10

select CONVERT(nvarchar(30),getdate(),102)+'转换成字符型'

CONVERT()将一种数据类型转变为另一种数据类型

CURRENT_USER()返回当前用户的名称

ISDATE()判断是否有效日期

ISNULL()指定一个值替换空值

ISNUMERIC()判断输入的是不是一个数值

6.5聚合函数

--avg:返回一组值的平均值。

--binary_checksum:返回对表中的行或者表达式列表计算的二进制校验位。

--checksum:返回在表中的行或者表达式列表计算的校验值,该函数用于生成哈希索引。

--checksum_agg:返回一组值的校验值。

--count:返回一组值中项目的数量。(返回值为int类型)。

--count_big:返回一组值中项目的数量。(返回值为bigint类型)。

--grouping:产生一个附加的列,当用cube或rollup运算符添加行时,附加的列输出为1,当添加的行不是由cube或rollup运算符产生时,附加的列输出为0。

--max:返回表达式或者项目中的最大值。

--min:返回表达式或者项目中的最小值。

--sum:返回表达式中所有项的和,或者只返回distinct值。sum只能用于数字列。

--stdev:返回表达式中所有值的统计标准偏差。

--stdevp:返回表达式中所有值的统计统计标准偏差。

--var:返回表达式中所有值的统计标准方差。

--varp:返回表达式中所有值的统计统计标准方差。

use 实例数据库

select avg(分数) as 平均成绩

from 选课表

go

use 实例数据库

select max(分数) as 最高成绩

from 选课表

go

use 实例数据库

select count(学号) as 总人数

from 选课表

go

6.6用户自定义函数

用户在编写程序的过程中,除了可以调用系统函数外,还可以根据自己的需要自定义函数。自定义函数包括表值函数和标量值函数两类,其中表值函数又包括内联表值函数和多语句表值函数。

内联表值函数:返回值为可更新表。如果用户自定义函数包含单个SELECT语句且该语句可以更新,则该函数返回的表也可以更新。

多语句表值函数:返回值为不可更新表。如果用户自定义函数包含多个SELECT语句,则该函数返回的表不可更新。

标量函数:返回值为标量值。

--1.标量函数

create function maxf (@para1 real,@para2 real)

returns real

as

begin

declare @max real

if @para1>@para2

set @max=@para1

else

set @max=@para2

return(@max)

end

--2.内嵌表值函数:只能通过select语句调用,在调用时可以省略函数的所有者

create function a(@no char(10)) returns table

as

return

(select student.学号,姓名,课程名,成绩

from student,sc,course

where student.学号=sc.学号

and sc.课程号=course.课程号

and student.学号=@no)

go

select * from a('2008056102')

--3.多语句表值函数:

create function b(@no char(10))

returns @score table

(sno char(10),

sname varchar(8),

cname varchar(30),

grade tinyint)

as

begin

insert @score

select student.学号,姓名,课程名,成绩

from student,sc,course

where student.学号=sc.学号

and sc.课程号=course.课程号

and student.学号=@no

return

end

go

select * from b('2008056103')

--4.自定义函数的调用调用标量函数,必顺提供至少由两部分组成的名称(所有者.函数名),可用print, select, exec语句调用

print dbo.maxf(12,38.6)

select N'最大数为:'+

convert(varchar(10),dbo.maxf(2.8,15676.9))

declare @m real

exec @m=dbo.maxf 12.8,789.6

select @m as '最大数为‘

declare @m real

exec @m=dbo.maxf @para1=789.6,@para2=12.8

select @m as '最大数为'

内嵌表值函数和多语句表值函数都返回表,二者不同之处在于:

内嵌表值函数没有函数体,返回的表是单个select语句的结果集。

多语句表值函数在begin.end 定义的函数主体包含T-SQL语句,这些语句可生成行并将行插入表中,最后返回表。

Microsoft SQL Server Transact-SQL的更多相关文章

  1. PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法

    逆向工程中,有时会出现如下错误 ... [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句 SQLSTATE = 37000 解决方案: 1. ...

  2. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  3. SQL Server参数化SQL语句中的like和in查询的语法(C#)

    sql语句进行 like和in 参数化,按照正常的方式是无法实现的 我们一般的思维是: Like参数化查询:string sqlstmt = "select * from users whe ...

  4. SQL Server经典sql语句大全(转)

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

  5. [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)

    原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin  update  某个sqlserver的表@dblink名字 .... ...

  6. (转)[SQL Server] 动态sql给变量赋值(或返回值给变量)

    本文转载自:http://blog.csdn.net/xiaoxu0123/article/details/5684680 [SQL Server] 动态sql给变量赋值(或返回值给变量) decla ...

  7. SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件

    原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail ...

  8. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

    原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...

  9. sql server 与 sql server compact 互相数据导入

    从SQL Server 导出数据到 Sql Compact 使用 Sql Server Compact Tool box 从SQL Server Comapct 导出数据到  Sql Server 使 ...

  10. SQLSERVER 免费对比数据库结构和数据的工具支持:SQL Server 2012, SQL Server 2008 and SQL Server 2005

    New xSQL Schema Compare - version 5 Compare the schemas of two SQL Server databases, review differen ...

随机推荐

  1. SpringMVC学习指南-前言

    SpringMVC是Spring框架中用于Web应用快速开发的一个模块. SpringMVC基于Spring框架.Servlet和JSP. ------------------------------ ...

  2. Session管理之ThreadLocal

    ref=toolbar" target="_blank">ref=toolbar_logo" target="_blank"> ...

  3. [办公自动化]名师推荐-excelpro刘万祥 图表之道作者

    最早认识刘万祥老师是通过孙小小老师的博客.后来发现制作图表,还真需要和PPT类似,花些时间琢磨一下. 首先你要了解图表的类型,然后需要了解制作方法,最后就是如何美化以及结合PPT等工具帮你分析数据. ...

  4. 【bzoj4591】[Shoi2015]超能粒子炮·改

    设S(n,k)=Σ C(n,i) i=0..k 根据lucas定理可以得到 S(n,k) mod p = [ S(n/p,k/p-1)*S(n mod p,p-1)+C(n/p,k/p)*S(n mo ...

  5. 如何理解scrapy Selector

    1 scrapy Selector是什么 Selector对象本质上是对DOM tree的子树的抽象,这种抽象的目的是用于定位我们感兴趣的node.比如某次http response是一棵完整的DOM ...

  6. NOIP 2011 Mayan游戏 大暴搜

    题目链接:https://www.luogu.org/problemnew/show/P1312 我的第一篇题解!! 当然感谢ZAGER 的提示,他的链接https://www.cnblogs.com ...

  7. KeepAlived的配置

    KeepAlived的相关配置 KeepAlived 配置 参考帮助 man keepalived.conf 配置文件组件部分: top hierachy(层次) global configurati ...

  8. ngCordova插件说明

    转载自 http://my.oschina.net/u/1416844/blog/495026 参 考http://blog.csdn.net/superjunjin/article/details/ ...

  9. Visual C++ Windows 桌面应用程序样例(摘抄)

    //================================== //Windows应用程序框架结构(例子) //参考:<Visual C++宝典>陈国建等编著 //======= ...

  10. 设计基于HTML5的APP登录功能及安全调用接口的方式

    转自:http://blog.csdn.net/linlzk/article/details/45536065 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而 ...