diff --git "a/03\351\231\210\346\236\253/\344\275\234\344\270\232/20220906-\351\200\273\350\276\221\346\216\247\345\210\266\345\222\214\346\235\241\344\273\266\345\210\206\346\224\257\344\275\234\344\270\232.md" "b/03\351\231\210\346\236\253/\344\275\234\344\270\232/20220906-\351\200\273\350\276\221\346\216\247\345\210\266\345\222\214\346\235\241\344\273\266\345\210\206\346\224\257\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..7efe10176b6ac8946cd8cdebbbac6bca4d70e656 --- /dev/null +++ "b/03\351\231\210\346\236\253/\344\275\234\344\270\232/20220906-\351\200\273\350\276\221\346\216\247\345\210\266\345\222\214\346\235\241\344\273\266\345\210\206\346\224\257\344\275\234\344\270\232.md" @@ -0,0 +1,83 @@ +```sql +--#### 变量 + +--1. 为赵云此人进行开户开卡操作,赵云身份证:420107199904054233 +declare @idcard varchar = '420107199904054233' +insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime) +values('420107199904054233','13847966239','赵云',GETDATE()) +insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState) +values('6225125478544588',4,'123456',0,1) +--2. 需要求出张飞的银行卡卡号和余额,张飞身份证:420107199602034138 (1.使用连接查询,2.使用变量) +declare @sco varchar(20) +select @sco= AccountCode from AccountInfo where AccountCode='420107199602034138' +select CardNo 卡号,CardMoney 余额 from BankCard +inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId +where AccountCode=@sco + +--#### 逻辑控制 + +--##### 条件分支if-else + +-- 3.某用户银行卡号为“6225547854125656”,该用户执行取钱操作,取钱5000元,余额充足则进行取钱操作,并提示"取钱成功",否则提示“余额不足”。 +declare @bank money +select @bank=(select CardMoney from BankCard where CardNo='6225547854125656') +--可以取钱 +if @bank>=5000 + begin + update BankCard set CardMoney=CardMoney-5000 + where CardNo='6225547854125656' + insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) + values('6225547854125656',0,5000,GETDATE()) + end +--不能取钱 +else + begin + print'余额不足' + end +select*from CardExchange + +--##### 条件分支:case-when + +-- 4.查询银行卡信息,将银行卡状态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 '注销' + else '异常' +end 银行卡状态 +from BankCard +inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId + +--##### **while** + +-- 5.循环打印1-10。 +declare @sb int=1 +while @sb<=10 +begin +print @sb +set @sb= @sb+1 +end +-- 6.打印99乘法表 +declare @i int=1 +while @i<=9 +begin + declare @cf varchar(1000)='' + declare @j int=1 + while @j<=@i + begin + set @cf=@cf+cast(@i 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 +``` + diff --git "a/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220906-\351\200\273\350\276\221\346\216\247\345\210\266\347\254\224\350\256\260.md" "b/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220906-\351\200\273\350\276\221\346\216\247\345\210\266\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..64e26d41d58058204023bc96547839707a4e83f6 --- /dev/null +++ "b/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220906-\351\200\273\350\276\221\346\216\247\345\210\266\347\254\224\350\256\260.md" @@ -0,0 +1,127 @@ +## 逻辑控制语句 + +#### if条件分支 + + IF-ELSE条件语句 + 语法:IF() + 语句或语句块 + ELSE + 语句或语句块 +若有多条语句,则使用语句块,语句块使用BEGIN...END表示,其作用相当于Java语句的“{}”符号。 + +```sql + IF() + BEGIN + 语句1 + 语句1 + ..... + END +ELSE +``` + +例如从成绩表TScore中查询,本班的平均分数在70分以上,则显示“成绩优秀”显示前3名的考试信息;否则显示“成绩较差”并显示后3名的考试信息。 + +```sql +declare @myavg float +select @myavg = avg(score) from TScore +print '本班平均分'+convert(varchar(5),@myavg) +if(@myavg > 70) + begin + print '本班成绩优秀,前三名成绩为:' + select top 3 * from TScore order by score desc + end +else + begin + print '本班成绩较差,后三名成绩为:' + select top 3 * from TScore order by score + end +``` + +#### 循环控制语句 + +while:可以通过break和continue控制循环语句中的执行。 + +##### 语法: WHILE(条件) + 语句或语句块 + [BREAK] + +使用break关键字从最内层的while循环中退出。 +例如本次考试成绩较差,要提分,确保每人的成绩都通过,提分规则,先给每人加2分,看是否通过,如没有全通过,继续加2分,直到每人都通过为止。 + +```sql +declare @n int +while(1=1) + begin + select @n = count(*) from TScore where score < 60 + if(@n > 0) + update TScore set score = score + 2 + else + break + end +``` + +#### 逻辑控制语句 + +##### case 多分支语句 + +相当于多重if语句 + +##### 语法: + + + +```sql + CASE + WHEN 条件1 THEN 结果1 + WHEN 条件2 THEN 结果2 + [ELSE 其他结果] + END +``` + +例如:成绩表TScore中,用等级来评成绩分数。A:90分以上,B:80~89,C:60~79,D:60分以下,并显示他们的学号stuNO。 +代码: + +```sql +select stuNO,成绩 = CASE + when score >= 90 then 'A' + when score between 80 and 89 then 'B' + when score between 60 and 79 then 'C' + else 'D' + end from TScore +``` + + + +## 批处理语句 + +go语句特点: + +1. 等待go语句前的代码执行完成后,再执行go后面的代码。 +2. 批处理语句的结束标志。 + +```sql +--下面的@num变量作用域为全局 +--declare @num int +--set @num = 0 + +--下面的@num变量的作用域是局部,只在两个go之间可以使用,最后一行代码会报错 +--.........sql代码 +--go +--declare @num int +--set @num = 0 +--go +--set @num = 1 +``` + + + + + +## 总结 + +变量的使用。要先用DECLARE 关键字声明,然后用SET或SELECT赋值。局部变量前必须有 “@” 作前缀,全局变量必须有 “@@” 作前缀。 +变量的输出可以用:PRINT或SELECT语句。 +逻辑控制语句提供了条件操作所需的顺序和逻辑。 +了解T-SQL编写工具。 +批处理可以提高语句执行的效率,使用“GO”作为结束标志。 +