T-SQL常用语法

# 以创建Bank数据库为例子


Create database Bank
on primary
(
   NAME=Bank_data,   --数据库的逻辑名
   FILENAME='D:\Sql-Service-Demo\DB\Bank_data.mdf', --路径注意后面的后缀名
   size=1MB,                --数据库初始大小
   MAXSIZE=15MB,            --数据库最大大小
   FILEGROWTH=10%                --数据库增长速度
)
 log ON
(
  NAME=Bank_log,    --表示日志文件的逻辑名
  FILENAME='D:\Sql-Service-Demo\DB\Bank_log.ldf', --表示日志文件的物理文件名
  SIZE=1mb,  --表示日志文件的初始大小
  MAXSIZE=15mb,  --表示日志文件的最大大小
  FILEGROWTH=10%  --表示日志文件的增长速度
)

# 创建一个Product表

use Bank
go
--创建表
create table Product
(
   Id int identity(1,1) primary key not null, --表示种子,增量 第一个参数为从1开始 新增 1
   ProNo nvarchar(36),
   ProName nvarchar(36),
   TypeId int not null,
   Price decimal (18,2) default (0.00) not null, --默认值
)
go

--添加一列
alter table Product add PrdAdd nvarchar(36) null

--删除一列
alter table Product drop column PrdAdd

--修改一列
alter table Product alter column ProName nvarchar(36) not null

--修改列名执行存储过程 慎用
exec sp_rename 'Product.Count','ProNos','column'

–第一个参数表示要替换的数据库字段 第二个表示替换后的字段,第三个表示列号

[toc]一、查询

1.1升序

--升序  注意这里必须设置ID为自增字段
select User_id,Card_Number,Amount_Number from [User]

1.2降序

--降序
select User_id,Card_Number,Amount_Number from [User]
order by User_id desc

1.3条件查询

--条件查询
select User_id,Card_Number,Amount_Number from [User]
where User_id>=7

1.4设置别名

--设置别名
select User_id as 用户编号,Card_Number 用户卡号,密码=
Card_Password from [User]

1.5模糊查询

--模糊查询
-- % 0个或多个
-- _ 匹配单个字符
-- [] 范围匹配,括号中所有字符中的一个
-- [^] 不在括号中所以字符之内的单个字符

--1、 % 0个或多个  匹配任意类型和长度  效率不高
--1.1 like '%ad%' 包含于
select * from [User] where Amount_Number like '%0%'
--1.2 like '%42'  以匹配字符或字符串结尾
select * from [User] where Amount_Number like '%9'
--1.3 like 'w%'  以匹配字符或者字符串开头
select *from [User] where Amount_Number like '1%'
--2._ 匹配单个字符 限制表达式的字符长度
--2.1一个下划线代表一个字符 
select *from [User] where Amount_Number like '___' --三个下划线

--3.[] 范围匹配,括号中所有字符中的一个 |表示括号内的范围内 可不写
select *from [User] where Amount_Number like '1[8|1|0][0|1]'

--3.1[0-9]表示 指定范围 
select *from [User] where Amount_Number like '1[0-9][0-9]'

--4.[^] 不在括号中所以字符之内的单个字符
select *from [User] where Amount_Number like '1[^1-7][^1-9]'
参考图

1.6范围查询

--范围查询
--1、select from where 子句 条件 给定范围
--1.1 比较运算符 > =  
select * from [User] where User_id 
--1.4 between and  等价于 >= and =100 and Amount_Number

百分比查询

--2、前面多少条、百分比
select top 10 * from [User]  --查询前10条 数据不够只有4条数据
select top 50 percent * from [User] --查询总数的百分之50数据

二、聚合函数

--聚合函数
-- count 记录个数
-- sum 求和
-- avg 求平均值
-- max 求最大值
-- min 求最小值
select COUNT(*)总和 from [User]  --一般统计一个表的记录数

-- sum 求和
select sum(User_id) from [User]  --只能用于数字类型

---- avg 求平均值
select avg(User_id) from [User]

-- max 求最大值
select max(User_id) from [User]

-- min 求最小值
select min(User_id) from [User]

三、多表查询

--1.1分组查询

--分组查询
--select ... where... group by 列名,列名
--select by 结合聚合函数,根据一列或多列对结果集 进行分组
select Uid,count(*) 用户数 from TokenInfo group by Uid
--分组筛选
select Uid,count(*) 用户数 from TokenInfo group by Uid
   having Uid>1  --Uid 大于1的用户总和几个
   order by Uid desc -- desc 降序排列

--1.2多表查询 内连接查询

