diff --git a/123.md b/123.md new file mode 100644 index 0000000000000000000000000000000000000000..965940c7856d8217c9fb738c12a7f87b727cc788 --- /dev/null +++ b/123.md @@ -0,0 +1,85 @@ +create database gc +go +use gc +go +--工程表 +create table gcb +( +gcid varchar(10) primary key, +gcname varchar(20), +) +--职工表 +create table zgb +( +zgid int primary key, +zgname varchar(20), + +) +--职务表 +create table zwb +( +zw varchar(20) primary key, +xsgzl int +) +--项目表 +create table xm +( +gcid varchar(20), +zgid int references zgb(zgid), +gtime int, +gz decimal +) +--工程表 +insert gcb +values ('A1','花园大厦'), +('A2','立交桥'), +('A3','临江饭店') +--职工表 +insert zgb +values (1001,'齐光明'), + (1002,'李思岐'), + (1003,'鞠明亮'), + (1004,'葛宇洪') +--职务表 +insert zwb values +('工程师','65'), +('技术员','60'), +('律师','60'), +('工人','55') +--项目表 +insert xm values +('A1',1001,13,845.00), +('A1',1002,16,960.00), +('A1',1004,19,1140.00), +('A2',1001,15,975.00), +('A2',1003,17,935.00), +('A3',1002,18,1080.00), +('A4',1004,14,840.00) + +select * from gcb +select * from zgb +select * from zwb +select * from xm + +--根据座位号找出张无忌的前后同学 + +declare @id int + +select @id=StuSeat-1 from StuInfo where StuName='张无忌' + +print @id + +declare @id int + +select @id=StuSeat+1 from StuInfo where StuName='张无忌' + +print @id + +select * from StuInfo where StuSeat=@id+1 or StuSeat =@id-1 + +--查询年龄最大的学生信息 +declare @age int + +select @age=max(stuage) from StuInfo + +print @age \ No newline at end of file diff --git a/9.6.md b/9.6.md new file mode 100644 index 0000000000000000000000000000000000000000..f1fcff74804a149cf616f8accec3830476706887 --- /dev/null +++ b/9.6.md @@ -0,0 +1,30 @@ +全局变量必须以标记@@作为前缀,如@@version +全局变量由**系统定义和维护**,我们**只能读取,不能修改全局变量的值** +全局变量在整个SQL环境下都可以被访问或调用 + +```sql +--@@ERROR:返回执行的上一个语句的错误号 +--@@IDENTITY:返回最后插入的标识值 +--@@MAX_CONNECTIONS:返回允许同时进行的最大用户连接数 +--@@ROWCOUNT:返回受上一语句影响的行数 +--@@SERVERNAME:返回运行 SQL Server 的本地服务器的名称 +--@@SERVICENAME:返回 SQL Server 正在其下运行的注册表项的名称 +--@@TRANCOUNT:返回当前连接的活动事务数 +--@@LOCK_TIMEOUT:返回当前会话的当前锁定超时设置(毫秒) +1. print变量或表达式 +2. select变量或表达式 + +```sql +--例: + print '数据库服务器名:' + @@servicename + select 15*8 + --变量:局部变量,全局变量 +--局部变量:@ +--全局变量:@@ + +--选择结构:单分支:if 双分支:if-else, 嵌套if +--if 条件 begin 语句 end +--循环: while break(跳出循环)、continue(跳出当前循环) +--Oracle: LOOP while...LOOP, FOR..LOOP +--mysql: repeat +--逻辑控制 diff --git "a/9.6\344\275\234\344\270\232.md" "b/9.6\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..16037369d05e8a17df8c18469719733d2da83253 --- /dev/null +++ "b/9.6\344\275\234\344\270\232.md" @@ -0,0 +1,41 @@ +--1. 为赵云此人进行开户开卡操作,赵云身份证:420107199904054233 +insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime) +values('420107199904054233','135547561451','赵云',GETDATE()) +2. 需要求出张飞的银行卡卡号和余额,张飞身份证:420107199602034138 (1.使用连接查询,2.使用变量) +select accountcode,moneyinbank from AccountInfo ao +inner join CardExchange on CardExchange.ExchangeId=ao.AccountId +where AccountCode='420107199602034138' + +#### 逻辑控制 + +##### 条件分支if-else + +​ 3.某用户银行卡号为“6225547854125656”,该用户执行取钱操作,取钱5000元,余额充足则进行取钱操作,并提示"取钱成功",否则提示“余额不足”。 +declare @qu int +select @qu=moneyinbank-5000 from CardExchange where CardNo='6225547854125656' +if @qu>=0 +begin +print'成功' +end +else +begin +print'失败' +end + +##### 条件分支:case-when + +​ 4.查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”,并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", +--显示列分别为卡号,身份证,姓名,余额,用户等级,银行卡状态。 + select accountcode,CardNo,RealName,CardMoney, + case + when CardMoney>=300000 then'vip' + else '普通' + end '用户等级', + case + when CardState=1 then'正常' + when CardState=2 then'挂失' + when CardState=3 then'冻结' + when CardState=4 then'注销' + end '银行卡状态' + from AccountInfo ao + inner join BankCard bc on bc.AccountId=ao.AccountId \ No newline at end of file diff --git "a/\347\254\224\350\256\260.md" "b/\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..8d6150f4a24644fbba968dee063750b962e55fe8 --- /dev/null +++ "b/\347\254\224\350\256\260.md" @@ -0,0 +1,61 @@ +sql +=:等于,比较是否相等及赋值 +!=:比较不等于 +>:比较大于 +<:比较小于 +>=:比较大于等于 +<=:比较小于等于 +IS NULL:比较为空 +IS NOT NULL:比较不为空 +in:比较是否在其中 +like:模糊查询 +BETWEEN...AND...:比较是否在两者之间 50-100 BETWEEN 50 AND 100 +and:逻辑与(两个条件同时成立表达式成立) +or:逻辑或(两个条件有一个成立表达式成立) +not:逻辑非(条件成立,表达式则不成立;条件不成立,表达式则成立) +sql +%:代表匹配0个字符、1个字符或多个字符。 +_:代表匹配有且只有1个字符。 +[]:代表匹配范围内 +[^]:代表匹配不在范围内 + +SQL SERVER中聚合函数主要有: + +```sql +count:求数量 +max:求最大值 +min:求最小值 +sum:求和 +avg:求平均值 +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 +E-R模型是通过E-R图表示的数据模 +一对一关系 可以与任意一端对应的关系模式合并,在任意一方加入对方的主键(主码)变为其外键(外码),并加入联系本身的属性。 + +一对多关系 可以与n端对应的关系模式合并,将1方的主键加入n方作为其外键,并将联系的属性也加入n方 + +多对多关系 + +(新建一张关系表),将联系双方的主键(主码)加入其中,并将联系的属性也加入其中。 + +关系模式的规范化(范式) +尽量满足高标准的范式,适当建立索引,少采用储存过程,避免使用触发器 + +第一范式(1NF);起始结构简单,便于讨论 +规定了一个关系中的属性值必须是”原子“的,排斥了属性值为元组,数组或某种复合数组的可能性,使关系的属性值都是”最简形式“ +第二范式(2NF); +如果一个关系满足第一范式,并且除了主键以外的其他列都依赖于该主键,则满足第二范式(2NF) +第三范式(3NF); +如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF)