diff --git "a/17 \344\276\257\351\224\237\351\223\226/\347\254\224\350\256\260/4-9.6\346\235\241\344\273\266\345\210\206\346\224\257.Markdown" "b/17 \344\276\257\351\224\237\351\223\226/\347\254\224\350\256\260/4-9.6\346\235\241\344\273\266\345\210\206\346\224\257.Markdown" new file mode 100644 index 0000000000000000000000000000000000000000..fccfc130c896aea3c160314dd352ea37d6785128 --- /dev/null +++ "b/17 \344\276\257\351\224\237\351\223\226/\347\254\224\350\256\260/4-9.6\346\235\241\344\273\266\345\210\206\346\224\257.Markdown" @@ -0,0 +1,72 @@ +# 条件分支 +### 选择结构 +单分支:if 双分支:if-else 嵌套:if +if-else语句用于在执行一组代码之前进行条件判断,根据判断的结果执行不同的代码。 +例:判定变量x是否为百分制成绩 +```sql +declare @x int +set @x = 65 +if @x>=0 and @x<=100 + print convert(char(3),@x)+'是百分制成绩' +else + print convert(char(3),@x)+'不是百分制成绩' +``` + +### 循环语句-while +WHILE语句根据条件重复执行一条或多条T-SQL代码,只要条件表达式为真,就循环执行语句。使用BREAK和CONTINUE关键字可以在循环内部控制While循环中语句的执行。 +例:循环打印1-10 +```sql +declare @a int = 1 +while (@a <= 10) +begin + print @a + set @a = @a + 1 +end +``` +例:九九乘法表 : 双层循环 +```sql +declare @i int = 1 + +while @i<=9 +begin + declare @j int = 1 + declare @result varchar(500) = '' + while @j<=@i + begin + --显示 + --不会自动转换类型,需要强转 + --set @result = @result + convert(varchar(2), @i) + ' * ' + convert(varchar(2), @j) + ' = '+ convert(varchar(2),@i*@j) + char(9) + --cast + set @result = @result + cast(@i as varchar(1)) + ' * ' + cast(@j as varchar(1)) + ' = '+ cast(@i*@j as varchar(1)) + char(9) + --控制J变量 + set @j =@j + 1 + end + print @result + set @i = @i + 1 +end +``` + +### 逻辑控制 case when +case语句是多条件分支语句,相比if-else语句,case语句进行多分支流程控制,使代码更加清晰,易于理解。case语句根据表达式逻辑值的真假来决定执行的代码流程。 + + +``` +例:练习:将StuScore成绩表中的学生成绩用五分制显示。 +--​ 5分:80分以上 +--​ 4分:60~79分 +--​ 3分:40~59分 +--​ 2分:20~39分 +--​ 1分:0~19分 +```sql +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 +``` \ No newline at end of file diff --git "a/17 \344\276\257\351\224\237\351\223\226/\347\254\224\350\256\260/5-9.7\345\255\220\346\237\245\350\257\242.Markdown" "b/17 \344\276\257\351\224\237\351\223\226/\347\254\224\350\256\260/5-9.7\345\255\220\346\237\245\350\257\242.Markdown" new file mode 100644 index 0000000000000000000000000000000000000000..3da78114a61f471fa178b073e6ac5220ec1d94ad --- /dev/null +++ "b/17 \344\276\257\351\224\237\351\223\226/\347\254\224\350\256\260/5-9.7\345\255\220\346\237\245\350\257\242.Markdown" @@ -0,0 +1,38 @@ +# 子查询 +一个 select 语句的查询结果能够作为另一个语句的输入值。子查询不仅可用于 where 子句中,还能够用于 from 子句中,此时子查询的结果将作为一个临时表来使用 +## 1.按结果分类 + +### 1.标量子查询 + +​ 标量子查询是指子查询返回的是单一值,如一个数字或一个字符串。 + +### 2.列子查询 + +​ 列子查询是指子查询返回的结果集是N行1列,该结果通常来自对表某个字段的查询结果,带in关键字的子查询是最常用的一类子查询,在使用in关键字进行查询时,子查询语句返回的结果应该是一个数据列中的多个值,如果仅返回1个数值,则可用标量子查询代替。 + +#### 1.In关键字 + +​ in代表:只要符合后面的条件就筛选出来。 +使用多行比较符 in 时,主查询会与子查询中的每一个值进行比较,如果与其中的任意一个值相同,则返回。not in 与 in 的含义恰好相反 +#### 2.any关键字 3.some关键字 + ny 或 some 用于子查询之前,通过 any|some 比较运算符,将一个表达式或列的值与子查询所返回的一列值中的每一行进行比较,只要有一次比较的结果为 true,则 any 或 some 测试返回 true,主查询执行;否则结果为false,主查询不执行 + + +#### 4.all关键字 +all 关键字位于多行比较运算符之后,通过 all 关键字将一个表达式或列的值与子查询所返回的一列值中的每一行进行比较,只要有一次比较的结果为 false,则 all 测试返回 false,主查询不执行;否则返回 true,执行主查询 +当 all 时,表示大于最大值 +### 3.行子查询 +​ 行子查询是指子查询返回的结果集是1行N列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。 + +### 4.表子查询 + +​ 1.from关键字 + +## 2.按位置分类 + +​ 1.from子查询 + +​ 2.where子查询 + +​ 3.wxists子查询 \ No newline at end of file