From 359de9bf90f5baacb847c104e8bfaa442acfd746 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9B=85=E8=8A=B8?= <2863128930@qq.com> Date: Wed, 31 Aug 2022 10:57:14 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\347\254\224\350\256\260/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\224\350\256\260/.keep" diff --git "a/\347\254\224\350\256\260/.keep" "b/\347\254\224\350\256\260/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From 76e2e57e5e5aacf32314e3c82ec1cc74ff0083c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9B=85=E8=8A=B8?= <2863128930@qq.com> Date: Wed, 31 Aug 2022 10:57:52 +0000 Subject: [PATCH 2/4] =?UTF-8?q?0831=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李雅芸 <2863128930@qq.com> --- ...15\344\271\240\347\254\224\350\256\260.md" | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 "\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" diff --git "a/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" "b/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" new file mode 100644 index 0000000..fbf937b --- /dev/null +++ "b/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" @@ -0,0 +1,147 @@ +#### 条件查询 + +**SQL中常用运算符** + +```sql +=:等于,比较是否相等及赋值 +!=:比较不等于 +>:比较大于 +<:比较小于 +>=:比较大于等于 +<=:比较小于等于 +IS NULL:比较为空 +IS NOT NULL:比较不为空 +in:比较是否在其中 +like:模糊查询 +BETWEEN...AND...:比较是否在两者之间 50-100 BETWEEN 50 AND 100 +and:逻辑与(两个条件同时成立表达式成立) +or:逻辑或(两个条件有一个成立表达式成立) +not:逻辑非(条件成立,表达式则不成立;条件不成立,表达式则成立) +排序: + select * from 表名 order by 字段 + 升序(asc) 降序(desc) + select * from ScoreInfo order by Score desc + 新增 + alter table 表名 add 字段名 nvarchar (..) + 更新数据 + update 表名 set 字段名=‘值’ + 消除重复行 distinct +``` + +#### 模糊查询 + +模糊查询使用like关键字和通配符结合来实现,通配符具体含义如下: + +```sql +%:代表匹配0个字符、1个字符或多个字符。 +_:代表匹配有且只有1个字符。 +[]:代表匹配范围内 +[^]:代表匹配不在范围内 +``` + +#### 聚合函数 + +SQL SERVER中聚合函数主要有: + +```sql +count:求数量 +max:求最大值 +min:求最小值 +sum:求和 +avg:求平均值 +count (*)与 count(字段):count(字段)忽略空值,count (*)不会 +``` + +ROUND函数用法: + +```sql +round(num,len,[type]) +其中: +num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取) +select ROUND(123.45454,3) --123.45500 +select ROUND(123.45454,3,1) --123.45400 +``` + +#### SQL中常用的时间函数 + +```sql +select DATEDIFF(day, '2019-08-20', getDate()); --获取指定时间单位的差值 +SELECT DATEADD(MINUTE,-5,GETDATE()) --加减时间,此处为获取五分钟前的时间,MINUTE 表示分钟,可为 YEAR,MONTH,DAY,HOUR +select DATENAME(month, getDate()); --当前月份 +select DATENAME(WEEKDAY, getDate()); --当前星期几 +select DATEPART(month, getDate()); --当前月份 +select DAY(getDate()); --返回当前日期天数 +select MONTH(getDate()); --返回当前日期月数 +select YEAR(getDate()); --返回当前日期年数 + +SELECT CONVERT(VARCHAR(22),GETDATE(),20) --2020-01-09 14:46:46 +SELECT CONVERT(VARCHAR(24),GETDATE(),21) --2020-01-09 14:46:55.91 +SELECT CONVERT(VARCHAR(22),GETDATE(),23) --2020-01-09 +SELECT CONVERT(VARCHAR(22),GETDATE(),24) --15:04:07 +Select CONVERT(varchar(20),GETDATE(),14) --15:05:49:330 +``` + +**时间格式控制字符串:** + +| 名称 | 日期单位 | 缩写 | +| ------------ | ----------- | --------- | +| 年 | year | yyyy 或yy | +| 季度 | quarter | qq,q | +| 月 | month | mm,m | +| 一年中第几天 | dayofyear | dy,y | +| 日 | day | dd,d | +| 一年中第几周 | week | wk,ww | +| 星期 | weekday | dw | +| 小时 | Hour | hh | +| 分钟 | minute | mi,n | +| 秒 | second | ss,s | +| 毫秒 | millisecond | ms | + +链接查询 + + + +```sql +1.内连接 + +Select 表1~N.列1~n,....from 表1 + +inner join 表2 on 表1.列 = 表2.列 + +where 条件 + +group by 字段(having 条件) + +order by 字段 + +2.外链接 + +左连接 + +Select 表1~N.列1~n,....from 表1 + +left join 表2 on 表1.列 = 表2.列 + +where 条件 + +group by 字段(having 条件) + +order by 字段 + +右连接 + +Select 表1~N.列1~n,....from 表1 + +right join 表2 on 表1.列 = 表2.列 + +where 条件 + +group by 字段(having 条件) + +order by 字段 + +聚合函数 +max(字段/表达式),min(字段),avg(字段),sum(字段),count(字段),忽略空值 +count(*)空值也统计 +``` + -- Gitee From 762f2bddf42b344cf9e3442acc14665815e52914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9B=85=E8=8A=B8?= <2863128930@qq.com> Date: Wed, 7 Sep 2022 13:52:23 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20?= =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\347\254\224\350\256\260/.keep" | 0 ...15\344\271\240\347\254\224\350\256\260.md" | 147 ------------------ 2 files changed, 147 deletions(-) delete mode 100644 "\347\254\224\350\256\260/.keep" delete mode 100644 "\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" diff --git "a/\347\254\224\350\256\260/.keep" "b/\347\254\224\350\256\260/.keep" deleted file mode 100644 index e69de29..0000000 diff --git "a/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" "b/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" deleted file mode 100644 index fbf937b..0000000 --- "a/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" +++ /dev/null @@ -1,147 +0,0 @@ -#### 条件查询 - -**SQL中常用运算符** - -```sql -=:等于,比较是否相等及赋值 -!=:比较不等于 ->:比较大于 -<:比较小于 ->=:比较大于等于 -<=:比较小于等于 -IS NULL:比较为空 -IS NOT NULL:比较不为空 -in:比较是否在其中 -like:模糊查询 -BETWEEN...AND...:比较是否在两者之间 50-100 BETWEEN 50 AND 100 -and:逻辑与(两个条件同时成立表达式成立) -or:逻辑或(两个条件有一个成立表达式成立) -not:逻辑非(条件成立,表达式则不成立;条件不成立,表达式则成立) -排序: - select * from 表名 order by 字段 - 升序(asc) 降序(desc) - select * from ScoreInfo order by Score desc - 新增 - alter table 表名 add 字段名 nvarchar (..) - 更新数据 - update 表名 set 字段名=‘值’ - 消除重复行 distinct -``` - -#### 模糊查询 - -模糊查询使用like关键字和通配符结合来实现,通配符具体含义如下: - -```sql -%:代表匹配0个字符、1个字符或多个字符。 -_:代表匹配有且只有1个字符。 -[]:代表匹配范围内 -[^]:代表匹配不在范围内 -``` - -#### 聚合函数 - -SQL SERVER中聚合函数主要有: - -```sql -count:求数量 -max:求最大值 -min:求最小值 -sum:求和 -avg:求平均值 -count (*)与 count(字段):count(字段)忽略空值,count (*)不会 -``` - -ROUND函数用法: - -```sql -round(num,len,[type]) -其中: -num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取) -select ROUND(123.45454,3) --123.45500 -select ROUND(123.45454,3,1) --123.45400 -``` - -#### SQL中常用的时间函数 - -```sql -select DATEDIFF(day, '2019-08-20', getDate()); --获取指定时间单位的差值 -SELECT DATEADD(MINUTE,-5,GETDATE()) --加减时间,此处为获取五分钟前的时间,MINUTE 表示分钟,可为 YEAR,MONTH,DAY,HOUR -select DATENAME(month, getDate()); --当前月份 -select DATENAME(WEEKDAY, getDate()); --当前星期几 -select DATEPART(month, getDate()); --当前月份 -select DAY(getDate()); --返回当前日期天数 -select MONTH(getDate()); --返回当前日期月数 -select YEAR(getDate()); --返回当前日期年数 - -SELECT CONVERT(VARCHAR(22),GETDATE(),20) --2020-01-09 14:46:46 -SELECT CONVERT(VARCHAR(24),GETDATE(),21) --2020-01-09 14:46:55.91 -SELECT CONVERT(VARCHAR(22),GETDATE(),23) --2020-01-09 -SELECT CONVERT(VARCHAR(22),GETDATE(),24) --15:04:07 -Select CONVERT(varchar(20),GETDATE(),14) --15:05:49:330 -``` - -**时间格式控制字符串:** - -| 名称 | 日期单位 | 缩写 | -| ------------ | ----------- | --------- | -| 年 | year | yyyy 或yy | -| 季度 | quarter | qq,q | -| 月 | month | mm,m | -| 一年中第几天 | dayofyear | dy,y | -| 日 | day | dd,d | -| 一年中第几周 | week | wk,ww | -| 星期 | weekday | dw | -| 小时 | Hour | hh | -| 分钟 | minute | mi,n | -| 秒 | second | ss,s | -| 毫秒 | millisecond | ms | - -链接查询 - - - -```sql -1.内连接 - -Select 表1~N.列1~n,....from 表1 - -inner join 表2 on 表1.列 = 表2.列 - -where 条件 - -group by 字段(having 条件) - -order by 字段 - -2.外链接 - -左连接 - -Select 表1~N.列1~n,....from 表1 - -left join 表2 on 表1.列 = 表2.列 - -where 条件 - -group by 字段(having 条件) - -order by 字段 - -右连接 - -Select 表1~N.列1~n,....from 表1 - -right join 表2 on 表1.列 = 表2.列 - -where 条件 - -group by 字段(having 条件) - -order by 字段 - -聚合函数 -max(字段/表达式),min(字段),avg(字段),sum(字段),count(字段),忽略空值 -count(*)空值也统计 -``` - -- Gitee From 2e0fea32670019843b00da2dfff5daf0d458b9cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9B=85=E8=8A=B8?= <2863128930@qq.com> Date: Wed, 7 Sep 2022 13:54:08 +0000 Subject: [PATCH 4/4] 22 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李雅芸 <2863128930@qq.com> --- .../9.5\344\275\234\344\270\232.md" | 76 +++++++++ .../9.6\344\275\234\344\270\232.md" | 84 ++++++++++ ...15\344\271\240\347\254\224\350\256\260.md" | 147 ++++++++++++++++++ ...03\345\274\217\347\254\224\350\256\260.md" | 15 ++ .../9.5\345\217\230\351\207\217.md" | 78 ++++++++++ ...73\350\276\221\346\216\247\345\210\266.md" | 121 ++++++++++++++ ...25\344\270\216\345\214\272\345\210\253.md" | 63 ++++++++ 7 files changed, 584 insertions(+) create mode 100644 "22\346\235\216\351\233\205\350\212\270/\344\275\234\344\270\232/9.5\344\275\234\344\270\232.md" create mode 100644 "22\346\235\216\351\233\205\350\212\270/\344\275\234\344\270\232/9.6\344\275\234\344\270\232.md" create mode 100644 "22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" create mode 100644 "22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.1\344\270\211\350\214\203\345\274\217\347\254\224\350\256\260.md" create mode 100644 "22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.5\345\217\230\351\207\217.md" create mode 100644 "22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.6\351\200\273\350\276\221\346\216\247\345\210\266.md" create mode 100644 "22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.7All\343\200\201Any\345\222\214Some\347\224\250\346\263\225\344\270\216\345\214\272\345\210\253.md" diff --git "a/22\346\235\216\351\233\205\350\212\270/\344\275\234\344\270\232/9.5\344\275\234\344\270\232.md" "b/22\346\235\216\351\233\205\350\212\270/\344\275\234\344\270\232/9.5\344\275\234\344\270\232.md" new file mode 100644 index 0000000..5b593d8 --- /dev/null +++ "b/22\346\235\216\351\233\205\350\212\270/\344\275\234\344\270\232/9.5\344\275\234\344\270\232.md" @@ -0,0 +1,76 @@ +```sql +练习:要求根据座位号找出张无忌的前后同学? + +declare @ZW float +select @ZW=(select StuSeat from StuInfo where StuName='张无忌') + +select * from StuInfo +where +StuSeat=@ZW+1 or StuSeat =@ZW-1 + + +--2.练习:查询年龄最大的学生信息 +declare @nl int +select @nl=max(stuage) from StuInfo +print @nl +``` + +表 + +```sql +create database gz +go +use gz +go + +create tabale gc +(gcNo varchar(20) primary key, +gcName varchar(50) not null +) +craate table zg +( + zgID int primary key identity (1001,1), + zgName varchar(20) not null +) +create tabale zw( + zwID int primary key identity(1,1), + zwName varchar(20) not null + zw Money + ) + create tabale gs( + gcNO varchar(20), + zgID int, + primary(gcNO,zgID), + gzgs int + ) + select *from gc + select *from zg + select *from zw + select *from gs + + insert gc values + ('A1','花园大厦'), + ('A2','立交桥'), + ('A3','临江饭店') + + insert zg values + ('齐光明'), + ('李思崎'), + ('鞠明亮'), + ('葛宇宏') + insert zw values + ('工程师','65'), + ('技术员','60'), + ('工人','55'), + ('律师','60'), + +insert gs values +('A1','1001','13'), +('A1','1002','16'), +('A1','1004','19'), +('A2','1001','15'), +('A2','1003','17'), +('A3','1002','18'), +('A3','1004','14') +``` + diff --git "a/22\346\235\216\351\233\205\350\212\270/\344\275\234\344\270\232/9.6\344\275\234\344\270\232.md" "b/22\346\235\216\351\233\205\350\212\270/\344\275\234\344\270\232/9.6\344\275\234\344\270\232.md" new file mode 100644 index 0000000..8d80892 --- /dev/null +++ "b/22\346\235\216\351\233\205\350\212\270/\344\275\234\344\270\232/9.6\344\275\234\344\270\232.md" @@ -0,0 +1,84 @@ +```sql +--1. 为赵云此人进行开户开卡操作,赵云身份证:420107199904054233 +declare @z varchar(20) +select @z= '420107199904054233' +insert into +AccoountInfo(AccountCode,AccountPhone,RealName,OpenTime) +varchar(@z,'13556110037','赵云',getdate()) +insert into +BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState) +values('6225125478577896',4,'123456',0,1) + +--2. 需要求出张飞的银行卡卡号和余额,张飞身 +--份证:420107199602034138 (1.使用连接查询,2.使用变量) +declare @f varchar(20) +select @f ='20107199602034138' + +select cardno 银行卡, CardMoney 余额 from BankCard +inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId +where AccountCode=@f + + +--3.某用户银行卡号为“6225547854125656”,该用户执行取钱操作,取钱5000元, +--余额充足则进行取钱操作,并提示"取钱成功",否则提示“余额不足”。 +declare @q money ,@c varchar (20)='6225547854125656' +select @q= CardMoney from BankCard where CardNo='6225547854125656' + +print @q +if @q›5000 +begin +update BankCard set CardHoney = CardMoney - 5000 where CardNo-@c +insert into CardExchange values (@c,0, 5000, getdate ()) + print'取钱成功' +end +else +begin + print'余额不足' +end + +--​ 4.查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”, +--并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", +--显示列分别为卡号,身份证,姓名,余额,用户等级,银行卡状态。 + +select CardNo,AccountCode,RealName,CardMoney,Cardstate, +case +when CardMoney<300000 then '普通用户' +when CardMoney>=300000 then 'VIP用户' +end'用户等级', +case +when CardState=1 then '正常' +when CardState=2 then '挂失' +when CardState=3 then '冻结' +when CardState=4 then '注销' +end '状态', +from BankCard +inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId + + +--5.循环打印1-10。 +declare @a int = 1 +while (@a <= 10) +begin + print @a + set @a = @a + 1 +end + +--打印99乘法表 +declare @c int =1 +while @c<=9 +begin +declare @q int =1 +declare @result varchar(500)='' +while @q<=@c +begin +set @result =@result+convert(varchar(2),@c)+'*' ++convert(varchar(2),@q)+'='+ +convert (varchar(2),@c*@q)+char(9) +set @q =@q+1 +end +print @result +set @c=@c+1 +end + +``` + diff --git "a/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" new file mode 100644 index 0000000..fbf937b --- /dev/null +++ "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/8.31SQL\345\244\215\344\271\240\347\254\224\350\256\260.md" @@ -0,0 +1,147 @@ +#### 条件查询 + +**SQL中常用运算符** + +```sql +=:等于,比较是否相等及赋值 +!=:比较不等于 +>:比较大于 +<:比较小于 +>=:比较大于等于 +<=:比较小于等于 +IS NULL:比较为空 +IS NOT NULL:比较不为空 +in:比较是否在其中 +like:模糊查询 +BETWEEN...AND...:比较是否在两者之间 50-100 BETWEEN 50 AND 100 +and:逻辑与(两个条件同时成立表达式成立) +or:逻辑或(两个条件有一个成立表达式成立) +not:逻辑非(条件成立,表达式则不成立;条件不成立,表达式则成立) +排序: + select * from 表名 order by 字段 + 升序(asc) 降序(desc) + select * from ScoreInfo order by Score desc + 新增 + alter table 表名 add 字段名 nvarchar (..) + 更新数据 + update 表名 set 字段名=‘值’ + 消除重复行 distinct +``` + +#### 模糊查询 + +模糊查询使用like关键字和通配符结合来实现,通配符具体含义如下: + +```sql +%:代表匹配0个字符、1个字符或多个字符。 +_:代表匹配有且只有1个字符。 +[]:代表匹配范围内 +[^]:代表匹配不在范围内 +``` + +#### 聚合函数 + +SQL SERVER中聚合函数主要有: + +```sql +count:求数量 +max:求最大值 +min:求最小值 +sum:求和 +avg:求平均值 +count (*)与 count(字段):count(字段)忽略空值,count (*)不会 +``` + +ROUND函数用法: + +```sql +round(num,len,[type]) +其中: +num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取) +select ROUND(123.45454,3) --123.45500 +select ROUND(123.45454,3,1) --123.45400 +``` + +#### SQL中常用的时间函数 + +```sql +select DATEDIFF(day, '2019-08-20', getDate()); --获取指定时间单位的差值 +SELECT DATEADD(MINUTE,-5,GETDATE()) --加减时间,此处为获取五分钟前的时间,MINUTE 表示分钟,可为 YEAR,MONTH,DAY,HOUR +select DATENAME(month, getDate()); --当前月份 +select DATENAME(WEEKDAY, getDate()); --当前星期几 +select DATEPART(month, getDate()); --当前月份 +select DAY(getDate()); --返回当前日期天数 +select MONTH(getDate()); --返回当前日期月数 +select YEAR(getDate()); --返回当前日期年数 + +SELECT CONVERT(VARCHAR(22),GETDATE(),20) --2020-01-09 14:46:46 +SELECT CONVERT(VARCHAR(24),GETDATE(),21) --2020-01-09 14:46:55.91 +SELECT CONVERT(VARCHAR(22),GETDATE(),23) --2020-01-09 +SELECT CONVERT(VARCHAR(22),GETDATE(),24) --15:04:07 +Select CONVERT(varchar(20),GETDATE(),14) --15:05:49:330 +``` + +**时间格式控制字符串:** + +| 名称 | 日期单位 | 缩写 | +| ------------ | ----------- | --------- | +| 年 | year | yyyy 或yy | +| 季度 | quarter | qq,q | +| 月 | month | mm,m | +| 一年中第几天 | dayofyear | dy,y | +| 日 | day | dd,d | +| 一年中第几周 | week | wk,ww | +| 星期 | weekday | dw | +| 小时 | Hour | hh | +| 分钟 | minute | mi,n | +| 秒 | second | ss,s | +| 毫秒 | millisecond | ms | + +链接查询 + + + +```sql +1.内连接 + +Select 表1~N.列1~n,....from 表1 + +inner join 表2 on 表1.列 = 表2.列 + +where 条件 + +group by 字段(having 条件) + +order by 字段 + +2.外链接 + +左连接 + +Select 表1~N.列1~n,....from 表1 + +left join 表2 on 表1.列 = 表2.列 + +where 条件 + +group by 字段(having 条件) + +order by 字段 + +右连接 + +Select 表1~N.列1~n,....from 表1 + +right join 表2 on 表1.列 = 表2.列 + +where 条件 + +group by 字段(having 条件) + +order by 字段 + +聚合函数 +max(字段/表达式),min(字段),avg(字段),sum(字段),count(字段),忽略空值 +count(*)空值也统计 +``` + diff --git "a/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.1\344\270\211\350\214\203\345\274\217\347\254\224\350\256\260.md" "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.1\344\270\211\350\214\203\345\274\217\347\254\224\350\256\260.md" new file mode 100644 index 0000000..c7d2e7c --- /dev/null +++ "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.1\344\270\211\350\214\203\345\274\217\347\254\224\350\256\260.md" @@ -0,0 +1,15 @@ +1、第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性。 + + 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。 + +1NF的定义为:符合1NF的关系中的每个属性都不可再分 + +说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库 + +2、第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情。 + +第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是属性完全依赖于主键。 + +3、第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关(表中的每一列只能依赖于主键)。 + +第三范式就是属性不依赖于其它非主属性。 也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。 \ No newline at end of file diff --git "a/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.5\345\217\230\351\207\217.md" "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.5\345\217\230\351\207\217.md" new file mode 100644 index 0000000..b020baa --- /dev/null +++ "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.5\345\217\230\351\207\217.md" @@ -0,0 +1,78 @@ +#### 局部变量 + +```sql + +局部变量必须以标记@作为前缀 ,如@age +局部变量的使用是先声明,再赋值 +局部变量只在定义它的局部范围内有效 +#声明 +declare@变量名 类型; +--例: + declare @id int --声明一个名为id的整型变量 + declare @name varchar(50) --声明一个可变长度为50的存放姓名的字符串变量 +#赋值 +方式一: + set @变量名=值; + select @变量名:=值; + 例如 +set @A=3 +select @A=字段名1,@B=字段名2 from table +方式二: + select 字段 into 变量名 + from 表; + +1 Set [变量名] = [变量值] +2 Select [变量名] = [变量值] +3 Select [变量名] = [字段名] from [表名] +#③使用 +SELECT 局部变量名; +#案例:用户变量 +SET @m = 1; +SET @n = 2; +SET @sum = @m+@n; +SELECT @sum; +``` + +#### 全局变量 + +全局变量必须以标记@@作为前缀,如@@version +全局变量由**系统定义和维护**,我们**只能读取,不能修改全局变量的值** +全局变量在整个SQL环境下都可以被访问或调用 + +```sql +--@@ERROR:返回执行的上一个语句的错误号 +--@@IDENTITY:返回最后插入的标识值 +--@@MAX_CONNECTIONS:返回允许同时进行的最大用户连接数 +--@@ROWCOUNT:返回受上一语句影响的行数 +--@@SERVERNAME:返回运行 SQL Server 的本地服务器的名称 +--@@SERVICENAME:返回 SQL Server 正在其下运行的注册表项的名称 +--@@TRANCOUNT:返回当前连接的活动事务数 +--@@LOCK_TIMEOUT:返回当前会话的当前锁定超时设置(毫秒) +``` + +##### 变量的使用。 + +要先用DECLARE 关键字声明,然后用SET或SELECT赋值。局部变量前必须有 “@” 作前缀,全局变量必须有 “@@” 作前缀。 +变量的输出可以用:PRINT或SELECT语句。 + +##### 输出语句 + +1. print变量或表达式 +2. select变量或表达式 + +```sql +--例: + print '数据库服务器名:' + @@servicename + select 15*8 +``` + + + +##### 使用convert函数 + +​ 由于PRINT 命令向客户端返回一个结果的字符串的信息。如果变量值不是字符串的话必须先用数据类型转换函数 CONVERT 将其转换为字符串。 + +```sql +--显示自动编号 +print '当前自动编号的值:' + convert(varchar(10),@@IDENTITY) +``` diff --git "a/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.6\351\200\273\350\276\221\346\216\247\345\210\266.md" "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.6\351\200\273\350\276\221\346\216\247\345\210\266.md" new file mode 100644 index 0000000..38b7cdd --- /dev/null +++ "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.6\351\200\273\350\276\221\346\216\247\345\210\266.md" @@ -0,0 +1,121 @@ +### 逻辑控制 + +##### if-else条件语句 + +```sql +语法:if() + 语句或语句块 + else + 语句或语句块 +若有多条语句,则使用语句块,语句块使用**begin...end表示,其作用相当于Java语句的“{}”符号。** +``` + + + +```sql + + if() + begin + 语句1 + 语句1 + ..... + end +else +begin +.... +end +例如从成绩表TScore中查询,本班的平均分数在70分以上,则显示“成绩优秀”显示前3名的考试信息;否则显示“成绩较差”并显示后3名的考试信息。 +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 循环语句 + +while:可以通过break和continue控制循环语句中的执行。 + +```sql + 语法: + while(条件) +begin + 语句或语句块 + [brank] +end +使用break关键字从最内层的while循环中退出。 +``` + +```sql +例如本次考试成绩较差,要提分,确保每人的成绩都通过,提分规则,先给每人加2分,看是否通过,如没有全通过,继续加2分,直到每人都通过为止。 +declare @n int +while(1=1) --条件永远成立 + begin + select @n=count(*) from stuMarks + where writtenExam<60 --统计不及格人数 + if (@n>0) + update stuMarks --每人加2分 + set writtenExam=writtenExam+2 + else + break --退出循环 + end +print '加分后的成绩如下:' +select * from stuMarks +``` + + + +##### CASE *end多分支语句:相当于多重if语句 + +```sql + 语法: + case + when 条件1 then结果1 + when条件2 then 结果2 + [else 其他结果] + end + +``` + +```sql +例如:成绩表TScore中,用等级来评成绩分数。A:90分以上,B:80~89,C:60~79,D:60分以下,并显示他们的学号stuNO。 +代码: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 +``` + +(1)特殊字符:制表符 CHAR(9);换行符 CHAR(10);回车 CHAR(13); + +(2)循环中若出现break和CONTINUE,作用与Java,C#等语言一致。 diff --git "a/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.7All\343\200\201Any\345\222\214Some\347\224\250\346\263\225\344\270\216\345\214\272\345\210\253.md" "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.7All\343\200\201Any\345\222\214Some\347\224\250\346\263\225\344\270\216\345\214\272\345\210\253.md" new file mode 100644 index 0000000..cf38e0a --- /dev/null +++ "b/22\346\235\216\351\233\205\350\212\270/\347\254\224\350\256\260/9.7All\343\200\201Any\345\222\214Some\347\224\250\346\263\225\344\270\216\345\214\272\345\210\253.md" @@ -0,0 +1,63 @@ +#### All、Any和Some用法与区别 + +**ALL:**所有 + +**ANY:**部分 + +**SOME:**与ANY相同,使用ANY的地方都可以用SOME替换。 + +**>ALL:**父查询中列的值必须大于子查询返回的值列表的每一个值。 + +**>ANY:**父查询中的返回值必须大于子查询中的一个值。 + +**=ANY:**与IN等效:父查询中列的值必须在子查询中返回值列表存在。 + +**<>ANY与NOT IN的区别:** +**<>ANY:**父查询结果中的列的值与子查询返回值列表只要有一个,不相同就返回。 + +**NOT IN:**父查询的结果中的列的值必须不能在子查询值的列表中。 + +```sql +set nocount on + +use tempdb +go + +if (object_id ('t1') is not null)drop table t1 +create table t1 (n int) +insert into t1 select 2 unionselect 3 + +if (object_id ('t2') is not null)drop table t2 +create table t2 (n int) +insert into t2 select 1 unionselect 2 union select 3 union select 4 + +-- t1表数据 2,3 +-- t2表数据 1,2,3,4 +-- '>all' 表示:t2表中列n的数据大于t1表中列n的数据的数,结果只有4. +select * from t2 where n > all(select n from t1 ) --4 +select * from t2 where n > any(select n from t1 ) --3,4 +select * from t2 where n > some(selectn from t1) --3,4 + +select * from t2 where n = all(select n from t1 ) --无数据 +select * from t2 where n = any(select n from t1 ) --2,3 +select * from t2 where n = some(selectn from t1) --2,3 + +select * from t2 where n < all(select n from t1 ) --1 +select * from t2 where n < any(select n from t1 ) --1,2 +select * from t2 where n < some(selectn from t1) --1,2 + +select * from t2 where n <>all (select n from t1 ) --1,4 +select * from t2 where n <>any (select n from t1 ) --1,2,3,4 +select * from t2 where n <>some(select n from t1) --1,2,3,4 +set nocount off +``` + +1. Some和Any等价 + +2. =any 与in 等效. + +3. 如果t1中包含null数据,那么所有All相关的比较运算将不会返回任何结果。因为t1和t2表的null的存在他们和notexists之类的比较符会有一些**区别**。 + + ```sql + select * from t2 a where not exists(select1 from t1 where n>=a.n) select * from t2 where n > all(select n from t1) + ``` \ No newline at end of file -- Gitee