SQL高级开发

变量的使用

局部变量

  1. 必须以标记@作为前缀,如@age

  2. 局部变量的使用先声明(使用关键字declare),再赋值

    DECLARE @age INT   --声明局部变量@age
    --SET @age=20      --赋值局部变量
    SELECT @age=20
    SELECT @age        --查看局部变量的值

    使用SELECT赋值确保筛选出的记录只有一条

全局变量

  1. 必须以标记@@作为前缀,如@@version

  2. 由系统定义和维护,只能读取,不能修改全局变量值

变量的使用

问题:编写T-SQL查询小明及其学号相邻的学员

DECLARE @StuId INT --声明学号变量,这个变量记录小明的学号
SELECT @StuId=ID FROM Student WHERE Name='小明'--根据学生姓名查询出改学生的学号
SELECT * FROM Student WHERE ID=(@StuId+1) OR ID=(@StuId-1)--根据这个学号查询相邻的学员信息

SET与SELECT区别

使用场景SETSELECT
同时对多个变量赋值不支持支持
表达式返回多个值时出错将返回的最后一个值赋给变量
表达式未返回值时变量被赋予NULL值变量保持原值
DECLARE @age INT,@name VARCHAR(20)
--SET @age=20,@name='张三'--不允许这样做
SELECT @age=20,@name='张三'
SELECT @name
--SET @name=(SELECT Name FROM Student)
SELECT @name=Name FROM Student
--SET @name=(SELECT NAME FROM Student WHERE ID=0)
SELECT @name=NAME FROM Student WHERE ID=0
SELECT @name

全局变量的使用

变量含义
@@ERROR最后一个T-SQL错误的错误号
@@IDENTITY最后一次插入的标识值
@@LANGUAGE当前使用的语言的名称
@@MAX_CONNECTIONS可以创建的同时连接的最大数目
@@ROWCOUNT受上一个SQL语句影响的行数
@@SERVERNAME本地服务器的名称
@@TRANSCOUNT当前连接打开的事务数
@@VERSIONSQL Server的版本信息

数据类型转换

数据类型转换原因

DECLARE @avgAge INT
SET @avgAge=(SELECT AVG(Age)FROM Student)
--输出
PRINT '平均年龄是:'+@avgAge
 

数据类型转换方法

  1. 使用Convert函数实现强制转换

    CONVERT(数据类型,表达式,样式)--第三个参数可以省略。它一般用于日期类型数据转换为字符类型,
    PRINT '平均年龄是:'+CONVERT(VARCHAR(20),@avgAge)

     

  2. 使用CAST函数进行转换

    CASR(表达式 AS 数据类型)
    PRINT '平均年龄是:'+CAST(@avgAge AS VARCHAR(20))

     

CONVERT和CAST的不同:CONVERT可以指定转换的样式

样 式说 明输入/输出格式
0或100(*)默认值mon dd yyyy hh:mi AM(或者PM)
1/101美国mm/dd/yyyy
2/102ANSIyy.mm.dd
3/103英国/法国dd/mm/yy
4/104德国dd.mm.yy
5/105意大利dd-mm-yy
6/106-dd mon yy
7/107-mon dd,yy
8/108-hh:mm:ss
9或109(*)默认值+毫秒mon dd yyyy hh:mi:ss:mmmAM(或者PM)
10或110美国mm-dd-yy
11或111日本yy/mm/dd
12或112ISOyymmdd
13或113(*)欧洲默认值+毫秒dd mon yyyy hh:mm:ss:mmm(24h)
14或114-hh:mi:ss:mmm(24h)
20或120(*)ODBC规范yyyy-mm-dd hh:mm:ss(24h)
21或121(*)ODBC规范(带毫秒)yyyy-mm-dd hh:mm:ss.mmm(24h)
126ISO8601yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
130科威特dd mon yyyy hh:mi:ss:mmmAM(或者PM)
131科威特dd/mm/yy hh:mi:ss.mmmAM(或者PM)

T-SQL中的函数

数学函数

数学函数可以对数据类型为整型(integer)、实型(real)、浮点型(float)、货币型(money)和smallmoney的列 进行操作。它的返回值是6位小数,如果使用出错,则返回NULL值并显示提示信息,通常该函数可以用在SQL语句的表达式中 常用的数学函数及说明

函数名称说 明
COS返回指定的表达式中指定弧度的三角余弦值
COT返回指定的表达式中指定弧度的三角余切值
PI返回值为圆周率
POWER将指定的表达式乘指定次方
RAND返回0~1之间的随机float数
ROUND将数字表达式四舍五入为指定的长度或精度
SIGN返回指定表达式的零(0)、正号(+1)或负号(-1)
SIN返回指定的表达式中指定弧度的三角正弦值
SQUARE返回指定表达式的平方
SQRT返回指定表达式的平方根
TAN返回指定的表达式中指定弧度的三角正切值
ABS返回指定数字表达式的绝对值

算术函数(例如ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS和SIGN)返回与输入值具有相同数据类型的值。三角函数和其他函数(包括EXP、LOG、LOG10、SQUARE和SQRT)将输入值转换为float并返回float值

SELECT PI()
SELECT RAND()--随机0-1浮点
SELECT ROUND(1.205,0)--四舍五入
SELECT FLOOR(1.9002)--向下取整
SELECT CEILING(1.0005)--向上取整
SELECT DEGREES(-1.0)--将弧度转为度
SELECT RADIANS(60.0)--将度转为弧度

字符串函数

字符串函数作用于char、varchar、binary和varbinary数据类型以及可以隐式转换为char或varchar的数据类型。通 常字符串函数可以用在SQL语句的表达式中。

常用的字符串函数及说明:

函 数 名 称说 明
ASCII返回字符表达式最左端字符的ASCII代码值
CHARINDEX返回字符串中指定表达式的起始位置
LEFT从左边开始,取得字符串左边指定个数的字符
LEN返回指定字符串的字符(而不是字节)个数
REPLACE将指定的字符串替换为另一指定的字符串
REVERSE返回字符表达式的反转
RIGHT从右边开始,取得字符串右边指定个数的字符
STR返回由数字数据转换来的字符数据
SUBSTRING返回指定个数的字符

日期时间函数

日期和时间函数主要用来操作datetime、smalldatetime类型的数据,日期和时间函数执行算术运行与其他函数一样,也 可以在SQL语句的SELECT、WHERE子句以及表达式中使用。

常用的日期时间函数及说明:

函 数 名 称说 明
DATEADD在向指定日期加上一段时间的基础上,返回新的datetime值
DATEDIFF返回跨两个指定日期的日期和时间边界数
GETDATE返回当前系统日期和时间
DAY返回指定日期中的天的整数
MONTH返回指定日期中的月份的整数
YEAR返回指定日期中的年份的整数

DATEADD函数将表示日期或时间间隔的数值与日期中指定的日期部分相加后,返回一个新的 DT_DBTIMESTAMP 值。

number参数的值必须为整数,而date参数的取值必须为有效日期。

语法如下:

DATEADD(datepart, number, date)

GROUP BY 分组查询

通过指定的字段进行对数据进行分组

SELECT COUNT(*),Sex,AVG(Age) FROM Student GROUP BY Sex

HAVING函数

HAVING函数,查询数据表中的重复记录,可以借助HAVING子句实现,该子句用来指定组或聚合的搜索条件。HAVING子句只能与SELECT语句一起使用,而且,它通常在GROUP BY子句中使用。相当于在GROUP BY里面添加筛选条件

SELECT COUNT(*),Age FROM Student GROUP BY Age HAVING COUNT(*)<2

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值