T-SQL基本编程基础
目录
T-SQL基本编程基础
一、T-SQL概述
二、T-SQL编程基础
1.常见数据类型
2、表达式
1.常量
2.变量
3.运算符
一、T-SQL概述
SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL。
SQL与T-SQL的区别:
SQL作为结构化查询语言,是标准的关系型数据库通用的标准语言;T-SQL是在SQL基础上扩展的SQL Server中使用的语言
二、T-SQL编程基础
每个SQL语句均由一个谓词开始,后跟一个或多个子句,每个子句都由一个关键字开始。
1.常见数据类型
(1)精确数字数据类型
- int 存储整型数值,存储数值范围为-231 ~231-1
- bigint bigint比int能存储更大的数值,存储数值范围为-263 ~263-1。
- smallint 数据类型的范围数值比int更小,在-215 ~215-1之间。
- tinyint 数据类型的范围数值比smallint更小,存储从 0 到 255 的整型数据。
- decimal/numeric decimal[(p,s)]和numeric[(p,s)]这两种数据类型用于存储相同精度和范围的数据(小数点的左、右两边存储的数值位数相同),所能存储的数值范围为-1038 +1~1038-1.
p表示指定小数点左边和右边可以存储的十进制数字的最大个数,s指定小数位数。[(p,s)]的范围为1≤p≤38,0≤s≤p。若省略s,则默认为0;若未附带p及s,则numeric表示numeric(18),只能表示整数
(2)近似数字数据类型
- float
存储小数点不固定的数值,存储的数值范围-922337203685477.5808 到 922337203685477.5808
- real
与float非常相似,存储数值范围为-214748.3647 到 214748.3647
(3)货币数据类型
(4)字符数据类型
- char
长度固定,最多可以定义8000个字符。如果定义一个列为char(n),则将存储n个字符。当输入少于定义的字符数时,剩余的长度将被在右边的空格填满。
- nchar
但最多可以定义4000个字符
- varchar
用于存储字母数字数据,最多可定义8000个字符。二者不同之处在于varchar的每一行可以有不同的字符数,最大字符数未定义的最大长度。例如列定义为varchar(50),则该列数据最多可以有50个字符长。然而,如果列中只存储了3个字符长的字符串,则只会使用3个字符的存储空间。如果定义列时没有指定大小,即varchar(),则其长度默认为1。
特别,varchar(max)可以定义超过8000个字符的字符串数据类型,最多1073741824个字符。【注意不是varchar(n)】
- nvarchar
定义方式与varchar相似
(5)日期和时间数据类型
- date
仅用来存储日期,其范围从0001年1月1日到9999年12月31日。数据类型格式是YYYY-MM-DD。
- time
只存储基于24小时制的时间,其格式为hh:mm:ss[.nnnnnnn]。
- datetime
用于存储从1753年1月1日到9999年12月31日之间的任何日期和时间。datetime不仅存储日期,而且会在日期的旁边存储时间。如果只像定义为datetime的列存入日期,则会在存储的日期中加入默认的时间12:00:00。
- datetime2
与datetime类似,datetime2用于存储日期和时间。不同之处是,datatime2的数据类型秒的小数部分的精度更高。此外,该数据类型能存储从0001年1月1日到9999年12月31日的日期。其格式为YYYY-MM-DD hh:mm:ss[.nnnnnnn]。
- smalldatetime
与datetime十分相似,除了smalldatetime可存储的数值范围是从1900年1月1日到2079年6月6日。该数值范围的结束日期不是月末。
(6)二进制数据类型
- binary
存储固定大小的二进制个十数据,最多可存储8000字节。
这种数据类型主要用于存储作为标记或标记组合的数据。例如存储关于客户的标记。需要了解客户是否处于活动状态(值为1)、最近一个月有无消费记录(值为2)、最后一个月的消费额是否超过1000元(值为4)或者是否按时销账(值为8)。这将向数据库中加入4个数据列。然而,若使用binary值,如果客户有一个值为1101的二进制值,那么该客户拥有的值为1+4+8,这表明客户是活动的。最后一个月的消费额超过1000元并按时销账。
- varbinary
与binary十分相似,但是varbinary每一行的物理列大小随存储的值而不同。varbinary(max)能存储长度超过8000个字符的数据,最多可存储2GB,可用于存储类似图像这样的数据。
(7)专用数据类型
- bit
该数据类型存储的值为0或1.通常用于判定真假值。
- uniqueidentifier
用于存储16位全局唯一标识符(UUID)。
- XML
2、表达式
1.常量
常量的格式取决于它所表示的值的数据类型,按照值的不同数据类型,常量分为:字符串型常量、数值型常量、日期时间型常量、货币型常量。
字符串型常量由单引号括起来的ASCII字符组成,如:’sql server’,’数据库’
数值型常量包括整型常量和实数型常量,如:123,1.45,0.3e-5
日期时间型常量使用特定格式的字符日期值表示,如:’20090401’
货币型常量在数值前加前缀“$”,如:$123.45
2.变量
变量是在程序运行期间其值可变的量,在SQL Server中,变量分为局部变量和全局变量。
- 全局变量名称前面有两个@字符,由系统定义和维护。
- 局部变量前面有一个@字符,由用户定义和使用。
局部变量
1.声明局部变量
使用Declare 语句来声明局部变量。语法如下:
DECALRE @local_var1 data_type, @local_var2 data_type,……
例如:
DECLARE @maxprice float,@pub char(12)
说明:
- 局部变量名称的第一个字符必须是@;
- 变量不能是text、ntext或image数据类型;
- 所有变量在声明后均设置初值为NULL;
- 局部变量由用户定义,仅在声明它的批处理、存储过程或者触发器中有效,因此变量的赋值语句应与变量的定义语句一起执行。
2. 给局部变量赋值
使用Set语句为变量赋值,语法格式:
Set @局部变量名=表达式
使用Select语句为变量赋值,语法格式:
Select @局部变量名=表达式 [,…n]
例如:
DECLARE @X INT,@Y INT
SET @X=20
SET @Y=5
SELECT @X=30,@Y=7
3.局部变量的输出
使用SELECT 语句输出变量值
例如:
DECLARE @X INT,@Y INT
SET @X=20
SET @Y=5
SELECT @X=30,@Y=7
SELECT @x,@y,3*@x+4*@y,@x*@y,@x/@y
使用PRINT 语句输出一个字符串、局部变量或全局变量的值。
例如:
PRINT @x+@y
全局变量
全局变量是SQL Server系统内部使用的变量,其作用范围是在所有程序中有效。全局变量名称前面有两个@字符,由系统定义和维护。
常见的全局变量:
@@version SQL Server版本信息
@@error 上一条SQL语句报告的错误号
@@nestlevel 当前存储过程或触发器的嵌套级别
@@rowcount 上一条SQL语句处理的行数
@@servername 本地服务器名称
@@identity 最后插入的标识值
@@spid 当前用户进程的会话id
@@fetch_status 上一条游标fetch语句的状态
@@cpu_busy SQL Server自上次启动后的时间状态
3.运算符
赋值运算符:=
算术运算符:+ - * / %求余
比较运算符:=、>、>=、<、<=、<>不等于、!>不大于、!<不小于
逻辑运算符:NOT、AND、OR、ALL(所有)、ANY(或SOME,任意一个)、BETWEEN...AND、EXISTS(存在)、IN(在范围内)、LIKE(匹配)
字符运算符: + 实现字符串的连接
按位运算符:&(位与)、|(位或)、^(按位异或)
一元运算符:+(正)、-(负)、~(按位取反)
运算符的优先:
当一个复杂的表达式有多个运算符时,运算符优先级决定了运算的先后次序。
运算符的优先级别如下:
本篇文章部分转载自作者:水桶的魔法链接:https://www.jianshu.com/p/a7bb06705916