SQL (变量 分支 循环)

SQL跟我们学习的其他语言差不多都是可以定义变量,选择(if - else),循环(类似于for或者while)。由于自己最近在忙别的事,但是好在忙完了,要赶紧结束这一个部分了。

--信息打印
print 'hello.sql'--消息打印
select 'hello.sql'--结果信息打印

--变量:(1)局部变量(2)全局变量
--(1)局部变量:以@开头,先声明,再赋值
declare @str varchar(20)
set @str='i like sql'
print @str
--select @str='i like sql' 
--set:赋值变量指定的值
--select:一般用于表中查询出的数据赋值给变量,如果查询结果有多条,去最后一条赋值
--select @a=字段名 from 表名
--当前表的最后一行赋值给变量

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

--实例
--(1)为赵云此人进行开户卡操作,
insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
values('420107198905064135','13554785425','刘备',GETDATE())
declare @AccountId int
set @AccountId =@@IDENTITY
insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
values('6225125478544587',@AccountId,'123456',0,1)
select * from AccountInfo
select * from BankCard

--(2需要求出张飞的银行卡号和余额。张飞身份证:420107199602034138)
select CardNo 卡号,CardMoney 余额 from BankCard
inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId
where AccountCode='420107199602034138'

select * from AccountInfo
select * from BankCard

declare @AccountId_1 int
select @AccountId=(select @AccountId from AccountInfo where AccountCode='33489389')

--go语句
--(1)等待go语句之前代码完成之后才能执行后面代码
create database DBTEST2
go 
use DBTEST2

--批处理的标志
--
declare @num int
set @num=100
set @num=200
--declare @num1 int @num1作用范围在两个go之间
--set @num1=100
--go
--set @num1=200
--print @num

--运算符
declare @c int =10
declare @k int =5 
declare @zc int
declare @mj int
set @zc=(@c*@k)*2
set @mj=@c*@k
print '圆周长'+Convert(varchar(10),@zc)
print '圆面积'+Convert(varchar(10),@mj)

print  '圆周长'+cast(@zc as varchar(10))

--查询银行卡状态为冻结,并且余额超过1000000的银行卡信息
select * from BankCard where CardState=3 and CardMoney>1000000

--查询姓王的学长信息
select * from AccountInfo
inner join BankCard on BankCard.AccountId=AccountInfo.AccountId
where RealName like '%刘%'

-- 查询在2000-5000之间的银行卡信息
select * from BankCard where CardMoney between 2000 and 5000

--查询关羽身份证:420107199507104133,关羽到银行开开户
--查询身份证账户表是否存在,不存在则进行开户卡,存在则不开户直接开卡
declare @AccountId int
if exists(select * from AccountInfo where AccountCode='420107199507104133')
 begin
     select @AccountId=
	(select AccountId from AccountInfo where AccountCode='420107199507104133')
	
	insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
	values('622547858741164',@AccountId,'12345',0,1)
 end
 else 
	begin
		insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
		values('420107199507104133','136565656','关羽',GETDATE())
		set @AccountId=@@IDENTITY
		insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
		values('622547858741163',@AccountId,'12345',0,1)
   end

select * from AccountInfo
select * from BankCard

--扩展:上面需求添加一个限制和一个人最多只能开3张银行卡
declare @AccountId int --账户编号
declare @CardCount int --卡数量
if exists(select * from AccountInfo where AccountCode ='420107199507104133' )
	begin
		select @AccountId=
		(select AccountId from AccountInfo where AccountCode='420107199507104133')
		select @CardCount=
		(select count(*) from BankCard where AccountId=@AccountId)
		if @CardCount<=2
		begin
			insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
			values('6225547858741264',@AccountId,'123456',0,1)
		end
		else
		begin
			print'你的银行卡太多了,只能办理3张'
		end
		end
else
	begin
		insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
		values('420107199507104133','136565656','关羽',GETDATE())
		set @AccountId=@@IDENTITY
		insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
		values('622547858741163',@AccountId,'12345',0,1)
	end


--查询银行卡账户余额,是不是所有账户余额都超过3000
if 3000<ALL(select CardMoney from BankCard)
	begin
		print'所有银行卡都超过3000'
	end
else 
	begin
		print'不是所有银行卡余额都超过3000'
	end

--选择分支结构
--(1)取钱
declare @balance money
select @balance=
(select CardMoney from BankCard where CardNo='622547858741163')
if @balance>=1000
	begin
		update BankCard set CardMoney = CardMoney-5000
		where CardNo='622547858741163'
		insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)
		values('622547858741163',0,5000,GETDATE())
	end
	begin
		print'余额不足'
	end

--查询银行卡信息,将银行卡信息1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”
--并且根据余额显示银行卡等级
--30万以下为“普通用户”,30万以上为“VIP用户”
--显示分别为卡号,身份证,姓名,余额,用户等级,银行卡状态
select CardNo 卡号,AccountCode 身份证号,RealName 姓名,CardMoney 余额,
case
	when CardMoney>=300000 then 'VIP用户'
	else '普通用户'
end 用户等级,
case CardState
	when 1 then '正常'
	when 2 then '挂失'
	when 3 then '冻结'
	when 4 then '注销'
end 银行卡状态
from BankCard
inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId

--循环结构(while)
--(1)循环打印1-10
declare @i int =1
while @i<=10
begin
	print @i
	set @i=@i+1
end
--(2)循环打印九九乘法表
declare @i_1 int=1
while @i_1<=9
begin
	declare @str varchar(1000)=''
	declare @j int=1
	while @j<=@i_1
		begin
			set @str=@str+Convert(varchar(10),@i_1)+'*'+Convert(varchar(10),@j)+'='+Convert(varchar(10),@i_1*@j)+'	'
			set @j=@j+1
		end
		print @str
	set @i_1=@i_1+1
end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值