diff --git "a/08\351\273\204\346\245\267\351\222\212/\344\275\234\344\270\232/2022.9.20\346\270\270\346\240\207\347\273\203\344\271\240.md" "b/08\351\273\204\346\245\267\351\222\212/\344\275\234\344\270\232/2022.9.20\346\270\270\346\240\207\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..2fca9e0cc5d2c59658c8437ddd779c9777831a8d --- /dev/null +++ "b/08\351\273\204\346\245\267\351\222\212/\344\275\234\344\270\232/2022.9.20\346\270\270\346\240\207\347\273\203\344\271\240.md" @@ -0,0 +1,52 @@ +```sql +-- **游标练习** +select * from tb_bibliography +select * from tb_book +select * from tb_inf_student +select * from tb_record +select * from tb_student +--- 创建学生游标,该游标包含(学生姓名,兴趣爱好,生源地,荣誉总数) +declare stu_cur cursor for +(select name,hobby,ori_loca,prize from tb_student ts +inner join tb_inf_student tis on ts.stu_num = tis.stu_num) + +--deallocate stu_cur + + +--- 循环遍历161开头的学生信息 +select * from tb_student +declare num_cur cursor scroll for (select * from tb_student where stu_num like '161%') +declare @stu_num nvarchar(20),@name nvarchar(20),@gender nvarchar(20),@birth nvarchar(20),@school nvarchar(20),@major nvarchar(20); +open num_cur +fetch first from num_cur into @stu_num,@name,@gender,@birth,@school,@major +while @@FETCH_STATUS = 0 +begin + print @stu_num+','+@name+','+@gender+','+@birth+','+@school+','+@major + fetch next from num_cur into @stu_num,@name,@gender,@birth,@school,@major +end +deallocate num_cur + +--- 使用游标统计生源地为北京的荣誉总数 +--select * from tb_inf_student + +declare sum_cur cursor scroll for (select prize from tb_inf_student where ori_loca = '北京') +declare @sum int = 0; +declare @temp int = 0; +open sum_cur +fetch first from sum_cur into @temp +while @@FETCH_STATUS = 0 +begin + set @sum+=@temp; + fetch next from sum_cur into @temp +end +print '生源地为北京的荣誉总数:'+convert(varchar(10),@sum) +deallocate sum_cur + + + +--- 合理使用游标和事务,让5-1号前借书的学生将图书归还 + + + +``` + diff --git "a/08\351\273\204\346\245\267\351\222\212/\344\275\234\344\270\232/2022.9.21\345\207\275\346\225\260\344\275\234\344\270\232.md" "b/08\351\273\204\346\245\267\351\222\212/\344\275\234\344\270\232/2022.9.21\345\207\275\346\225\260\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..80aee224711c9c0aa3c791e18b00bd0c14432de1 --- /dev/null +++ "b/08\351\273\204\346\245\267\351\222\212/\344\275\234\344\270\232/2022.9.21\345\207\275\346\225\260\344\275\234\344\270\232.md" @@ -0,0 +1,9 @@ +--查询男女年龄最大的学生信息,要求显示:姓名,性别,年龄 students数据库 + +```sql +select StuName,StuSex,StuAge +from +(select *,dense_rank() over(partition by Stusex order by StuAge desc) b from StuInfo) as t +where b = 1 +``` + diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/9.14\350\247\206\345\233\276.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.14\350\247\206\345\233\276.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/9.14\350\247\206\345\233\276.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.14\350\247\206\345\233\276.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/9.15\347\264\242\345\274\225.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.15\347\264\242\345\274\225.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/9.15\347\264\242\345\274\225.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.15\347\264\242\345\274\225.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.20\346\270\270\346\240\207.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.20\346\270\270\346\240\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..8de5bc069bb3a857caeae47900aef7a72a311ee2 --- /dev/null +++ "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.20\346\270\270\346\240\207.md" @@ -0,0 +1,126 @@ +# 游标 + +#### 什么是游标 + +游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成**单个记录处理方式**。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。 + +#### 语句 + +**创建游标:** + +```sql +--1.创建游标(Scroll代表滚动游标,不加Scroll则是只进的,只能支持fetch next) +declare <游标名> cursor scroll for select 字段名 from 表名 +``` + +可以使用变量名来接收 + +```sql +declare <游标名> cursor scroll for select 字段名 from 表名 into 变量名 +``` + +多个字段可以多个变量来接收 + +```sql +declare <游标名> cursor scroll for select * from 表名 into 变量名,变量名,变量名,…… +``` + +**打开游标:** + +```sql +open <游标名> +``` + +**关闭游标:** + +``` +close <游标名> +``` + +**删除游标:** + +``` +deallocate <游标名> +``` + + + +**提取数据操作:** + +```sql +fetch first from <游标名> --结果集的第一行 +fetch last from <游标名> --最后一行 +fetch absolute 1 from <游标名> --从游标的第一行开始数,第n行。 +fetch relative 3 from <游标名> --从当前位置数,第n行。 +fetch next from <游标名> --当前位置的下一行 +fetch prior from <游标名> --当前位置的上一行 +``` + + + +**提取数据给变量以供它用(取出第3行学生姓名,查询该学生详细信息):** + +```sql +declare @vari varchar(20) +fetch absolute 3 from <游标名> into @vari +select * from StuInfo where stuName = @vari +``` + +**利用游标提取所有的学生信息:** + +```sql +--方案一: +fetch absolute 1 from <游标名> +while @@FETCH_STATUS = 0 --@@FETCH_STATUS=0,提取成功,-1提取失败,-2行不存在 + begin + fetch next from <游标名> + end + +--方案二: +declare @myvar varchar(20) +fetch first from <游标名> into @myvar +while @@FETCH_STATUS = 0 + begin + print '提取成功'+@myvar + fetch next from <游标名> into @myvar + end +``` + +**利用游标修改和删除数据:** + +```sql +--更新语法: +-- fetch absolute 3 from <游标名> +-- update 语句 where Current of <游标名> + + +--练习1:修改周飘的班级id为1 + +--练习2:使用删除姓名为曾鹏的个人信息 + +``` + +**创建游标指向某行多列数据,并循环显示数据:** + +```sql +--此处如果指向所有数据,可以将for后面的语句修改成select * from stuinfo +declare <游标名> cursor scroll +declare mycursor cursor scroll for select stuname,StuSex,ClassID from stuinfo + +open <游标名> + +declare @name varchar(20) +declare @sex varchar(2) +declare @cid int +fetch first from mycursor into @name,@sex,@cid +while @@FETCH_STATUS=0 +fetch next from <游标名> into into @name,@sex,@cid + +while @@FETCH_STATUS = 0 --@@FETCH_STATUS=0,提取成功,-1提取失败,-2行不存在 + begin + print '提取成功' + fetch next from CURSORMember into@into @name,@sex,@cid + end +close <游标名> +``` + diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.21\345\207\275\346\225\260.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.21\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..09a1d0226cf7e9b161b8a1bfe35d697345c74b9f --- /dev/null +++ "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.21\345\207\275\346\225\260.md" @@ -0,0 +1,68 @@ +# 函数 + +自定义函数/方法: + +​ 封装代码,重复使用,减少代码重复性 + + + +### 语句 + +##### 标量值函数 + +​ 只返回一个值 + +创建函数 + +```sql +create function 函数名(参数名 参数类型) +returns 返回值类型 +begin +--写结构体的地方 + …… + + return 返回值 +end +``` + +调用函数 + +```sql +select function dbo.函数名 +``` + + + +##### 表值函数 + +​ 返回一个表的数据 + +创建函数 + +```sql +create function 函数名(参数名 参数类型) +returns 新创建的表名 table (字段名 数据类型,字段名 数据类型,……) +begin +--如果要插入数据 + insert into 新建的表名 +--接上查询语句 + select…… + + retutn +end +``` + +调用函数 + +```sql +select * from dbo.函数名(参数值) +``` + + + +##### 删除函数 + +```sql +drop function 函数名 +``` + diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/9.8\345\255\220\346\237\245\350\257\242.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\345\255\220\346\237\245\350\257\242.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/9.8\345\255\220\346\237\245\350\257\242.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\345\255\220\346\237\245\350\257\242.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/9.8\346\216\222\345\272\217\345\207\275\346\225\260.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\346\216\222\345\272\217\345\207\275\346\225\260.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/9.8\346\216\222\345\272\217\345\207\275\346\225\260.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\346\216\222\345\272\217\345\207\275\346\225\260.md"