From b21790b55d7ed02277d40576f893ccfee4635cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:34:52 +0000 Subject: [PATCH 1/9] 0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈志梁 <2864599615@qq.com> --- ...3\345\212\241\347\273\203\344\271\240.sql" | 38 ++++++++++ ...5\345\233\276\347\273\203\344\271\240.sql" | 7 ++ .../2022-09-20\346\270\270\346\240\207.sql" | 63 ++++++++++++++++ .../2022-09-21\345\207\275\346\225\260.sql" | 75 +++++++++++++++++++ 4 files changed, 183 insertions(+) create mode 100644 "19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-06-19\344\272\213\345\212\241\347\273\203\344\271\240.sql" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-15\350\257\225\345\233\276\347\273\203\344\271\240.sql" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-20\346\270\270\346\240\207.sql" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-21\345\207\275\346\225\260.sql" diff --git "a/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-06-19\344\272\213\345\212\241\347\273\203\344\271\240.sql" "b/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-06-19\344\272\213\345\212\241\347\273\203\344\271\240.sql" new file mode 100644 index 0000000..3bebc95 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-06-19\344\272\213\345\212\241\347\273\203\344\271\240.sql" @@ -0,0 +1,38 @@ +--ŷת1000Ԫ(checkԼ˻>=0) + +alter table bankcard add constraint CK_money check(cardmoney>=0) + + +begin transaction +declare @money money=1000; +declare @qc varchar(20); +declare @hc varchar(20); +declare @esum int=0; + +select @qc=CardNo from AccountInfo a join BankCard b on a.AccountId=b.AccountId +where RealName='' + + +update BankCard set CardMoney=CardMoney-@money where CardNo=@qc +set @esum+=@@error + +insert CardExchange values(@qc,0,@money,GETDATE()) + +select @hc=CardNo from AccountInfo a join BankCard b on a.AccountId=b.AccountId +where RealName='ŷ' + +update BankCard set CardMoney=CardMoney+@money where CardNo=@hc +set @esum+=@@error + +insert CardExchange values(@hc,@money,0,GETDATE()) +insert CardTransfer values(@qc,@hc,@money,GETDATE()); +if(@esum>0) +begin + print 'תʧ' + rollback transaction--ع +end +else +begin + print 'ת˳ɹ' + commit transaction --ύ +end \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-15\350\257\225\345\233\276\347\273\203\344\271\240.sql" "b/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-15\350\257\225\345\233\276\347\273\203\344\271\240.sql" new file mode 100644 index 0000000..3eb9967 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-15\350\257\225\345\233\276\347\273\203\344\271\240.sql" @@ -0,0 +1,7 @@ +--1дͼʵֲѯп˻Ϣʾţ֤ +create view vw_aban(ʾ,֤,,) +as +select CardNo,AccountCode,RealName,CardMoney from AccountInfo a +join BankCard b on a.AccountId=b.AccountId +go +select * from vw_aban diff --git "a/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-20\346\270\270\346\240\207.sql" "b/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-20\346\270\270\346\240\207.sql" new file mode 100644 index 0000000..8010919 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-20\346\270\270\346\240\207.sql" @@ -0,0 +1,63 @@ +select * from tb +declare students cursor scroll for(select name,hobby,ori_loca,prize from tb_student s join tb_inf_student i on s.stu_num=i.stu_num) + +open students + +fetch next from students + +close students + + +declare stunum cursor scroll for(select * from tb_student where stu_num like '%161_%') + +open stunum + +declare @stu_num char(8) ,@name varchar(8),@gender bit ,@birth date ,@school varchar(10),@major char(20) +fetch first from stunum +while @@FETCH_STATUS=0 +begin + print @stu_num+','+@name+','+cast( @gender as varchar(10))+','+cast( @birth as varchar(10))+','+@school+@major + fetch next from stunum into @stu_num,@name,@gender,@birth,@school,@major +end + +close stunum + + +declare loca cursor scroll for (select ori_loca,count(ori_loca) from tb_inf_student where ori_loca='' group by ori_loca) + +open loca +fetch first from loca +declare @oloca varchar(8),@locount int +fetch first from loca into @oloca,@locount +print @oloca+','+cast( @locount as varchar(8)) + +close loca + +deallocate xs3 +declare xs3 cursor scroll for (select stu_num,return_time from tb_record where borrow_time<'2019-05-01') +open xs3 +begin transaction +declare @a char(8) +declare @b date +fetch first from xs3 into @a,@b +while @@FETCH_STATUS=0 + begin + if @b is null + begin + update tb_record set return_time = getdate() where stu_num = @a + end + fetch next from xs3 into @a,@b + end +--select * from tb_record +--rollback transaction +declare @err int=0 +set @err +=@@error +if @err>0 + begin + print 'ʧ' + rollback transaction + end +else + begin + select stu_num,return_time from tb_record + end \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-21\345\207\275\346\225\260.sql" "b/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-21\345\207\275\346\225\260.sql" new file mode 100644 index 0000000..3d341db --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\344\275\234\344\270\232/2022-09-21\345\207\275\346\225\260.sql" @@ -0,0 +1,75 @@ +--дһеĽܺ + +go +create function moneysum() +returns table +as + return select sum(CardMoney) ܺ from BankCard +go + +select * from moneysum() +--2˻ţ˻ʵ + +go +create function zname(@id int) +returns varchar(20) +as +begin + declare @name varchar(20) + select @name=RealName from AccountInfo where AccountId=@id +return @name +end +go +select dbo.zname(2) +--3ݿʼʱͽʱ䣬ؽ׼¼ǮȡǮ׼¼а ʵţǮȡǮʱ䡣 + +go +create function cards(@begindate varchar(20),@enddate varchar(20)) +returns table +as + +return select RealName,b.CardNo,MoneyInBank,MoneyOutBank,ExchangeTime from CardExchange c +join BankCard b on c.CardNo=b.CardNo +join AccountInfo a on b.AccountId=a.AccountId +where ExchangeTime > '2022-09-01 00:00:00' and ExchangeTime < '2022-09-30 23:59:59' +go + +select * from cards('2022-09-01','2022-09-30') + +drop function cards +--һ߼ӣݳ˷ؽsql仹ݣ綨ȣ + +--4ѯпϢп״̬1,2,3,4ֱתΪ֡,ʧ,,עпʾпȼ 30Ϊͨû,30Ϊ"VIPû"ֱʾţ֤ûȼп״̬ + +--һֱsqlʹcase when + +--ȼ״̬úʵ + +go +create function messag() +returns table +as +return select CardNo ,AccountCode ,RealName ,CardMoney ,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û' +when CardMoney <300000 then 'ͨû' +end ûȼ +from BankCard b +join AccountInfo a on b.AccountId=a.AccountId +go + +select * from messag() +--5дݳ䣬ʵ꣬磺 -- Ϊ2000-5-5ǰΪ2018-5-4Ϊ17 -- Ϊ2000-5-5ǰΪ2018-5-6Ϊ18 + +go +create function births() +returns table +as + return select DATEDIFF(yy,empBirth,GETDATE()) as from emp +go \ No newline at end of file -- Gitee From 7959cc85f2a829bc6f7e60e2d677c6841187bd48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:35:40 +0000 Subject: [PATCH 2/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2019?= =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81/=E7=AC=94=E8=AE=B0/=E7=AC=94?= =?UTF-8?q?=E8=AE=B0-=E9=80=BB=E8=BE=91=E8=AF=AD=E5=8F=A5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...73\350\276\221\350\257\255\345\217\245.md" | 100 ------------------ 1 file changed, 100 deletions(-) delete mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\351\200\273\350\276\221\350\257\255\345\217\245.md" diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\351\200\273\350\276\221\350\257\255\345\217\245.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\351\200\273\350\276\221\350\257\255\345\217\245.md" deleted file mode 100644 index fe97f6a..0000000 --- "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\351\200\273\350\276\221\350\257\255\345\217\245.md" +++ /dev/null @@ -1,100 +0,0 @@ ------- - -### 1.if-else语句 - -``` ---语法结构: -if( 条件表达式 ) - begin - 命令行或程序块1 - 命令行或程序块2 - end -else - begin - 命令行或程序块 - end -``` - -统计并显示2009-2-17的Java Logic考试平均分如果平均分在70以上,显示“考试成绩优秀”,并显示前三名学生的考试信息如果在70以下,显示“考试成绩较差”,并显示后三名学生的考试信息 - -``` -declare @subjectno int --存储科目编号 -declare @avg numeric(5,2)--存储平均分 ---查询科目编号赋值给@subjecton ---查询平均分赋值给@avg -if(@avg>70) - begin - print '成绩优秀' - select语句显示前3名考生信息 - end -else - begin - print '成绩较差' - select语句显示后3名考生信息 - end -``` - ------- - -### 2.**while-continue-break**语句 - -语法: continue[继续] - -``` -while(条件表达式) - begin - 命令行或程序块 - [break] →→ 跳出循环 - [continue] →→ 可以让程序跳过continue命令之后的语句 - 命令行或程序块 - end -``` - -==如果有多条语句才需要begin-end语句块== - ------- - -### 3.case语句 - -``` -select 条件表达式, case [compare_value] - when 条件1 then 结果1 - when 条件2 then 结果2 - [else 其他结果] - end [列名] -from 表名 - ---批处理可以提高语句的执行效率 -``` - -==else:表示case中所有when条件均不为true时返回的结果,如果省略else且when条件都为false时, case语句返回null== - -示例:根据生日添加一个生肖列 - -CASE句法返回第一个value = year(PeopleBirth) % 12比较结果为真的结果。 如果没有比较结果符合,则返回ELSE后的结果,如果没有ELSE部分,则返回NULL: - ------- - -查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”,并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", - -``` -select CardNo ,AccountCode ,RealName ,CardMoney ,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用户' -when CardMoney <300000 then '普通用户' -end 用户等级 -from BankCard b -join AccountInfo a on b.AccountId=a.AccountId -``` - ------- - -### 4.特殊字符 - -制表符 CHAR(9);换行符 CHAR(10);回车 CHAR(13); \ No newline at end of file -- Gitee From 9e638b88e0c691f23fd6e8a01a466c557d2d159c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:35:53 +0000 Subject: [PATCH 3/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2019?= =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81/=E7=AC=94=E8=AE=B0/2022-09-15?= =?UTF-8?q?=E8=A7=86=E5=9B=BE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022-09-15\350\247\206\345\233\276.md" | 60 ------------------- 1 file changed, 60 deletions(-) delete mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-15\350\247\206\345\233\276.md" diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-15\350\247\206\345\233\276.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-15\350\247\206\345\233\276.md" deleted file mode 100644 index f98c07c..0000000 --- "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-15\350\247\206\345\233\276.md" +++ /dev/null @@ -1,60 +0,0 @@ -## 视图 - -#### 关系(Relations) - -三种类型关系: - -- 表(Table)--基表,存储关系(Base Tables,Sorted relations) - -- 视图(Views)--虚拟关系(Virtual relations)(不是物理存在的是虚拟的) - -- 临时结果(Temporary results)--用于构建**子查询**的结果 - - - -**视图的作用** - -- 视图能够简化用户的操作 -- 视图使用户能以多种角度看待同一数据 -- 视图对重构数据库提供了一定的逻辑独立性 -- 视图能够对机密数据提供安全保护 - - - -##### 定义视图 - -- 行列子集视图:去掉了某些行和某些列,但保留了主键 - -- with check option 视图 -- 带表达式的视图 - - - - - -```sql ---创建视图-- -create or replace view v_student as -select Sno,Sname -from student; - ---从视图中检索数据,即查询上面这个视图-- -select * from v_student; - ---也可以向查询添加条件-- -select * -from v_student -where Sname like '%云‘; - ---删除视图-- -drop view v_student; -``` - - - - - -#### 视图的设计原则 - -- 以 select * 方式创建的视图:可扩充性差,应尽可能避免 - -- Gitee From ab62069187e7fd8ec8792409cb984b011c29f9dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:36:01 +0000 Subject: [PATCH 4/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2019?= =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81/=E7=AC=94=E8=AE=B0/ER=E5=9B=BE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ER\345\233\276.md" | 49 ------------------- 1 file changed, 49 deletions(-) delete mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/ER\345\233\276.md" diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/ER\345\233\276.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/ER\345\233\276.md" deleted file mode 100644 index f06bc13..0000000 --- "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/ER\345\233\276.md" +++ /dev/null @@ -1,49 +0,0 @@ -```一、E-R图定义 -一.子查询 - -1.使用in 和 not in完成子查询 -in[在] not in[不在] - -select * from StudentInfo -where stuNO in (select stuid - from stuMarks - group by stuid - having min(Score) >= 60 - ) -2.使用some、any、all进行查询 -some[一些] any[任意的] all[全部] - -select sti.* from stuMarks smk -inner join StudentInfo sti on sti.stuNo = smk.stuID -where score > all(select score - from stuMarks stm -inner join StudentInfo st on stm.stuID = st.stuNo -where stuName = '张秋利') -查询出某同学某一门考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - -select distinct sti.* from stuMarks smk -inner join StudentInfo sti on sti.stuNo = smk.stuID -where stuName <> '张秋利' and score > any(select score - from stuMarks stm -inner join StudentInfo st on stm.stuID = st.stuNo - where stuName = '张秋利') -3.使用exists 和not exists完成子查询 -exists[存在]: 如果子查询结果非空,即记录条数1条以上,则exsts(子查询)返回true 或 false,==可配合if语句使用if exists(条件)== - -示例:查询出参加考试的学生的信息 - -select * from StudentInfo st -where exists (select stuid from stuMarks stm where st.stuNo = stm.stuID) --如果该条件成立就显示,上一行的查询结果 -也可以和if配合使用 - -if exists(子查询) -语句 -4.使用compute和compute by进行汇总查询 -compute 和 compute by子句使您得以用同一select语句即查看明细行,有查看汇总行。可以计算子组的汇总值,也可以计算整个结果集的汇总值 - -当compute不带可选的by子句时,select语句有两个结果集: ● 每个组的第一个结果集是包含选择列表信息的所有明细行 ● 第二个结果集有一行,其中包含compute子句中所指定的聚合函数的合计 - -compute子句需要下列信息: ● 可选by关键字。它基于每一列计算指定的行聚合 ● 行聚合函数名称 SUM、AVG、MIN、MAX、或 COUNT ● 要对其执行行聚函数的列 - -对结果先进行分组然后进行汇总计算时使用:compute by进行分组汇总查询xxxxxxxxxx 如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) 一、E-R图定义 -``` \ No newline at end of file -- Gitee From 42feaf915ce8e9c9f27cb9cc3c2056f7dbdfc7b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:36:07 +0000 Subject: [PATCH 5/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2019?= =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81/=E7=AC=94=E8=AE=B0/=E7=AC=94?= =?UTF-8?q?=E8=AE=B0-=E5=8F=98=E9=87=8F=E4=B8=8E=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E6=8E=A7=E5=88=B6.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...73\350\276\221\346\216\247\345\210\266.md" | 100 ------------------ 1 file changed, 100 deletions(-) delete mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\217\230\351\207\217\344\270\216\351\200\273\350\276\221\346\216\247\345\210\266.md" diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\217\230\351\207\217\344\270\216\351\200\273\350\276\221\346\216\247\345\210\266.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\217\230\351\207\217\344\270\216\351\200\273\350\276\221\346\216\247\345\210\266.md" deleted file mode 100644 index fe97f6a..0000000 --- "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\217\230\351\207\217\344\270\216\351\200\273\350\276\221\346\216\247\345\210\266.md" +++ /dev/null @@ -1,100 +0,0 @@ ------- - -### 1.if-else语句 - -``` ---语法结构: -if( 条件表达式 ) - begin - 命令行或程序块1 - 命令行或程序块2 - end -else - begin - 命令行或程序块 - end -``` - -统计并显示2009-2-17的Java Logic考试平均分如果平均分在70以上,显示“考试成绩优秀”,并显示前三名学生的考试信息如果在70以下,显示“考试成绩较差”,并显示后三名学生的考试信息 - -``` -declare @subjectno int --存储科目编号 -declare @avg numeric(5,2)--存储平均分 ---查询科目编号赋值给@subjecton ---查询平均分赋值给@avg -if(@avg>70) - begin - print '成绩优秀' - select语句显示前3名考生信息 - end -else - begin - print '成绩较差' - select语句显示后3名考生信息 - end -``` - ------- - -### 2.**while-continue-break**语句 - -语法: continue[继续] - -``` -while(条件表达式) - begin - 命令行或程序块 - [break] →→ 跳出循环 - [continue] →→ 可以让程序跳过continue命令之后的语句 - 命令行或程序块 - end -``` - -==如果有多条语句才需要begin-end语句块== - ------- - -### 3.case语句 - -``` -select 条件表达式, case [compare_value] - when 条件1 then 结果1 - when 条件2 then 结果2 - [else 其他结果] - end [列名] -from 表名 - ---批处理可以提高语句的执行效率 -``` - -==else:表示case中所有when条件均不为true时返回的结果,如果省略else且when条件都为false时, case语句返回null== - -示例:根据生日添加一个生肖列 - -CASE句法返回第一个value = year(PeopleBirth) % 12比较结果为真的结果。 如果没有比较结果符合,则返回ELSE后的结果,如果没有ELSE部分,则返回NULL: - ------- - -查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”,并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", - -``` -select CardNo ,AccountCode ,RealName ,CardMoney ,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用户' -when CardMoney <300000 then '普通用户' -end 用户等级 -from BankCard b -join AccountInfo a on b.AccountId=a.AccountId -``` - ------- - -### 4.特殊字符 - -制表符 CHAR(9);换行符 CHAR(10);回车 CHAR(13); \ No newline at end of file -- Gitee From ad1cc4f15cf39099dc54298c648ca77f0f375c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:36:13 +0000 Subject: [PATCH 6/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2019?= =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81/=E7=AC=94=E8=AE=B0/=E7=AC=94?= =?UTF-8?q?=E8=AE=B0-=E5=A4=8D=E4=B9=A0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\350\256\260-\345\244\215\344\271\240.md" | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\244\215\344\271\240.md" diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\244\215\344\271\240.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\244\215\344\271\240.md" deleted file mode 100644 index e16ae9d..0000000 --- "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\244\215\344\271\240.md" +++ /dev/null @@ -1,45 +0,0 @@ - - -### 一、E-R图定义 - -##### 1、基本概念 - -(1)实体:客观存在并相互区别的事物。用矩形表示 (2)属性:实体所具有的某一特性。用椭圆表示 (3)码或键:唯一标识实体的属性集称为码或键。 (4)域:属性的取值范围。 (5)实体型:用实体名及其属性集合来抽象和刻画同类实体。 (6)实体集:同型实体的集合。 (7)联系:实体和实体之间的联系。联系也可以有属性,用菱形表示。 - -##### 2、E-R图转换为关系模型 - -``` -1对1: - -可以转换为一个独立的关系模式 -可以与任意一端对应的关系模式合并,在任意一方加入对方的主键(主码)变为其外键(外码),并加入联系本身的属性。 - -1对n,n对1: - -可以转换为一个独立的关系模式 -可以与n端对应的关系模式合并,将1方的主键加入n方作为其外键,并将联系的属性也加入n方 - -m对n: - -可以转换为一个独立的关系模式(新建一张关系表),将联系双方的主键(主码)加入其中,并将联系的属性也加入其中。 -``` - -#### 第一范式 - -``` -第一范式的目标是确保每列的原子性 - -如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF) -``` - -#### 第二范式 - -``` -如果一个关系满足第一范式,并且除了主键以外的其他列都依赖于该主键,则满足第二范式(2NF) -``` - -#### 第三范式 - -``` -如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) -``` \ No newline at end of file -- Gitee From 97752878c51e1000a42a10578804d572620eaa38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:36:19 +0000 Subject: [PATCH 7/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2019?= =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81/=E7=AC=94=E8=AE=B0/=E7=AC=94?= =?UTF-8?q?=E8=AE=B0-=E5=AD=90=E6=9F=A5=E8=AF=A2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0-\345\255\220\346\237\245\350\257\242.md" | 49 ------------------- 1 file changed, 49 deletions(-) delete mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\255\220\346\237\245\350\257\242.md" diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\255\220\346\237\245\350\257\242.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index f06bc13..0000000 --- "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,49 +0,0 @@ -```一、E-R图定义 -一.子查询 - -1.使用in 和 not in完成子查询 -in[在] not in[不在] - -select * from StudentInfo -where stuNO in (select stuid - from stuMarks - group by stuid - having min(Score) >= 60 - ) -2.使用some、any、all进行查询 -some[一些] any[任意的] all[全部] - -select sti.* from stuMarks smk -inner join StudentInfo sti on sti.stuNo = smk.stuID -where score > all(select score - from stuMarks stm -inner join StudentInfo st on stm.stuID = st.stuNo -where stuName = '张秋利') -查询出某同学某一门考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - -select distinct sti.* from stuMarks smk -inner join StudentInfo sti on sti.stuNo = smk.stuID -where stuName <> '张秋利' and score > any(select score - from stuMarks stm -inner join StudentInfo st on stm.stuID = st.stuNo - where stuName = '张秋利') -3.使用exists 和not exists完成子查询 -exists[存在]: 如果子查询结果非空,即记录条数1条以上,则exsts(子查询)返回true 或 false,==可配合if语句使用if exists(条件)== - -示例:查询出参加考试的学生的信息 - -select * from StudentInfo st -where exists (select stuid from stuMarks stm where st.stuNo = stm.stuID) --如果该条件成立就显示,上一行的查询结果 -也可以和if配合使用 - -if exists(子查询) -语句 -4.使用compute和compute by进行汇总查询 -compute 和 compute by子句使您得以用同一select语句即查看明细行,有查看汇总行。可以计算子组的汇总值,也可以计算整个结果集的汇总值 - -当compute不带可选的by子句时,select语句有两个结果集: ● 每个组的第一个结果集是包含选择列表信息的所有明细行 ● 第二个结果集有一行,其中包含compute子句中所指定的聚合函数的合计 - -compute子句需要下列信息: ● 可选by关键字。它基于每一列计算指定的行聚合 ● 行聚合函数名称 SUM、AVG、MIN、MAX、或 COUNT ● 要对其执行行聚函数的列 - -对结果先进行分组然后进行汇总计算时使用:compute by进行分组汇总查询xxxxxxxxxx 如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) 一、E-R图定义 -``` \ No newline at end of file -- Gitee From cd6092778502db6cf9e00b39abf507e2d86162b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:37:12 +0000 Subject: [PATCH 8/9] 0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈志梁 <2864599615@qq.com> --- ...4\350\256\260-\345\217\230\351\207\217.md" | 145 ++++++++++++++ ...73\350\276\221\350\257\255\345\217\245.md" | 100 ++++++++++ ...0-\345\255\220\346\237\245\350\257\242.md" | 49 +++++ ...4\350\256\260-\347\264\242\345\274\225.md" | 107 +++++++++++ ...4\350\256\260-\350\247\206\345\233\276.md" | 60 ++++++ ...4\350\256\260-\344\272\213\345\212\241.md" | 57 ++++++ ...4\350\256\260-\346\270\270\346\240\207.md" | 180 ++++++++++++++++++ ...4\350\256\260-\345\207\275\346\225\260.md" | 111 +++++++++++ ...4\350\256\260-\346\255\273\351\224\201.md" | 34 ++++ .../ER\345\233\276.md" | 49 +++++ ...73\350\276\221\346\216\247\345\210\266.md" | 100 ++++++++++ ...4\350\256\260-\345\244\215\344\271\240.md" | 45 +++++ ...4\350\256\260-\350\214\203\345\274\217.md" | 139 ++++++++++++++ 13 files changed, 1176 insertions(+) create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-05\347\254\224\350\256\260-\345\217\230\351\207\217.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-06\347\254\224\350\256\260-\351\200\273\350\276\221\350\257\255\345\217\245.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-07\347\254\224\350\256\260-\345\255\220\346\237\245\350\257\242.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-14\347\254\224\350\256\260-\347\264\242\345\274\225.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-15\347\254\224\350\256\260-\350\247\206\345\233\276.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-19\347\254\224\350\256\260-\344\272\213\345\212\241.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-20\347\254\224\350\256\260-\346\270\270\346\240\207.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-21\347\254\224\350\256\260-\345\207\275\346\225\260.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-22\347\254\224\350\256\260-\346\255\273\351\224\201.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/ER\345\233\276.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\217\230\351\207\217\344\270\216\351\200\273\350\276\221\346\216\247\345\210\266.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\244\215\344\271\240.md" create mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\350\214\203\345\274\217.md" diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-05\347\254\224\350\256\260-\345\217\230\351\207\217.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-05\347\254\224\350\256\260-\345\217\230\351\207\217.md" new file mode 100644 index 0000000..a8c40e8 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-05\347\254\224\350\256\260-\345\217\230\351\207\217.md" @@ -0,0 +1,145 @@ +------ + +# 二、Transact-SQL编程 + +**SQL语句** + +- 数据查询语句:DQL select +- 数据库操纵语句:DML insert update delete +- 数据库定义语句:DDL 建库 建表 加约束 +- 数据库控制语句:DCL 权限管理 + +------ + +## (一)变量 + +**局部变量** + +- 局部变量必须以标记==@==作为前缀,如@age +- 局部变量的使用也是==先声明,再赋值== + +**全局变量** + +- 全局变量必须以标记==@@==作为前缀,如@@versionا +- 全局变量由系统定义和维护,我们==只能读取,不能修改全局变量的值== + +------ + +### 1.局部变量 + +#### (1)声明局部变量 + +语法: ==declare==[声明] + +``` +declare @变量名 数据类型 +--变量名可以自定义 +``` + +示例: + +``` +declare @name varchar(8) +declare @seat int +``` + +------ + +#### (2)局部变量的赋值 + +语法: set[置] + +``` +set @变量名 = 值 //一般直接赋值时使用 +或 +select @变量名 = 值 (直接赋值或查询数据赋值)//一般从数据库里赋值时使用 +``` + +示例: + +``` +select @变量名 = ‘111’ 或 ( set @变量名= ‘111’ ) +select @变量名 = 字段名 from 表明 [where 条件] +``` + +例题: + +``` +--查询出与脑白金相邻id的药名 +declare @MeMid int --声明局部变量 +select @MeMid=mId from Medicine where MedName='脑白金' --把脑白金的id赋值给局部变量 +select MedName from Medicine where mId=(@MeMid+1) or mId=(@MeMid-1) --条件符合mid=变量(脑白金的id)+1或变量-1 +``` + +------ + +| | set | select | +| ------------------ | -------------- | ---------------------- | +| 同时对多个变量赋值 | 不支持 | 支持 | +| 表达式返回多个值 | 出错 | 将返回的最后一个值赋值 | +| 表达式未返回值时 | 变量被赋NULL值 | 变量保持原值 | + +------ + +### 2.全局变量 + +- 全局变量是SQL Server系统内部使用的变量,其作用范围并不局限于某一程序而是任何程序均可随时调用 +- 全局变量不是有用户的程序定义它们是在服务器级定义的,只能使用预先说明及定义的全局变量 +- 引用全局变量是==必须以@@开头==,==局部变量的名称不能与全局变量的名称相同==,否则会在应用中出错 + +------ + +| | 翻译 | **含 义** | +| ----------------- | ---------- | ------------------------------------------------------------ | +| @@connections | 连接 | 返回SQL Server自上次启动以来尝试的连接次数,无论链接是成功还是失败 | +| @@cursor_rows | 光标 | 返回连接上打开的上一个游标中的当前限定行的数目 | +| **@@error** | 错误 | 返回执行上的一个Transact-SQL语句,0为正确 | +| **@@identity** | 同一性 | 返回最后插入的标识值的系统函数 | +| @@language | 语言 | 返回当前所用语言的名称 | +| @@max_connections | 最大连接 | 返回SQL Server实例允许同时进行的最大用户连接数 | +| @@procid | 虚拟目录id | 返回Transact-SQL当前模块的对象标识符(ID)。Transact-SQL模块可以是存储过程、用户定义函数或触发器 | +| @@rowcount | 行数 | 返回受上一句影响的行数 | +| **@@servername** | 服务器名称 | 返回运行在SQL Server的本地服务器的名称 | +| @servicena | 服务器名称 | 返回SQL Server正在其下运行的注册表项的名称。若当前实例为默认实例,则@@servicename | +| **@@version** | 版本 | 返回当前的SQL Server的安装版本、处理器体系结构、生成日期和操作系统 | + +------ + +## (二)数据库输出语句 + +**T-SQL支持输出语句,用于输出处理的数据结果** 常用输出语句有两种:**print[打印]** + +1. print变量或表达式 +2. select 变量或表达式 + +print以文本的方式输出,select以结果集输出 + +==要注意的是SQLserver里的+ 两边只能是相同的数据类型== + +列如: + +``` +--输出服务器的名称 +print '服务器的名称为:'+@@servername +``` + +------ + +### 1.强制类型转换 + +如果说我们要输出的+两边类型不相等会报错,可以通过强制类型转换来解决 + +类型转换有两种方式:**convert[转换] cast[投射]** + +``` +convert(数据类型,表达式,样式) +print '成绩'+convert(varchar(10),@Result) +--把int类型转换成varchar类型 +``` + +或 + +``` +cast(表达式 as 数据类型) +print '成绩'+cast(@Result as varchar(10)) +``` \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-06\347\254\224\350\256\260-\351\200\273\350\276\221\350\257\255\345\217\245.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-06\347\254\224\350\256\260-\351\200\273\350\276\221\350\257\255\345\217\245.md" new file mode 100644 index 0000000..db6e149 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-06\347\254\224\350\256\260-\351\200\273\350\276\221\350\257\255\345\217\245.md" @@ -0,0 +1,100 @@ +------ + +### 1.if-else语句 + +``` +--语法结构: +if( 条件表达式 ) + begin + 命令行或程序块1 + 命令行或程序块2 + end +else + begin + 命令行或程序块 + end +``` + +统计并显示2009-2-17的Java Logic考试平均分如果平均分在70以上,显示“考试成绩优秀”,并显示前三名学生的考试信息如果在70以下,显示“考试成绩较差”,并显示后三名学生的考试信息 + +``` +declare @subjectno int --存储科目编号 +declare @avg numeric(5,2)--存储平均分 +--查询科目编号赋值给@subjecton +--查询平均分赋值给@avg +if(@avg>70) + begin + print '成绩优秀' + select语句显示前3名考生信息 + end +else + begin + print '成绩较差' + select语句显示后3名考生信息 + end +``` + +------ + +### 2.**while-continue-break**语句 + +语法: continue[继续] + +``` +while(条件表达式) + begin + 命令行或程序块 + [break] →→ 跳出循环 + [continue] →→ 可以让程序跳过continue命令之后的语句 + 命令行或程序块 + end +``` + +==如果有多条语句才需要begin-end语句块== + +------ + +### 3.case语句 + +``` +select 条件表达式, case [compare_value] + when 条件1 then 结果1 + when 条件2 then 结果2 + [else 其他结果] + end [列名] +from 表名 + +--批处理可以提高语句的执行效率 +``` + +==else:表示case中所有when条件均不为true时返回的结果,如果省略else且when条件都为false时, case语句返回null== + +示例:根据生日添加一个生肖列 + +CASE句法返回第一个value = year(PeopleBirth) % 12比较结果为真的结果。 如果没有比较结果符合,则返回ELSE后的结果,如果没有ELSE部分,则返回NULL: + +------ + +查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”,并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", + +``` +select CardNo ,AccountCode ,RealName ,CardMoney ,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用户' +when CardMoney <300000 then '普通用户' +end 用户等级 +from BankCard b +join AccountInfo a on b.AccountId=a.AccountId +``` + +------ + +### 4.特殊字符 + +制表符 CHAR(9);换行符 CHAR(10);回车 CHAR(13); \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-07\347\254\224\350\256\260-\345\255\220\346\237\245\350\257\242.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-07\347\254\224\350\256\260-\345\255\220\346\237\245\350\257\242.md" new file mode 100644 index 0000000..1f3a6a5 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-07\347\254\224\350\256\260-\345\255\220\346\237\245\350\257\242.md" @@ -0,0 +1,49 @@ +```一、E-R图定义 +一.子查询 + +1.使用in 和 not in完成子查询 +in[在] not in[不在] + +select * from StudentInfo +where stuNO in (select stuid + from stuMarks + group by stuid + having min(Score) >= 60 + ) +2.使用some、any、all进行查询 +some[一些] any[任意的] all[全部] + +select sti.* from stuMarks smk +inner join StudentInfo sti on sti.stuNo = smk.stuID +where score > all(select score + from stuMarks stm +inner join StudentInfo st on stm.stuID = st.stuNo +where stuName = '张秋利') +查询出某同学某一门考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) + +select distinct sti.* from stuMarks smk +inner join StudentInfo sti on sti.stuNo = smk.stuID +where stuName <> '张秋利' and score > any(select score + from stuMarks stm +inner join StudentInfo st on stm.stuID = st.stuNo + where stuName = '张秋利') +3.使用exists 和not exists完成子查询 +exists[存在]: 如果子查询结果非空,即记录条数1条以上,则exsts(子查询)返回true 或 false,==可配合if语句使用if exists(条件)== + +示例:查询出参加考试的学生的信息 + +select * from StudentInfo st +where exists (select stuid from stuMarks stm where st.stuNo = stm.stuID) --如果该条件成立就显示,上一行的查询结果 +也可以和if配合使用 + +if exists(子查询) +语句 +4.使用compute和compute by进行汇总查询 +compute 和 compute by子句使您得以用同一select语句即查看明细行,有查看汇总行。可以计算子组的汇总值,也可以计算整个结果集的汇总值 + +当compute不带可选的by子句时,select语句有两个结果集: ● 每个组的第一个结果集是包含选择列表信息的所有明细行 ● 第二个结果集有一行,其中包含compute子句中所指定的聚合函数的合计 + +compute子句需要下列信息: ● 可选by关键字。它基于每一列计算指定的行聚合 ● 行聚合函数名称 SUM、AVG、MIN、MAX、或 COUNT ● 要对其执行行聚函数的列 + +对结果先进行分组然后进行汇总计算时使用:compute by进行分组汇总查询xxxxxxxxxx 如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) 一、E-R图定义 +``` \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-14\347\254\224\350\256\260-\347\264\242\345\274\225.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-14\347\254\224\350\256\260-\347\264\242\345\274\225.md" new file mode 100644 index 0000000..ae1f420 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-14\347\254\224\350\256\260-\347\264\242\345\274\225.md" @@ -0,0 +1,107 @@ +------ + +# 索 引 + +------ + +## (一)索引的类型 + +**唯一索引** + +- 唯一索引不允许两行具有相同的索引值 + +**主键索引** + +- 是唯一索引的特殊类型 + +**==聚集索引(Clustered)==** + +- 根据数据行的键值在表或视图中的排序存储这些数据行,每个表只有一个聚集索引。聚集索引是一种对磁盘上实际数据重新组织以按指定的一列或多列值排序(类似字典中的拼音索引)(物理存储顺序)。 +- 表中各行的物理顺序与键值的逻辑(索引)顺序相同 + +==**非聚集索引(Non-clustered)**== + +- 具有独立于数据行的结构,包含非聚集索引键值,且每个键值项都有指向包含该键值的数据行的指针。(类似字典中的偏旁部首索引)(逻辑存储顺序)。 +- 不改变表中数据行的物理存储位置,数据和索引分开存储,通过索引指向的地址与表中数据发生关系 + +**其它类型的索引**: + +- 按键列个数区分:单列索引,多列索引 + +- ``` + --多列索引(最左原则) + create nonclustered index IX_Student_Sname + on Student(Sname,Sage,Ssex) + go + ``` + +- 其他分类:索引视图、包含性列索引、全文索引、XML索引等 + +------ + +### 1.聚合索引和非聚合索引的区别 + +| 聚集索引 | 非聚集索引 | +| ---------------------------------- | -------------------------------------------- | +| 每个表只允许有一个聚集索引 | 最多可以有249个非聚集索引 | +| 物理地重排表中的数据以符合索引约束 | 创建一个键值列表键值指向数据在数据页中的位置 | +| 用于经常查找数据的列 | 用于从中查找单个值的列 | + +------ + +## (二)创建索引 + +1. 选择表点击"设计" +2. 索引/键 +3. 选择类型”添加“:可以添加两种索引 IX_grade[唯一索引],pk_grade[主键索引] + +------ + +## (三)SQL语句创建索引 + +语法: with[关于] + +``` +create [unique][clustered][nonclustered] --索引类型 +index IX_name --索引名称IX开头 +on table_name(字段)--表示在哪张表的哪个列上 +[with fillfactor = x]--填充因子(表示启用x%) +go +``` + +| 类型 | 解释 | +| ------------ | ------------------------------------------------------------ | +| unique | 唯一索引 | +| clustered | 聚集索引 | +| nonclustered | 非聚集索引 | +| table_name | 数据表名,也可以是视图名 | +| fillfactor | 设置填充因子的大小,指定0-100之间的值,该值指示索引页填满的空间所占百分比,一般为30 | + +例:**在Student表的Sname列创建非聚集索引** + +``` +create nonclustered index IX_Student_Sname +on Student(Sname) +with fillfactor=30 --填充因子30% +go +``` + +### 1.删除索引 + +``` +drop index table_name.index_name +``` + +- 表和索引名称之间,用"."分隔 +- ==删除表时,该表的所有索引同时会被删除== + +------ + +### **2.使用索引查询** + +``` +--指定按索引IX_Student_Sname查询 +select * from Student +with(index=IX_Student_Sname) +where Sname like '李'% +``` \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-15\347\254\224\350\256\260-\350\247\206\345\233\276.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-15\347\254\224\350\256\260-\350\247\206\345\233\276.md" new file mode 100644 index 0000000..7f4eec6 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-15\347\254\224\350\256\260-\350\247\206\345\233\276.md" @@ -0,0 +1,60 @@ +## 视图 + +#### 关系(Relations) + +三种类型关系: + +- 表(Table)--基表,存储关系(Base Tables,Sorted relations) + +- 视图(Views)--虚拟关系(Virtual relations)(不是物理存在的是虚拟的) + +- 临时结果(Temporary results)--用于构建**子查询**的结果 + + + +**视图的作用** + +- 视图能够简化用户的操作 +- 视图使用户能以多种角度看待同一数据 +- 视图对重构数据库提供了一定的逻辑独立性 +- 视图能够对机密数据提供安全保护 + + + +##### 定义视图 + +- 行列子集视图:去掉了某些行和某些列,但保留了主键 + +- with check option 视图 +- 带表达式的视图 + + + + + +```sql +--创建视图-- +create or replace view v_student as +select Sno,Sname +from student; + +--从视图中检索数据,即查询上面这个视图-- +select * from v_student; + +--也可以向查询添加条件-- +select * +from v_student +where Sname like '%云‘; + +--删除视图-- +drop view v_student; +``` + + + + + +#### 视图的设计原则 + +- 以 select * 方式创建的视图:可扩充性差,应尽可能避免 + diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-19\347\254\224\350\256\260-\344\272\213\345\212\241.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-19\347\254\224\350\256\260-\344\272\213\345\212\241.md" new file mode 100644 index 0000000..5b3ce47 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-19\347\254\224\350\256\260-\344\272\213\345\212\241.md" @@ -0,0 +1,57 @@ +## 事务的属性 + +一般来说,事务具有四个标准属性,分别是原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,又称独立性)、持久性(**D**urability),简称 **ACID**。具体说明如下: + +#### 1) 原子性 + +一个事务中的所有 SQL 语句,要么全部执行成功,要么全部执行失败,不会结束在中间的某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 + +#### 2) 一致性 + +在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,其中包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 + +#### 3) 隔离性 + +数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。 + +#### 4) 持久性 + +事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 + +## 事务执行流程 + +各种数据库对事务的支持细节不尽相同,本教程以 MySQL 数据库为例进行讲解,MySQL 使用标准 SQL 来支持事务。 + +与事务控制有关的 SQL 命令包括: + +- BEGIN 或者 START TRANSACTION:开始事务; +- COMMIT:提交事务; +- ROLLBACK:回滚事务; +- SAVEPOINT:在事务内部设置回滚标记点; +- RELEASE SAVEPOINT:删除回滚标记点; +- ROLLBACK TO:将事务回滚到标记点(ROLLBACK 命令的一种变形写法)。 + + +一个事务要么提交(Commit),要么回滚(Rollback),提交意味着成功,回滚意味着失败。编写事务代码时,以 BEGIN 命令开头,后跟一条或者多条 SQL 语句,最后书写 COMMIT 或者 ROLLBACK 命令;COMMIT 和 ROLLBACK 对应事务的两种状态,只能出现一个。 + +事务控制命令仅能与 DML 类别的 SQL 命令一起使用,包括 INSERT、UPDATE、DELETE 和 SELECT,在创建或者删除表时不能使用事务,因为这些操作在数据库中是自动提交的。 + +#### 1) 开始事务 + +开始事务有以下两种命令,选择其一即可: + +COMMIT; + +或者 + +START TRANSACTION; + +该命令用来标记一个事务的起始点。 + +#### 2) 提交事务 + +提交事务使用如下命令: + +COMMIT; + +提交事务意味着真正执行事务包含的 SQL 语句,并把对数据库的修改写入到磁盘上的物理数据库中。COMMIT 意味着事务结束,并且执行成功。 \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-20\347\254\224\350\256\260-\346\270\270\346\240\207.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-20\347\254\224\350\256\260-\346\270\270\346\240\207.md" new file mode 100644 index 0000000..6192094 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-20\347\254\224\350\256\260-\346\270\270\346\240\207.md" @@ -0,0 +1,180 @@ +## 游标 + + 游标是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据。一般复杂的存储过程,都会有游标的出现,他的用处主要有: + +1. 定位到结果集中的某一行。 +2. 对当前位置的数据进行读写。 +3. 可以对结果集中的数据单独操作,而不是整行执行相同的操作。 +4. 是面向集合的数据库管理系统和面向行的程序设计之间的桥梁。 + +# 游标的分类 + +- ***静态游标\*** : 静态游标的结果集,在游标打开的时候建立在TempDB中,不论你在操作游标的时候,如何操作数据库,游标中的数据集都不会变。例如你在游标打开的时候,对游标查询的数据表数据进行增删改,操作之后,静态游标中select的数据依旧显示的为没有操作之前的数据。如果想与操作之后的数据一致,则重新关闭打开游标即可。 +- ***动态游标\*** : 这个则与静态游标相对,滚动游标时,动态游标反应结果集中的所有更改。结果集中的行数据值、顺序和成员在每次提取时都会变化。所有用户做的增删改语句通过游标均可见。如果使用API函数或T-SQL Where Current of子句通过游标进行更新,他们将立即可见。在游标外部所做的更新直到提交时才可见。 + +# 游标的生命周期 + +  游标的生命周期包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放游标。 + +参数说明: + +- cursor_name:游标名称。 + +- Local:作用域为局部,只在定义它的批处理,存储过程或触发器中有效。 + +- Global:作用域为全局,由连接执行的任何存储过程或批处理中,都可以引用该游标。 + +- [Local | Global]: 默认为local。 + +- Forward_Only:指定游标智能从第一行滚到最后一行。Fetch Next是唯一支持的提取选项。如果在指定Forward_Only是不指定Static、KeySet、Dynamic关键字,默认为Dynamic游标。如果Forward_Only和Scroll没有指定,Static、KeySet、Dynamic游标默认为Scroll,Fast_Forward默认为Forward_Only + +- Static:静态游标 + +- KeySet:键集游标 + +- Dynamic:动态游标,不支持Absolute提取选项 + +- Fast_Forward:指定启用了性能优化的Forward_Only、Read_Only游标。如果指定啦Scroll或For_Update,就不能指定他啦。 + +- Read_Only:不能通过游标对数据进行删改。 + +- Scroll_Locks:将行读入游标是,锁定这些行,确保删除或更新一定会成功。如果指定啦Fast_Forward或Static,就不能指定他啦。 + +- Optimistic:指定如果行自读入游标以来已得到更新,则通过游标进行的定位更新或定位删除不成功。当将行读入游标时,sqlserver不锁定行,它改用timestamp列值的比较结果来确定行读入游标后是否发生了修改,如果表不行timestamp列,它改用校验和值进行确定。如果已修改改行,则尝试进行的定位更新或删除将失败。如果指定啦Fast_Forward,则不能指定他。 + +- Type_Warning:指定将游标从所请求的类型隐式转换为另一种类型时向客户端发送警告信息。 + +- For Update[of column_name ,....] :定义游标中可更新的列。 + +### 2,声明一个动态游标 + +``` +declare orderNum_02_cursor cursor scroll +for select OrderId from bigorder where orderNum='ZEORD003402' +``` + +### 3,打开游标 + +``` +--打开游标语法 +open [ Global ] cursor_name | cursor_variable_name +``` + +cursor_name:游标名,cursor_variable_name:游标变量名称,该变量引用了一个游标。 + +``` +--打开游标 +open orderNum_02_cursor +``` + +### 4,提取数据 + +[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) + +``` +--提取游标语法 +Fetch +[ [Next|prior|Frist|Last|Absoute n|Relative n ] +from ] +[Global] cursor_name +[into @variable_name[,....]] +``` + +[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) + + + +参数说明: + +- Frist:结果集的第一行 +- Prior:当前位置的上一行 +- Next:当前位置的下一行 +- Last:最后一行 +- Absoute n:从游标的第一行开始数,第n行。 +- Relative n:从当前位置数,第n行。 +- Into @variable_name[,...] : 将提取到的数据存放到变量variable_name中。 + +例子: + +[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) + +``` +--提取数据 +fetch first from orderNum_02_cursor +fetch relative 3 from orderNum_02_cursor +fetch next from orderNum_02_cursor +fetch absolute 4 from orderNum_02_cursor +fetch next from orderNum_02_cursor +fetch last from orderNum_02_cursor +fetch prior from orderNum_02_cursor +select * from bigorder where orderNum='ZEORD003402' +``` + +5.通过检测全局变量**@@Fetch_Status**的值,获得提取状态信息,该状态用于判断Fetch语句返回数据的有效性。当执行一条Fetch语句之后,@@Fetch_Status可能出现3种值: + +- **0**,Fetch语句成功。 + +- **-1**:Fetch语句失败或行不在结果集中。 + +- **-2**:提取的行不存在。 + +- 5.利用游标更新删除数据 + + ``` + --游标修改当前数据语法 + Update 基表名 Set 列名=值[,...] Where Current of 游标名 + --游标删除当前数据语法 + Delete 基表名 Where Current of 游标名 + ``` + + 游标更新删除当前数据 + + [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) + + ``` + --1.声明游标 + declare orderNum_03_cursor cursor scroll + for select OrderId ,userId from bigorder where orderNum='ZEORD003402' + --2.打开游标 + open orderNum_03_cursor + --3.声明游标提取数据所要存放的变量 + declare @OrderId int ,@userId varchar(15) + --4.定位游标到哪一行 + fetch First from orderNum_03_cursor into @OrderId,@userId --into的变量数量必须与游标查询结果集的列数相同 + while @@fetch_status=0 --提取成功,进行下一条数据的提取操作 + begin + if @OrderId=122182 + begin + Update bigorder Set UserId='123' Where Current of orderNum_03_cursor --修改当前行 + end + if @OrderId=154074 + begin + Delete bigorder Where Current of orderNum_03_cursor --删除当前行 + end + fetch next from orderNum_03_cursor into @OrderId ,@userId --移动游标 + end + ``` + + [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) + + ### 6,关闭游标 + +   游标打开后,服务器会专门为游标分配一定的内存空间存放游标操作的数据结果集,同时使用游标也会对某些数据进行封锁。所以游标一旦用过,应及时关闭,避免服务器资源浪费。 + + ``` + --关闭游标语法 + close [ Global ] cursor_name | cursor_variable_name + --关闭游标 + close orderNum_03_cursor + ``` + + ### 7,删除游标 + +   删除游标,释放资源 + + ```sql + --释放游标语法 + deallocate [ Global ] cursor_name | cursor_variable_name + --释放游标 + deallocate orderNum_03_cursor + ``` \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-21\347\254\224\350\256\260-\345\207\275\346\225\260.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-21\347\254\224\350\256\260-\345\207\275\346\225\260.md" new file mode 100644 index 0000000..04fbb83 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-21\347\254\224\350\256\260-\345\207\275\346\225\260.md" @@ -0,0 +1,111 @@ +## 函数 + +## 一)标量值函数的定义 + +``` +create function 函数名称(参数名 参数的数据类型) +returns 返回返回值的数据类型 +[with encryption]--如果指定了encryption则函数被加密 +[as] +begin +--函数体(即 t-sql语句) +return 表达式 +end +``` + +示例:通过学生名字输出成绩 + +``` +create function dbo.student_name_score(@sname nvarchar(30)) +returns int +as +begin + declare @sscore int + select @sscore=score from student where name=@sname + return @sscore +end + +select dbo.student_name_score('张三') name;--调用一定要在名称前加上dbo.,定义的时候如果名称前面没有dbo.调用也要加上 +``` + +------ + +## (二)内联表格值函数 + +**语法:** + +特点:内联表格值函数支持在where子句中使用参数 + +``` +create function 函数名称(参数名 参数的数据类型) +returns table--返回一个表 +[with encryption]--如果指定了encryption则函数被加密 +[as] +--函数体(即 t-sql语句) +return (一条sql语句) +``` + +**示例:**通过id差姓名和成绩 + +``` +create function dbo.student_name_score2(@sid int) +returns table +as +return select name,score from student where id=@sid + +select * from dbo.student_name_score2(3) +``` + +------ + +## (三)多语句表值函数 + +多语句表值函数跟内联表值函数都是表值函数,它们返回的结果都是Table类型。多语句表值函数通过多条语句来创建Table类型的数据。**这里不同于内联表值函数,内联表值函数的返回结果是由函数体内的SELECT语句来决定。而多语句表值函数,则是需要指定具体的Table类型的结构。**也就是说返回的Table已经定义好要哪些字段返回。所以它能够支持多条语句的执行来创建Table数据。 + +**语法:** + +``` +create function 函数名称(@参数名 参数的数据类型) +returns @Table_Variable_Name table (Column_1 culumn_type,Column_2 culumn_type) +--returns @表变量 table 表的定义(即列的定义和约束) +[with encryption] --如果指定了encryption则函数被加密 +[as] +begin + 函数体(即T-SQL 语句) +return +END +``` + +**示例:**通过id查询该学生所有信息的函数 + +``` +create function dbo.student_table_id(@sid int) +returns @table_test table(id int ,name nvarchar(30),score int) +as +begin +insert @table_test select id,name,score from student where id=@sid +--把student表查询结果插入@tabel——test +return +end + +select * from dbo.student_table_id(1) +``` + +------ + +## (四)自定义函数的修改和删除 + +### 1.使用alter语句修改自定义函数: + +``` +alter function 函数名(参数) +returns table +as +return(一条SQL语句) +``` + +### 2.使用drop语句删除: + +``` +drop function func_date_get_name +``` diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-22\347\254\224\350\256\260-\346\255\273\351\224\201.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-22\347\254\224\350\256\260-\346\255\273\351\224\201.md" new file mode 100644 index 0000000..e0efe22 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/2022-09-22\347\254\224\350\256\260-\346\255\273\351\224\201.md" @@ -0,0 +1,34 @@ +# 死锁 + +### 概念 + +``` +就是两个或多个trans,同时请求对方正在请求的某个实际应用对象,而导致双方互相等待。 +``` + +### 几种表现 + +``` +--表现1. + +一个用户A 访问表A(锁住了表A),然后又访问表B。 +另一个用户B 访问表B(锁住了表B),然后企图访问表A, +这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了,同样用户B要等用户A释放表A才能继续,这就造成死锁了。 + +--解决方法: +这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法 +仔细分析你程序的逻辑, +1:尽量避免同时锁定两个资源 +2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源. +--表现2. + +用户A读一条纪录,然后修改该条纪录。 +这时用户B修改该条纪录,这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释 +放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。 +这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。 + +--解决方法 +让用户A的事务(即先读后写类型的操作),在select 时用Update lock +语法如下: +select * from table1 with(updlock) where .... +``` \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/ER\345\233\276.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/ER\345\233\276.md" new file mode 100644 index 0000000..1f3a6a5 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/ER\345\233\276.md" @@ -0,0 +1,49 @@ +```一、E-R图定义 +一.子查询 + +1.使用in 和 not in完成子查询 +in[在] not in[不在] + +select * from StudentInfo +where stuNO in (select stuid + from stuMarks + group by stuid + having min(Score) >= 60 + ) +2.使用some、any、all进行查询 +some[一些] any[任意的] all[全部] + +select sti.* from stuMarks smk +inner join StudentInfo sti on sti.stuNo = smk.stuID +where score > all(select score + from stuMarks stm +inner join StudentInfo st on stm.stuID = st.stuNo +where stuName = '张秋利') +查询出某同学某一门考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) + +select distinct sti.* from stuMarks smk +inner join StudentInfo sti on sti.stuNo = smk.stuID +where stuName <> '张秋利' and score > any(select score + from stuMarks stm +inner join StudentInfo st on stm.stuID = st.stuNo + where stuName = '张秋利') +3.使用exists 和not exists完成子查询 +exists[存在]: 如果子查询结果非空,即记录条数1条以上,则exsts(子查询)返回true 或 false,==可配合if语句使用if exists(条件)== + +示例:查询出参加考试的学生的信息 + +select * from StudentInfo st +where exists (select stuid from stuMarks stm where st.stuNo = stm.stuID) --如果该条件成立就显示,上一行的查询结果 +也可以和if配合使用 + +if exists(子查询) +语句 +4.使用compute和compute by进行汇总查询 +compute 和 compute by子句使您得以用同一select语句即查看明细行,有查看汇总行。可以计算子组的汇总值,也可以计算整个结果集的汇总值 + +当compute不带可选的by子句时,select语句有两个结果集: ● 每个组的第一个结果集是包含选择列表信息的所有明细行 ● 第二个结果集有一行,其中包含compute子句中所指定的聚合函数的合计 + +compute子句需要下列信息: ● 可选by关键字。它基于每一列计算指定的行聚合 ● 行聚合函数名称 SUM、AVG、MIN、MAX、或 COUNT ● 要对其执行行聚函数的列 + +对结果先进行分组然后进行汇总计算时使用:compute by进行分组汇总查询xxxxxxxxxx 如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) 一、E-R图定义 +``` \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\217\230\351\207\217\344\270\216\351\200\273\350\276\221\346\216\247\345\210\266.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\217\230\351\207\217\344\270\216\351\200\273\350\276\221\346\216\247\345\210\266.md" new file mode 100644 index 0000000..db6e149 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\217\230\351\207\217\344\270\216\351\200\273\350\276\221\346\216\247\345\210\266.md" @@ -0,0 +1,100 @@ +------ + +### 1.if-else语句 + +``` +--语法结构: +if( 条件表达式 ) + begin + 命令行或程序块1 + 命令行或程序块2 + end +else + begin + 命令行或程序块 + end +``` + +统计并显示2009-2-17的Java Logic考试平均分如果平均分在70以上,显示“考试成绩优秀”,并显示前三名学生的考试信息如果在70以下,显示“考试成绩较差”,并显示后三名学生的考试信息 + +``` +declare @subjectno int --存储科目编号 +declare @avg numeric(5,2)--存储平均分 +--查询科目编号赋值给@subjecton +--查询平均分赋值给@avg +if(@avg>70) + begin + print '成绩优秀' + select语句显示前3名考生信息 + end +else + begin + print '成绩较差' + select语句显示后3名考生信息 + end +``` + +------ + +### 2.**while-continue-break**语句 + +语法: continue[继续] + +``` +while(条件表达式) + begin + 命令行或程序块 + [break] →→ 跳出循环 + [continue] →→ 可以让程序跳过continue命令之后的语句 + 命令行或程序块 + end +``` + +==如果有多条语句才需要begin-end语句块== + +------ + +### 3.case语句 + +``` +select 条件表达式, case [compare_value] + when 条件1 then 结果1 + when 条件2 then 结果2 + [else 其他结果] + end [列名] +from 表名 + +--批处理可以提高语句的执行效率 +``` + +==else:表示case中所有when条件均不为true时返回的结果,如果省略else且when条件都为false时, case语句返回null== + +示例:根据生日添加一个生肖列 + +CASE句法返回第一个value = year(PeopleBirth) % 12比较结果为真的结果。 如果没有比较结果符合,则返回ELSE后的结果,如果没有ELSE部分,则返回NULL: + +------ + +查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”,并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", + +``` +select CardNo ,AccountCode ,RealName ,CardMoney ,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用户' +when CardMoney <300000 then '普通用户' +end 用户等级 +from BankCard b +join AccountInfo a on b.AccountId=a.AccountId +``` + +------ + +### 4.特殊字符 + +制表符 CHAR(9);换行符 CHAR(10);回车 CHAR(13); \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\244\215\344\271\240.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\244\215\344\271\240.md" new file mode 100644 index 0000000..6a41815 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\345\244\215\344\271\240.md" @@ -0,0 +1,45 @@ + + +### 一、E-R图定义 + +##### 1、基本概念 + +(1)实体:客观存在并相互区别的事物。用矩形表示 (2)属性:实体所具有的某一特性。用椭圆表示 (3)码或键:唯一标识实体的属性集称为码或键。 (4)域:属性的取值范围。 (5)实体型:用实体名及其属性集合来抽象和刻画同类实体。 (6)实体集:同型实体的集合。 (7)联系:实体和实体之间的联系。联系也可以有属性,用菱形表示。 + +##### 2、E-R图转换为关系模型 + +``` +1对1: + +可以转换为一个独立的关系模式 +可以与任意一端对应的关系模式合并,在任意一方加入对方的主键(主码)变为其外键(外码),并加入联系本身的属性。 + +1对n,n对1: + +可以转换为一个独立的关系模式 +可以与n端对应的关系模式合并,将1方的主键加入n方作为其外键,并将联系的属性也加入n方 + +m对n: + +可以转换为一个独立的关系模式(新建一张关系表),将联系双方的主键(主码)加入其中,并将联系的属性也加入其中。 +``` + +#### 第一范式 + +``` +第一范式的目标是确保每列的原子性 + +如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF) +``` + +#### 第二范式 + +``` +如果一个关系满足第一范式,并且除了主键以外的其他列都依赖于该主键,则满足第二范式(2NF) +``` + +#### 第三范式 + +``` +如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) +``` \ No newline at end of file diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\350\214\203\345\274\217.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\350\214\203\345\274\217.md" new file mode 100644 index 0000000..38e58e7 --- /dev/null +++ "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260-\350\214\203\345\274\217.md" @@ -0,0 +1,139 @@ +1.--default代表字段默认值; check可以规定字段值的约束条件; + PeopleSex nvarchar(1) default('男') check(PeopleSex='男' or PeopleSex='女') not null, + +2.decimal: + +​ PeopleSalary decimal(12,2) check(PeopleSalary>= 1000 and PeopleSalary <= 100000) not null, +​ + +3.--unique代表唯一约束,为数据提供唯一性保证; + PeoplePhone nvarchar(20) unique not null, + +4.--datetime和smalldatetime都可以表示时间类型,getdate()用于获取系统当前时间 + PeopleAddTime smalldatetime default(getdate()) + +5.插入数据 +insert into Department values('行政部','公司主管行政工作的部门'); + +6.between ...and ... + +select * from People where PeopleSalary between 10000 and 20000 + +7.降序\升序 + +select * from People order by PeopleSalary desc \ asc + + + +8.模糊查询 like + +模糊查询 +%:代表匹配0个字符、1个字符或多个字符。 +_:代表匹配有且只有1个字符。 +[]:代表匹配范围内 +[^]:代表匹配不在范围内 + +1.)查询姓刘 + +select * from People where PeopleName like'刘%' + +2.)含有“尚”或者“史”的员工信息 + +where PeopleName like'%尚%' or PeopleName like'%史%' + +3.)名字是2个字 + +where PeopleName like'刘_' + +4.)名字一共三个字的员工信息 + +where PeopleName like'__香' + +5.)开头138的员工信息 + +where PeoplePhone like'138%' + +6.)开头138的员工信息,第4位可能是7,可能8 ,最后一个号码是5 + +where PeoplePhone like'138[7,8]%5' + +7.)开头133的员工信息,第4位是2-5之间的数字 ,最后一个号码不是2和3 + +where PeoplePhone like'133[2-5]%[^2-3] + + + +9.限制长度:len +userName varchar(20) unique not null check(len(userName)>4), + +10.round(num,len,[type]) +其中: +num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取) + +11.year(getdate()) 获取当前时间 + +12.顺序: + +​ select + +​ left jion + +​ group by + +​ having + +​ order by desc/asc + + + +13.:范式 + +**第一范式(1NF):** + +![img](https://img2020.cnblogs.com/blog/944376/202104/944376-20210429144806987-1479266927.png) + + +  列1唯一确定列2, 列3, 列4, ...,即列2, 列3, 列4, ...不能再分裂出其它列。 + +  假设有关系模式列1: 订单名; 列2: 商品。一个订单下可以有多个商品,即列2: 商品可以分裂成商品A, 商品B, 商品C, ...,所以列1: 订单名; 列2: 商品这样的关系模式不符合第一范式。 + +#  第二范式(2NF): + +![img](https://img2020.cnblogs.com/blog/944376/202104/944376-20210429145214099-1241070153.png) + + + + + + + + + + +  满足2NF的前提是必须满足1NF。 + +  此外,关系模式需要包含两部分内容。一是必须有一个(及以上)主键;二是没有包含在主键中的列必须全部依赖于全部主键,而不能只依赖于主键的一部分而不依赖全部主键。 + +  定义听起来有点绕,不慌,直接看图,只有全部的非主键列依赖于全部主键,才满足第二范式。 + +  **第三范式(3NF):** + +![img](https://img2020.cnblogs.com/blog/944376/202104/944376-20210429145526908-1013297767.png) + + + + + + + + +  满足3NF的前提是必须满足2NF。 + +  另外关系模式的非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列m既依赖于全部主键,又依赖于非主键列n的情况。 + +  定义听起来还是有点绕,不慌,直接看图,只要非主键内部存在传递依赖,就不满足第三范式。 + +  假设存在关系模式主键1: 课程编号; 列1: 教师名; 列2: 教师家庭地址。显然满足第一范式和第二范式,但是教师家庭地址传递依赖于教师名,所以不满足第三范式。 + + + -- Gitee From d1642766ba116976337cb750d494205b914ffcb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81?= <2864599615@qq.com> Date: Sun, 25 Sep 2022 12:37:22 +0000 Subject: [PATCH 9/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2019?= =?UTF-8?q?=E9=99=88=E5=BF=97=E6=A2=81/=E7=AC=94=E8=AE=B0/=E7=AC=94?= =?UTF-8?q?=E8=AE=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\347\254\224\350\256\260.md" | 139 ------------------ 1 file changed, 139 deletions(-) delete mode 100644 "19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260.md" diff --git "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260.md" "b/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260.md" deleted file mode 100644 index f9d68a6..0000000 --- "a/19\351\231\210\345\277\227\346\242\201/\347\254\224\350\256\260/\347\254\224\350\256\260.md" +++ /dev/null @@ -1,139 +0,0 @@ -1.--default代表字段默认值; check可以规定字段值的约束条件; - PeopleSex nvarchar(1) default('男') check(PeopleSex='男' or PeopleSex='女') not null, - -2.decimal: - -​ PeopleSalary decimal(12,2) check(PeopleSalary>= 1000 and PeopleSalary <= 100000) not null, -​ - -3.--unique代表唯一约束,为数据提供唯一性保证; - PeoplePhone nvarchar(20) unique not null, - -4.--datetime和smalldatetime都可以表示时间类型,getdate()用于获取系统当前时间 - PeopleAddTime smalldatetime default(getdate()) - -5.插入数据 -insert into Department values('行政部','公司主管行政工作的部门'); - -6.between ...and ... - -select * from People where PeopleSalary between 10000 and 20000 - -7.降序\升序 - -select * from People order by PeopleSalary desc \ asc - - - -8.模糊查询 like - -模糊查询 -%:代表匹配0个字符、1个字符或多个字符。 -_:代表匹配有且只有1个字符。 -[]:代表匹配范围内 -[^]:代表匹配不在范围内 - -1.)查询姓刘 - -select * from People where PeopleName like'刘%' - -2.)含有“尚”或者“史”的员工信息 - -where PeopleName like'%尚%' or PeopleName like'%史%' - -3.)名字是2个字 - -where PeopleName like'刘_' - -4.)名字一共三个字的员工信息 - -where PeopleName like'__香' - -5.)开头138的员工信息 - -where PeoplePhone like'138%' - -6.)开头138的员工信息,第4位可能是7,可能8 ,最后一个号码是5 - -where PeoplePhone like'138[7,8]%5' - -7.)开头133的员工信息,第4位是2-5之间的数字 ,最后一个号码不是2和3 - -where PeoplePhone like'133[2-5]%[^2-3] - - - -9.限制长度:len -userName varchar(20) unique not null check(len(userName)>4), - -10.round(num,len,[type]) -其中: -num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取) - -11.year(getdate()) 获取当前时间 - -12.顺序: - -​ select - -​ left jion - -​ group by - -​ having - -​ order by desc/asc - - - -13.:范式 - -**第一范式(1NF):** - -![img](https://img2020.cnblogs.com/blog/944376/202104/944376-20210429144806987-1479266927.png) - - -  列1唯一确定列2, 列3, 列4, ...,即列2, 列3, 列4, ...不能再分裂出其它列。 - -  假设有关系模式列1: 订单名; 列2: 商品。一个订单下可以有多个商品,即列2: 商品可以分裂成商品A, 商品B, 商品C, ...,所以列1: 订单名; 列2: 商品这样的关系模式不符合第一范式。 - -#  第二范式(2NF): - -![img](https://img2020.cnblogs.com/blog/944376/202104/944376-20210429145214099-1241070153.png) - - - - - - - - - - -  满足2NF的前提是必须满足1NF。 - -  此外,关系模式需要包含两部分内容。一是必须有一个(及以上)主键;二是没有包含在主键中的列必须全部依赖于全部主键,而不能只依赖于主键的一部分而不依赖全部主键。 - -  定义听起来有点绕,不慌,直接看图,只有全部的非主键列依赖于全部主键,才满足第二范式。 - -  **第三范式(3NF):** - -![img](https://img2020.cnblogs.com/blog/944376/202104/944376-20210429145526908-1013297767.png) - - - - - - - - -  满足3NF的前提是必须满足2NF。 - -  另外关系模式的非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列m既依赖于全部主键,又依赖于非主键列n的情况。 - -  定义听起来还是有点绕,不慌,直接看图,只要非主键内部存在传递依赖,就不满足第三范式。 - -  假设存在关系模式主键1: 课程编号; 列1: 教师名; 列2: 教师家庭地址。显然满足第一范式和第二范式,但是教师家庭地址传递依赖于教师名,所以不满足第三范式。 - - - -- Gitee