--多表查询
--inner join 内连接查询
select Goods_id,u.Goods_Type,Type_Name
from GoodsInfo u
inner join GoodsType d on d.Type_id=u.Goods_Type

--隐式写法
select Goods_id,u.Goods_Type,Type_Name
from GoodsInfo u,GoodsType d
where d.Type_id=u.Goods_Type 

--1.3左连接

--外连接查询
--左连接 left join on 返回左表所有行,右表如果没有对应列显示null
select * from GoodsInfo u  --左表  数据全部返回
left join GoodsType d         --右表  没有对应返回null
on u.Goods_Type=d.Type_id

--1.4右连接

--右连接 right(outer) join on 与左连接相反,返回右表的所有行,左表进行匹配,左表中没有匹配上的对应列显示NULL
select * from GoodsInfo u  --左表  没有对应返回null
right outer join GoodsType d  --outer 可省略右表数据全部返回
on u.Goods_Type=d.Type_id

--1.5全连接

--全连接 full (outer) join 全外连接 
--返回左表和右表中所有,当没有对应返回 NULL
select * from GoodsInfo u  
full join GoodsType d         
on u.Goods_Type=d.Type_id

--1.6交叉连接 cross (outer) join

--交叉连接 cross (outer) join   等价于 inner join
--如果不带where子句式,返回被连接的两个表的迪卡尔积,返回的行数是两个表行数的乘积
--带where子句 ,等价于 inner join 返回匹配的数据
select * from GoodsInfo u  
cross join GoodsType d        --outer可以省略
where u.Goods_Type=d.Type_id   --显示匹配出来的行数

三、类型转换函数

--类型转换函数 convert (类型(长度),表达式)
select 'ac'+CONVERT(nvarchar,3)  --把数字转换成字符串 --ac3
select CONVERT(varchar(10),getdate(),126) --日期转换  --2020-07-27

--cast函数 cast(表达式 as 类型)
select 'ac'+cast(2 as nvarchar)  --ac2

四、字符串操作函数

--字符串操作函数 
--返回字符串中指定的字符串出现的开始位置
select CHARINDEX('c','acadas') --数据库索引从1开始
--返回字符串中指定的字符串出现的开始位置 字符串前后必须带%
select PATINDEX('%c%','aCadaasa') 

--大小写转换函数
select UPPER('aadaasa')  --转换为大写

select lower('ADACADA')  --转换为小写

五、取长度函数

--取长度函数
select len('ABC')
--去空格
select LTRIM('     aa   ') -- 去掉左边的空格
select rtrim('     aa   ') -- 去掉右边边的空格

六、取子串函数

--取子串函数
select LEFT('dacadsa',4) --daca--返回字符串从左边起4个字符
select RIGHT('dacadsa',4) --adsa --返回字符串从右边边起4个字符
select SUBSTRING('dacadsa',3,4) --返回字符串从左边第3个开始,取4个字符串 cads

select REPLICATE('da',4) --将指定字符串重复4次产生的字符串 dadadada

select reverse('ABCD') --字符串反转 --DCBA

select REPLACE('ABCD','A','aC')  --字符串的替换 --aCBCD

--指定字符串替换指定位置指定长度的字串后生成的字符串
select STUFF('ABCDEFG',1,3,'TT')  --TTDEFG

七、SQL server 数据库函数

SubString(表达式,起始,长度):取子串
Right(表达式,长度) :右边取子串
Str(浮点数[,总长度[,小数位]]):数值型转换字符型
LTrim(表达式)、RTrim(表达式):去左、右空格
CharIndex(子串,母串)  :返回子串起始位置
Convert(数据类型[(长度)],表达式[,日期转字符样式]):表达式类型转换
Cast(表达式 As 数据类型[(长度)]):表达式类型转换  
Abs(表达式):取绝对值
Power(底,指数):底的指数次方
Rand([整形数]);随机数产生器
Round(表达式,精度):按精度四舍五入
Sqrt(表达式):算术平方根
GetDate():当前的日期和时间
Day(表达式):表达式的日期值
Month(表达式):表达式的月份值
Year(表达式):表达式的年份值 
IsDate(表达式):是否合理日期  
IsNULL(是否空值,替代值):若空用指定值代替
IsNumeric(表达式):是否为合理的数值
Exists(子查询):检查结果集
Avg([Distinct 列名]):取均值
Count([Distinct 列名]):行数
Max([Distinct 列名]):最大值
Min([Distinct 列名]):最小值
Sum([Distinct 列名]):求和
暂无评论

发送评论 编辑评论

正在回复 的评论 :

				
上一篇
下一篇