diff --git "a/13 \346\264\252\347\201\277\350\212\263/\344\275\234\344\270\232/9.06 day6 \351\200\273\350\276\221\346\216\247\345\210\266\344\275\234\344\270\232.md" "b/13 \346\264\252\347\201\277\350\212\263/\344\275\234\344\270\232/9.06 day6 \351\200\273\350\276\221\346\216\247\345\210\266\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..879ca243d23d83c74231ec70bc28552f72c6ed8a --- /dev/null +++ "b/13 \346\264\252\347\201\277\350\212\263/\344\275\234\344\270\232/9.06 day6 \351\200\273\350\276\221\346\216\247\345\210\266\344\275\234\344\270\232.md" @@ -0,0 +1,103 @@ +# 9.06 day6 逻辑控制作业 + +## 1.在 StuScore 表中如果学生的平均成绩没有达到80分,便给每位同学的数学成绩加1分,然后再次判断平均成绩是否达到80分, --否则继续加分,这样反复加分,直到其平均成绩超过80分 + +``` +while(1=1) +begin + declare @j int + select @j=AVG(Chinese+English+Math) from StuScore + print @j + if(@j<=80) + update StuScore set Math=Math+1 + else + break +end +``` + +## 2.为赵云此人进行开户开卡操作,赵云身份证:420107199904054233 + +```sql +insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime) +values('420107199904054233','12345678910','赵云',GETDATE()) +insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState) +values('6225125478541111',4,'123456',0,1) +``` + +## 3.需要求出张飞的银行卡卡号和余额,张飞身份证: (1.使用连接查询,2.使用变量) + +``` +declare @yhk varchar(20) +select @yhk = bc.CardNo from BankCard bc +inner join AccountInfo ac on bc.AccountId =ac.AccountId +where ac.AccountCode = '420107199602034138' +select CardNo 卡号,CardMoney 余额 from BankCard where CardNo = @yhk +``` + +## 4.某用户银行卡号为“6225547854125656”,该用户执行取钱操作,取钱5000元,余额充足则进行取钱操作,并提示"取钱成功",否则提示“余额不足”。 + +``` +declare @ye money +select @ye = CardMoney from BankCard where CardNo='6225547854125656' +if @ye >5000 +begin + print '取钱成功' +end +else +begin + print '余额不足' +end +``` + +## 5.查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”, +--并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", +--显示列分别为卡号,身份证,姓名,余额,用户等级,银行卡状态。 + +``` +select bc.CardNo,ac.AccountCode,ac.RealName,bc.CardMoney,bc.cardstate, +case + when cardstate = 1 then '正常' + when cardstate = 2 then '挂失' + when cardstate = 3 then '冻结' + when cardstate = 4 then '注销' + end 状态, +case + when cardmoney >300000 then 'VIP用户' + else '普通用户' + end '等级' +from BankCard bc +inner join AccountInfo ac on ac.AccountId =bc.AccountId +``` + +## 6.循环打印1-10。 + +``` +declare @n int=1 +while @n<=10 +begin +print @n +set @n=@n+1 +end +``` + +## 7.打印99乘法表 + +``` +declare @i int =1 +while @i<=9 +begin + declare @j int =1 + declare @ret varchar(200)=' ' + +while @j<=@i +begin +set @ret=@ret + cast(@j as varchar(1))+'*'+cast(@i as varchar(1))+'='+cast(@i*@j as varchar(10))+char(9) +set @j=@j+1 +end + +print @ret +set @i=@i+1 + +end +``` + diff --git "a/13 \346\264\252\347\201\277\350\212\263/\347\254\224\350\256\260/Sql server \351\253\230\347\272\247\347\254\224\350\256\260.md" "b/13 \346\264\252\347\201\277\350\212\263/\347\254\224\350\256\260/Sql server \351\253\230\347\272\247\347\254\224\350\256\260.md" index 20f86ebb307f771985d8fa9848dbe81f35974eaf..0cafb806125cf2f06e04a39a7b4de3d427439aba 100644 --- "a/13 \346\264\252\347\201\277\350\212\263/\347\254\224\350\256\260/Sql server \351\253\230\347\272\247\347\254\224\350\256\260.md" +++ "b/13 \346\264\252\347\201\277\350\212\263/\347\254\224\350\256\260/Sql server \351\253\230\347\272\247\347\254\224\350\256\260.md" @@ -187,7 +187,7 @@ ER图中E代表Entity实体 R代表Relationship关系,总结来说ER图就是 | X2001 | P101 | 1 | | X2002 | P202 | 1 | -## 4.3 第三范式(3NF) +### 4.3 第三范式(3NF) 第三范式:如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) @@ -263,4 +263,107 @@ select @Id = stuId from stuinfo where stuname ='XXX' | ------------------------ | -------------------------- | -------------- | | 同时对多个变量同时赋值时 | 支持 | 不支持 | | 表达式返回多个值时 | 将返回的最后一个值赋给变量 | 出错 | -| 表达式未返回值时 | 变量保持原值 | 变量被赋null值 | \ No newline at end of file +| 表达式未返回值时 | 变量保持原值 | 变量被赋null值 | + +## 6.字符串转换 convert + +如果print打印输出变量的时候不是字符串类型的话需要用 convert 进行转换 具体如下 + +```sql +print '当前自动编号的值:' + convert(varchar(10),@@IDENTITY) +``` + +## 7.逻辑控制语句 + +### 7.1 if - else + +语法结构 + +```sql +if (条件表达式) + begin --表示开始 + 命令程序 + end --结束 +else + begin + 命令程序 + end +``` + +例题: + +```sql +--查询S2002总分有没有超过250: 如果没有超过, 打印 不合格 超过250 打印合格 +declare @tscore int + +select @tscore = Chinese+English+Math from StuScore where StuID='S2001' + +print @tscore + +if @tscore>=240 +begin + if @tscore >=245 + begin + print '优秀' + end + else + begin + print '合格' + end +end + +else +begin + print '不合格' +end +``` + +### 7.2 case语句 + +语法结构 + +```sql +select 条件表达式, +case + when 条件 then 结果 + when 条件1 then 结果1 +else --如果跟上面条件都不符合就显示这个结果 + end 列名 +from 表名 +--from后面也可以继续跟着连表查询 +``` + +例如: + +```sql +--练习:将StuScore成绩表中的学生成绩用五分制显示。 +--​ 5分:80分以上 +--​ 4分:60~79分 +--​ 3分:40~59分 +--​ 2分:20~39分 +--​ 1分:0~19分 +select stuName,stuID,english, +case + when english>=80 then '5分' + when english>=60 then '4分' + when english>=40 then '3分' + when english>=20 then '2分' + when english>=0 then '1分' + else '0分' +end '5分制' +from StuScore +inner join StuInfo on StuScore.StuID = StuInfo.StuNo +``` + +### 7.3 while循环 + +```sql +while 条件表达式 + begin --跟if一样表示开始 + 程序代码块 + break --和在c# 中一样表示跳出循环 + continue -- 跳过后面的语句,但是循环继续执行 + 命令行或程序块 + end +``` +