From 09b682232eeddccd8ce184773b351039ef50dd53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=8E=E4=BC=9F?= <1931626338@qq.com> Date: Fri, 23 Sep 2022 12:20:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=94=E6=AC=A1=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E5=92=8C=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\345\255\220\346\237\245\350\257\242 .md" | 373 ++++++++++++++++++ .../SQLQuery5.sql" | 73 ++++ 2 files changed, 446 insertions(+) create mode 100644 "\351\231\210\345\215\216\344\274\237 12/\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232,\347\254\224\350\256\260/2022-9-21-\345\205\263\350\201\224\345\255\220\346\237\245\350\257\242 .md" create mode 100644 "\351\231\210\345\215\216\344\274\237 12/\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232,\347\254\224\350\256\260/SQLQuery5.sql" diff --git "a/\351\231\210\345\215\216\344\274\237 12/\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232,\347\254\224\350\256\260/2022-9-21-\345\205\263\350\201\224\345\255\220\346\237\245\350\257\242 .md" "b/\351\231\210\345\215\216\344\274\237 12/\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232,\347\254\224\350\256\260/2022-9-21-\345\205\263\350\201\224\345\255\220\346\237\245\350\257\242 .md" new file mode 100644 index 0000000..67664c9 --- /dev/null +++ "b/\351\231\210\345\215\216\344\274\237 12/\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232,\347\254\224\350\256\260/2022-9-21-\345\205\263\350\201\224\345\255\220\346\237\245\350\257\242 .md" @@ -0,0 +1,373 @@ +# 2022.9.16 + +## 创建数据库 + +```SQL +create database 数据库名 +``` + +## 创建数据表 + +```SQL +create table 表名( +) +``` + +## 查询数据 + +```sql +select * from 表名 +``` + +## 增删改查 + +```SQL +insert into 表名 ({字段1},{字段1},{字段1},....) values (值1,值1,值1,....) +alter table (表名) add (列名) varchar(255) ; +delete from 表名 where 删除条件 +drop table (表名) 删除整个表 +UPDATE 表名 SET 字段1=修改的值1,字段2=修改的值2,.. . .. WHERE 修改的条件 +``` + + + +## 主键,自增,不允许为空,默认值,外键,唯一约束 + +```sql +1.primary key 主键 +2.identity(1,1) 自增 初始ID,自增多少 +3.not null 不允许为空 +4.default('') 默认值 +5.userId(表名) int(字段) references(外键) userInfo(表名)(userNo)列名 外键 +6.unique 唯一约束 +``` + +# 2022.9.17 + +## SQL条件查询 + +```sql +=:等于,比较是否相等及赋值 +!=:比较不等于 +>:比较大于 +<:比较小于 +>=:比较大于等于 +<=:比较小于等于 +IS NULL:比较为空 +IS NOT NULL:比较不为空 +in:比较是否在其中 +like:模糊查询 +BETWEEN...AND...:比较是否在两者之间 50-100 BETWEEN 50 AND 100 +and:逻辑与(两个条件同时成立表达式成立) +or:逻辑或(两个条件有一个成立表达式成立) +not:逻辑非(条件成立,表达式则不成立;条件不成立,表达式则成立) +``` + +## 模糊查询 + +```sql +%:代表匹配0个字符、1个字符或多个字符。 +_:代表匹配有且只有1个字符。 +[]:代表匹配范围内 +[^]:代表匹配不在范围内 + +模糊查询,包含查询 +select * from 表名 where 列名 like '%要查询的字段%' + +模糊查询,开头查询 +select * from 表名 where 列名 like '要查询的字段%' + +模糊查询,结尾查询 +select * from 表名 where 列名 like '%要查询的字段' +``` + +## 聚合函数 + +```SQL +count:求数量 +max:求最大值 计算某一列的最大值 +min:求最小值 计算某一列的最小值 +sum:求和 计算某一列的合计值,该列必须为数值类型 +avg:求平均值 计算某一列的平均值,该列必须为数值类型 +``` + +## 升序降序查询 + +```SQL +-- desc 降序 默认升序 asc -- +SELECT * FROM 表名 order by 列名 desc +``` + + + +## 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 +``` + +## CONVERT()与CAST()函数: + +```SQL +--1.保留小数 +convert(decimal(13,2),12.45454) +cast(12.45454 as decimal(13,2)) +--2.强制转换类型 +``` + +## 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 +``` + +## 连表查询 + +```SQL +内连接查询 +1.select * from 第一张表名 重命名字段1 +2.inner join 第二张表名 重命名字段2 on 重命名字段1.关联的列=重命名字段2.关联的列 +3.where 要筛选的条件、 + +左连接查询 +1.select * from 第一张表名 重命名字段1 +2.left join 第二张表名 重命名字段2 on 重命名字段1.关联的列=重命名字段2.关联的列 +3.where 要筛选的条件、 + +右连接查询 +1.select * from 第一张表名 重命名字段1 +2.right join 第二张表名 重命名字段2 on 重命名字段1.关联的列=重命名字段2.关联的列 +3.where 要筛选的条件、 +``` + +## **时间格式控制字符串:** + +| 名称 | 日期单位 | 缩写 | +| ------------ | ----------- | --------- | +| 年 | 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语句执行顺序: + +```sql +(7) SELECT +(8) DISTINCT +(1) FROM +(3) JOIN +(2) ON +(4) WHERE +(5) GROUP BY +(6) HAVING +(9) ORDER BY +(10) LIMIT +``` + +# 2022.9.19 + +## 子查询 + +```sql +标量子查询:返回的是单行单列;标量子查询是指子查询返回的是**单一值**,如一个数字或一个字符串。 + +列子查询:返回的数据时1列n行,放在where之后 + +行子查询:是指子查询返回的结果集是1行N列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。 + +表子查询(from子查询) +表子查询是指子查询返回是M行N列的结果集,查询语句可嵌套在FROM关 +键字后,且需要定义别名。 +``` + +## all和any的区别 + +```sql +注意:1. =any 与in 等效. +all:是所有 +any:是任意一个 +any表示任何一个满足就返回TRUE,all表示全部都满足才返回TRUE +``` + +## 三个排序函数 + +```sql +row_number():连续,无并列 +dense_rank():有并列,不挑空 +rank():有并列,会挑空 + +--学生的Java成绩,并根据成绩排名 +--row_number() +select StuName 姓名,ROW_NUMBER() over(order by score desc) 排名,score 分数 from StuScore +join stuinfo on StuInfo.StuID = StuScore.StuID +where subject = 'Java' + +--rank() +select StuName 姓名,rank() over(order by score desc) 排名,score 分数 from StuScore +join stuinfo on StuInfo.StuID = StuScore.StuID +where subject = 'Java' + +--DENSE_RANK() + select StuName 姓名,dense_rank() over(order by score desc) 排名,score 分数 from StuScore +join stuinfo on StuInfo.StuID = StuScore.StuID +where subject = 'Java' +``` + +## exists子查询 + +关键字EXISTS构造子查询时,当子查询的结果集不为空时,则EXISTS返回的结果为TRUE,外层查询语句进行查询;当子查询的结果集为空时,则EXISTS返回的结果为FALSE,外层查询语句不进行查询。 + +```SQL + 关羽的银行卡号为"6225547858741263",查询当天是否有收到转账。 + if exists(select * from CardTransfer where CardNoIn = 6225547858741263) + print '有' + else + print '没有' +``` + +# 2022.9.21 + +## 关联子查询_排序 + +```SQL +row_number():连续,无并列 +dense_rank():有并列,不挑空 +rank():有并列,会挑空 +``` + +# 2022.9.22 + +## 变量 + +```sql +全局变量必须以标记@@作为前缀,如@@version +全局变量由**系统定义和维护**,我们**只能读取,不能修改全局变量的值** +全局变量在整个SQL环境下都可以被访问或调用 +--全局变量:只读,由系统定义和维护, @@ + +--@@ERROR:返回执行的上一个语句的错误号 +--@@IDENTITY:返回最后插入的标识值 +--@@MAX_CONNECTIONS:返回允许同时进行的最大用户连接数 +--@@ROWCOUNT:返回受上一语句影响的行数 +--@@SERVERNAME:返回运行 SQL Server 的本地服务器的名称 +--@@SERVICENAME:返回 SQL Server 正在其下运行的注册表项的名称 +--@@TRANCOUNT:返回当前连接的活动事务数 +--@@LOCK_TIMEOUT:返回当前会话的当前锁定超时设置(毫秒) +-------------------------------------------------------------------------------------- +局部变量必须以标记@作为前缀 ,如@age +局部变量的使用是先声明,再赋值 +局部变量只在定义它的局部范围内有效 + +声明一个局部变量:**declare @变量名 数据类型** +--局部变量: 声明(int a),赋值(a = 1) +--declare 变量名 数据类型 +例: + declare @id int --声明一个名为id的整型变量 + declare @name varchar(50) --声明一个可变长度为50的存放姓名的字符串变量 +``` + +# 赋值 + +赋值: + - set @变量名 = 值 + - select @变量名 = 值 + +```sql +--例: + select @id = 1001 + set @name = '周飘' +``` + +set与select赋值的区别: + +set赋值给变量指定的值,select一般用于表中查询出的数据赋值给变量,如果查询结果有多条,取最后一条赋值给变量 + +# 逻辑控制语句 + +## if条件分支 + +```sql +sql中的if-else语句 +if(条件) +begin +语句 +语句 +..... +end +else +begin +语句 +语句 +..... +end +``` + +## while 循环控制语句 + +while:可以通过break和continue控制循环语句中的执行。 + +break:跳出整个循环 + +continue:跳出当前循环 + +```sql +sql中的if-else语句 +while(条件) +begin +语句 +语句 +..... +end +``` + +## 逻辑控制语句 switch case + +``` + +``` + +# 批处理语句 + +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 +``` + diff --git "a/\351\231\210\345\215\216\344\274\237 12/\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232,\347\254\224\350\256\260/SQLQuery5.sql" "b/\351\231\210\345\215\216\344\274\237 12/\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232,\347\254\224\350\256\260/SQLQuery5.sql" new file mode 100644 index 0000000..516e777 --- /dev/null +++ "b/\351\231\210\345\215\216\344\274\237 12/\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232,\347\254\224\350\256\260/SQLQuery5.sql" @@ -0,0 +1,73 @@ +--ѡ֧ϰ +select * from AccountInfo +select * from BankCard +select * from CardExchange +select * from CardTransfer +--ijûпΪ6225547854125656ûִȡǮȡǮ5000ԪȡǮʾ"ȡǮɹ"ʾ㡱 +--1.ǰпŵ +declare @balance money +select @balance = CardMoney from BankCard where CardNo='6225547854125656' +print @balance +--2.ж +if @balance>5000 + begin + --ȡǮ: + --BankCard + update BankCard set CardMoney = @balance - 5000 where CardNo = '6225547854125656' + --CardExchange + insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) values('6225547854125656',0,5000,getdate()); + end +else + begin + print '' + end + +print @balance + + + +--ѯпϢп״̬1,2,3,4ֱתΪ֡,ʧ,,עҸпʾпȼ 30Ϊͨû,30Ϊ"VIPû" +--ʾзֱΪţ֤ûȼп״̬ +select CardNo ,AccountCode ֤,RealName , CardMoney , +case + when CardMoney>300000 then 'VIPͻ' + else 'ͨû' +end ûȼ, + +case + when CardState=1 then '' + when CardState=2 then 'ʧ' + when CardState=3 then '' + else 'ע' +end п״̬״̬ + + +from BankCard +inner join AccountInfo on AccountInfo.AccountId = BankCard.AccountId + + + +--ѭṹϰ +--ѭӡ1-10 +declare @a int = 1 +while @a < 10 + begin + print @a + set @a = @a + 1 + end +print @a +--ѭӡžų˷ +declare @i int = 1 +while @i <= 9 + begin + declare @j int = 1 + declare @result varchar(200) = '' + while @j <= @i + + begin + set @result = @result + cast(@i as varchar(1))+ ' * ' + cast(@j as varchar(1)) + ' = '+ cast(@i*@j as varchar(2)) + char(9) + set @j = @j + 1 + end + print @result + set @i = @i + 1 + end -- Gitee