T-SQL就是Transact-SQL,是用来让程序与SQL Server沟通的主要语言,它是在标准的SQL基础上进行许多扩展而成的。SQL是关系数据库系统的标准语言,几乎所有数据库都能使用SQL来进行操作。
1.SQL基础
SQL是用于访问和处理数据库的标准计算机语言,SQL指结构化查询语言,全称是Structured Query Language。
2.T-SQL的组成
T-SQL主要由三部分组成。
(1)数据操作语言(DML):用于插入、修改、删除、和查询数据库中的数据,主要包括INSERT(插入)、UPDATE(更新)、DELETE(删除)和SELECT(查询)。
(2)数据定义语言(DDL):用于在数据库系统中对数据库、表、视图、索引等数据库对象进行创建和管理,主要包括DROP、CREATE、ALTER语句。
(3)数据控制语言(DCL):用于实现对数据库中数据的完整性、安全性控制,主要包括GRANT、REVOKE、DENY语句。
3.常量
常量也称为文字值或标量值,是表示一个特定数据值的符号。常量的格式取决于它所表示的值的数据类型。一个常量通常由一种数据类型和长度,这二者取决于常量格式。常量可以分为以下几类:数字常量、字符串常量、时间和日期常量以及符号常量。
4.局部变量
局部变量是用户可自定义的变量,它是一个拥有特定数据类型的对象,其作用范围仅限制在程序内部。
局部变量不能是text、ntext或image数据类型。
(1).创建变量并赋值,两种赋值方法
--方法1
DECLARE
@num INT --声明变量
SELECT @num=COUNT(*) FROM employee --为变量赋值
select @num --查询变量
--方法2
DECLARE
@num INT
SET @num=(select COUNT(*) from employee)
select @num
SELECT赋值和SET赋值的区别
(1).SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。
DECLARE
@num INT ,
@myCOUNT INT
select @num=COUNT(*),@myCOUNT=COUNT(*) from employee
SELECT @num,@myCOUNT
(2).表达式返回多个值时,用SET将会出错,而SELECT将取最后一个值。
--子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
DECLARE
@num INT ,
@myCOUNT INT
SET @num=(select e_salary from employee)
--多个返回值时,将取最后一个值
DECLARE
@num INT ,
@myCOUNT INT
select @num=e_salary from employee
SELECT @num --@num=2000
(3).表达式无返回值时,用SET将置变量值为NULL,用SELECT将保持变量值。
--无返回值时,变量值为NULL
DECLARE
@num INT =1,
@myCOUNT INT
SET @num=(select e_salary from employee WHERE dept_no = 40)
SELECT @num --@num=NULL
--在select语句中无返回值,变量的值为初始变量时候的值
DECLARE
@num INT =1,
@myCOUNT INT
select @num=e_salary from employee WHERE dept_no = 40
SELECT @num --@num=1
(4).使用标量子查询时,如果无返回值,SET和SELECT一样,都将置为NULL。
DECLARE
@num INT =1,
@myCOUNT INT
SELECT @num=(select e_salary from employee WHERE dept_no = 40)
SET @num=(select e_salary from employee WHERE dept_no = 40)
SELECT @num --@num=NULL
5.全局变量
全局变量是SQL Server系统提供的内部使用变量,不用用户定义,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。
全局变量通畅存储一些SQL Server的配置设定值和统计数据。
引用全局变量时,必须以标识符‘@@’开头。
SELECT @@VERSION AS 'SQL Server版本'
6.运算符
运算符是一些符号,它们能够用于执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较。
运算符主要有几大类:算数运算符、赋值运算符、比较运算符、逻辑运算符、连接运算符以及按位运算符。
- 算数运算符:+、-、*、/、%
- 比较运算符:=、>、<、>=、<=、<>、(!=、!<、!>)非ISO标准
- 逻辑运算符:AND、NOT、LIKE、EXISTS、BETWEEN
- 连接运算符:+
比较运算符用来比较两个表达式的大小,表达式可以是字符、数字或日期格式数据,其比较结果是布尔值。除了text、ntext或image数据类型表达式外,比较运算符可以用于所有表达式。
当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序,执行的顺序会影响所得到的运算结果。在无法确定优先级的情况下,可以使用圆括号()来改变优先级,并且这样会使计算过程更加清晰。
7.表达式
表达式是指用运算符和圆括号把变量、常量和函数等运算成分连接起来的有意义的式子,即使单个常量、变量和函数也可以看出一个表达式。
表达式是一个或多个值,运算符和SQL函数的组合,它们计算结果为确定的值。
根据连接表达式的运算符表达式分为算术表达式、比较表达式、混合表达式、逻辑表达式、按位表达式等。
8.通配符
查询时,又是无法指定一个清楚的查询条件。此时可以使用SQL通配符,通配符用来代替一个或多个字符,使用通配符时,需要于LIKE运算符一起使用。
%:匹配任意长度字符,包括零字符。
select * FROM goodes WHERE price LIKE '%2%'
_:匹配任意单个字符。
select * FROM goodes WHERE name LIKE '洗_机'
--查询e_job中含有's'和'c'字符的数据
select * from employee WHERE e_job LIKE '%[sc]%'
[^]或[!]:匹配不在括号中的任何字符。
--最后一位不为1的
select * FROM goodes WHERE number like '10[^1]'