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