SQL SERVER学习笔记(七)

一 . 数据库结构设计三范式
1.属性的原子性:要求属性具有原子性,不可再分解
2.记录的唯一性:要求记录有唯一的标识,即实体的唯一性,不存在部份依赖
3.字段无冗余:要求任何字段不能由其他字段派生出来,不存在传递依赖

二 . T-SQL语句
1.信息打印
print ‘Hello’
select ‘Hello’
2.变量
局部变量:以@开头:先声明,再赋值
语法:declare @变量名 数据类型

declare @str varchar(20)
set @str = 'Hello sql' 
--select @str = 'Hello sql'
print @str 

set 和 select 进行赋值的区别
set:赋值给变量一个指定的值
select:一般用于表中查询出的数据赋值给变量,如果查询结果有多条数据,只取最后一条数据赋值给变量
举例:select @a = select 字段名 from 表名
当前表最后一行的某个字段赋值给@a

declare @AccountID int			--定义变量
select @AccountID = (select AccountID from AccountInfo where AccountCode = '431098198906038754')			--通过查询语句赋值
select CardNo 卡号,CardMoney 余额 from BankCard
where AccountID = @AccountID	--通过变量查询信息

全局变量:以@@开头:由系统定义和维护,可直接使用,只读
@@ERROR:返回执行的上一个语句的错误号
@@IDENTITY:返回最后插入的标识值
@@MAX_CONNECTIONS:返回允许同时进行的最大用户连接数
@@ROWCOUNT:返回上一语句受影响的行数
@@SERVERNAME:返回运行SQL SERVER的本地服务器的名称
@@SERVICENAME:返回SQL SERVER正在其下运行的注册表项的名称
@@TRANCOUNT:返回当前连接的活动事务数
@@LOCK_TIMEOUT:返回当前会话的当前锁定超时设置(毫秒)

三 . go语句
(1)等待go语句之前代码执行完成之后才能执行后面的代码

create database DBTEST
go		----必须等到上方创建数据库的命令执行完成后才执行下方切换数据库的命令
use DBTEST

(2)批处理结束的一个标志

declare @num int
set @num = 100
set @num = 200

declare @num1 int
set @num1 = 100
go
set @num1 = 200			--此行会报错,num1的作用范围在go语句之前,此num1相当于没有声明

四 . 运算符
算术运算符:加(+),减(),乘(*),除(/),模(%)
逻辑运算符:AND,OR,LIKE,BETWEEN,IN,EXISTS,NOT, ALL, ANY
赋值运算符:=
字符串运算符:+
比较运算符:=,>,<,>=,<=,<>
位运算符:|,&,^
符合运算符:+=,-=,/=,%=,**=

数据类型转换函数
Convert(转换后数据类型,需转换值)
Cast(需转换值 as 转换后数据类型)
举例

declare @area int = 20
print '面积值:' + Convert(varchar(10),@area)
print '面积值:' + Cast(@area as varchar(10))

2.查询姓名中含有“刘”的账户信息及银行卡信息

select * from AccountInfo
inner join BankCardInfo on BankCardInfo.ID = AccountInfo.BackCardID
where AccoutInfo.Name like '%刘%'

3.查询出余额在2000-5000的银行卡信息
语法:between min and max

select * from BankCardInfo
where CardMoney between 2000 and 5000

3.查询出状态为冻结或注销的银行卡信息
语法:between min and max

select * from BankCardInfo
where CardState in (3,4)

4.关羽身份证:420107199507104133,关羽到银行来开户
查询此身份证再账户表是否存在,不存在则进行开户开卡,存在则不开户直接开卡
if…eles…语法:
if 条件
begin
end
else
begin
end

declare @AccountID int 
if exists(select * from AccountInfo where AccountCode = '420107199507104133')
	begin		---存在此人
		select @AccountID = (select AccountId from AccountInfo 			where AccountCode = '420107199507104133')
		insert into BackCardInfo(CardNo,AccountId,CardPwd,CardMoney,CardState)
		values('6225547858741264',@AccountId,'122345',0,1)
	end
else
	begin		---不存在此人
		insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
		values('420107199507104133','13656565656','关羽',getdate())
		set @AccountID = @@IEDNTITY
		insert into BankCardInfo(CardNo,AccountId,CardPwd,CardMoney,CardState)
		values('6225547858741264',@AccountID,'123456',0,1)
	end

5.查询银行卡账户余额,是不是所有账户余额都超过了3000
使用All时,数字只能放前面,即 3000 < All(查询结果)
不能写成 : All(查询结果) > 3000

if 3000 < All(select CardMoney from BankCardInfo)
	begin
	end
else
	begin
	end

6.查询银行卡账户余额,是否含有账户余额超过3000000的信息
即:有一个账户余额超过3000000条件就成立

if 3000000 < Any(select CardMoney from BankCardInfo)
	begin
	end
else
	begin
	end

五.流程控制
if…begin…end…else…begin…end语句

if 条件
	begin
	end
else
	begin
	end

选择分支
case…when…then…end语句

case 
	when 条件1 >= 200 then '1'
	else '2'
end 用户等级		----别名
case CardState
	when 1 then '正常'
	when 2 then '挂失'
end 

循环结构
while
1.循环打印九九乘法表

declare @i int = 1
while @i <= 9
begin
	declare @@str varchar(500) = ''
	declare @j int = 1
	while @j <= @i
		begin
			set @str = @str + cast(@1 as varchar(1)) + '*' + cast(@J as varchar(1)) + '=' + cast(@i *@j as varchar(2)) + char(9)
			set @j = @j + 1
		end
	set @i = @i + 1
	print @str
end

特殊字符
char(9):制表符 char(10):换行符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工控老秃驴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值