diff --git "a/45\346\235\216\346\266\233/\344\275\234\344\270\232/2022.9.1\351\223\266\350\241\214\346\225\260\346\215\256\345\272\223\346\226\207\344\273\266.md" "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/2022.9.1\351\223\266\350\241\214\346\225\260\346\215\256\345\272\223\346\226\207\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..d53fd6a8e806228469494110e1b94f031b66b4fc --- /dev/null +++ "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/2022.9.1\351\223\266\350\241\214\346\225\260\346\215\256\345\272\223\346\226\207\344\273\266.md" @@ -0,0 +1,72 @@ + + + + +![20220901第一题ER图](20220901第一题ER图.png) + +![20220901银行作业](20220901银行作业.png) + +```sql +create database ER ; + +use ER; + +create table UserInfo( +UserID int primary key identity(1,1), +UserName varchar(20) , +UsarPwd varchar(20), +UserAddress varchar(40) +) + +create table BankCard ( +IDCard int primary key identity(1,1), +UserID int references UserInfo(UserID), +Balance decimal(100,2) +) + +--交易表 +create table TradeInfo( + DealId int primary key identity(201,1),--交易信息Id + Dsave varchar(20) not null,--存钱 + Dborrow varchar(20) not null,--取钱 + BId int references BankCard(IDCard), + UserId int references UserInfo(UserID) +) + +insert Deal values +('存入50000','取出300','101','1'), +('存入60000','取出3000','102','2'), +--('存入8000','取出5000','103','1'), +('存入99000','取出60000','103','3') + +--转账信息表 +create table TDeal +( + TDId int primary key identity(301,1), + Transfer varchar(20) not null, + BId int references BankCard(IDCard), + UserId int references UserInfo(UserID), + + +) +insert TDeal values +('转出5000','101','1'), +('转入8000','102','2'), +('转出50000','103','3') + + +--状态信息表 +create table Statu +( + StId int primary key identity(401,1), + Statuss varchar(20) not null, + BId int references BankCard(IDCard), + UserId int references UserInfo(UserId), + +) +insert Statu values +('正常','101','1'), +('挂失','102','2'), +('冻结','103','3') +``` + diff --git "a/45\346\235\216\346\266\233/\344\275\234\344\270\232/20220901\347\254\254\344\270\200\351\242\230ER\345\233\276.png" "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/20220901\347\254\254\344\270\200\351\242\230ER\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..15384367a54c728932fed009df6dbd669877dbd8 Binary files /dev/null and "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/20220901\347\254\254\344\270\200\351\242\230ER\345\233\276.png" differ diff --git "a/45\346\235\216\346\266\233/\344\275\234\344\270\232/20220901\351\223\266\350\241\214\344\275\234\344\270\232.png" "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/20220901\351\223\266\350\241\214\344\275\234\344\270\232.png" new file mode 100644 index 0000000000000000000000000000000000000000..b63a2702fe9e6f0ce414d32f427d2e622078a74e Binary files /dev/null and "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/20220901\351\223\266\350\241\214\344\275\234\344\270\232.png" differ diff --git "a/45\346\235\216\346\266\233/\344\275\234\344\270\232/\345\205\254\345\217\270.sql" "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/\345\205\254\345\217\270.sql" new file mode 100644 index 0000000000000000000000000000000000000000..789e4312c0a6db96ccb0732e1724b79c0754d7ea --- /dev/null +++ "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/\345\205\254\345\217\270.sql" @@ -0,0 +1,59 @@ +create database PD + +use PD + +go; + +--ְ +create table PostInfo( +PostNo int primary key identity(1,1) , +PostName varchar(20), +SHour money +) +insert PostInfo values +('ʦ','65'), +('ʦ','60'), +('','55'), +('Ա','60'), +('Ա','60') +select * from PostInfo + +--ְ +create table employee( +EID int primary key, +EName varchar(20) not null, +) +insert employee values(1001,''),(1002,'˼'),(1003,''),(1004,''); + +--Ŀ +create table Project( +PNo varchar(20) primary key , +PName varchar(20) not null, +) +insert Project values +('A1','԰'), +('A2',''), +('A3','ٽ') + +--нˮ +create table salary( +[SId] int primary key identity(1101,1), +EID int references employee(EID), --ְԱID +PNo varchar(20) references Project(PNo),--Ŀ +PostNO int references PostInfo(PostNo),--ְ +SRate int not null, +SHour int not null, +SPayroll int not null +) +insert salary values +('1001','A1','1','65','13','845'), +('1001','A2','1','65','15','975'), +('1002','A1','4','60','16','960'), +('1002','A3','4','60','18','1080'), +('1003','A2','3','55','17','935'), +('1004','A1','2','60','16','1140'), +('1004','A3','4','60','14','840') + +declare @money int +select @money=sum(SRate*SHour) from salary where PNo='A1' +print @money \ No newline at end of file diff --git "a/45\346\235\216\346\266\233/\344\275\234\344\270\232/\345\257\273\346\211\276\345\274\240\347\277\240\345\261\261\344\271\240\351\242\230.sql" "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/\345\257\273\346\211\276\345\274\240\347\277\240\345\261\261\344\271\240\351\242\230.sql" new file mode 100644 index 0000000000000000000000000000000000000000..c519833a1a04742753e9995b21ab7edba8973e41 --- /dev/null +++ "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/\345\257\273\346\211\276\345\274\240\347\277\240\345\261\261\344\271\240\351\242\230.sql" @@ -0,0 +1,66 @@ +create database studenttest +go +use studenttest +go + +create table StuInfo( + StuNo varchar(20) primary key , + StuName varchar(50), + StuSex varchar(2), + StuAge int, + StuSeat int +); +go + +insert into StuInfo values('S2001','','',100,1); +insert into StuInfo values('S2002','Ŵɽ','',25,2); +insert into StuInfo values('S2003','޼','',12,3); + + +create table StuScore( + StuID varchar(20) primary key, + StuSex varchar(2), + Chinese int, + English int, + Math int +); +go + +insert into StuScore values('S2001','',75,80,90); +insert into StuScore values('S2002','',76,56,54); +insert into StuScore values('S2003','',90,92,70); +insert into StuScore values('S2004','',70,72,80); + + +--declare @ms float +declare @fms float + +--select @ms=AVG((Chinese+English+Math)/3) from StuScore where StuSex='' +select @fms=AVG((Chinese+English+Math)/3) from StuScore where StuSex='Ů' + +--print 'ƽɼ'+convert(varchar(5),@ms) +print 'Ůƽɼ'+convert(varchar(5),@fms) + + + +select * from StuScore + +select * from StuInfo +--2. ϰҪλҳŴɽǰͬѧ + +-- +declare @StuSeat int +--ʼ +--Ŵɽ +select @StuSeat=(select StuSeat from StuInfo where StuSeat=2) +--ӡ +print @StuSeat +--ŴɽǰϢ +select * from StuInfo +where StuSeat = @StuSeat+1 or StuSeat=@StuSeat-1 + + +--2.ϰѯѧϢ +declare @StuAge int +select @StuAge = max(stuage) from StuInfo +select * from StuInfo where StuAge=@StuAge \ No newline at end of file diff --git "a/45\346\235\216\346\266\233/\347\254\224\350\256\260/20220901\344\270\211\350\214\203\345\274\217.md" "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/20220901\344\270\211\350\214\203\345\274\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..6aa40ece7a1c776f7db8393e4407b7a20f4ce72a --- /dev/null +++ "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/20220901\344\270\211\350\214\203\345\274\217.md" @@ -0,0 +1,26 @@ +**三范式** + +规范化(Normalization)是用于数据库设计的一系列原理和技术,它可以减少表中数据的冗余,增加数据完整性和一致性。 + + + +![image-20220905222714574](C:\Users\B1952\AppData\Roaming\Typora\typora-user-images\image-20220905222714574.png) + + + +(要理解不同业务的原子设计) + +第一范式(1NF)是指表中的字段都是不可再分的原子属性,同时表需要有一个主键。 + +拥有一唯一标识 一般为创建主键 + + + +第二范式(2NF)首先需要满足第一范式,非主键字段必须完全依赖于主键字段,不能只依赖于主键的一部分。 + +第三范式(3NF)首先需要满足第二范式,非主键字段不能依赖于其他非主键字段。 + + + +为了提高查询性能可以降低规范化的级别,也就是反规范化(Denormalization)。 + diff --git "a/45\346\235\216\346\266\233/\347\254\224\350\256\260/20220905\345\217\230\351\207\217.md" "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/20220905\345\217\230\351\207\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..c7b1ad5390af843ed3e43d467132300d971347c6 --- /dev/null +++ "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/20220905\345\217\230\351\207\217.md" @@ -0,0 +1,37 @@ +**变量** + +定义 + +SQL Server中的变量是一个参数,可以对这个参数进行赋值 + +先定义 + +定义一个变量 + +```sql +declare @ 变量名 数据类型 +declare @ a int + +``` + +赋值 + +```sql +/* +set 变量名=值 +select 变量名1=值1 ,变量名2=值2 +*/ + +set 是单条数据赋值 +select 可以多条数据赋值 + + +``` + +优点 + +查询同一字段多个内容 + +只需要修改对应的变量内容,所有的字段对应的值都会修改 + +提高查询效率 \ No newline at end of file diff --git "a/45\346\235\216\346\266\233/\347\254\224\350\256\260/\345\210\206\351\241\265.md" "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/\345\210\206\351\241\265.md" new file mode 100644 index 0000000000000000000000000000000000000000..436063800acc4fa5ef404206c850eb200de2377d --- /dev/null +++ "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/\345\210\206\351\241\265.md" @@ -0,0 +1,98 @@ +#### **分页** + +格式: + +limit[位置偏移量],行数 + +在 SQL Server 和Access ,需要使用TOP 关键字 比如: + +```sql +select top 5 name , hp_max from heros order by hp_max desc +``` + + + +##### 1.1:MySQL使用limit实现数据的分页显示 + +需求1:每页显示20条记录,此时显示第一页 + +```sql +select employee_id,last_name +from employess +limit 0,20; +``` + +需求2:每页显示20条记录,此时显示第二页 + +```sql +select employee_id,last_name +from employess +limit 20,20; +``` + +需求3:每页显示20条记录,此时显示第3页 + +```sql +select employee_id,last_name +from employess +limit 40,20; +``` + +需求: 每页显示PageSize条记录,此时显示第PageNo页 + +公式 :(limit PageNo-1) * PageSize, PageSize; + + + +##### 2.1:where ... order by ...limit 声明顺序如下 + +limit 的格式:严格来说:limit位置偏移量,条目数 + +结构“ limit 0,条目数” 等价于“limit条目数” + + + +```sql +显示第一页20条数据 +select employee_id,last_name,salary +from employess +where salary>6000 +order by salary desc +limit 0,20; + +#limit 20; + + +``` + +需求4:表里有107条数据,我们只想要显示第32、33条数据怎么办 + +```sql +select employee_id,last_name,salary +from employess +limit 31,2; +``` + +###### 2.3 MYSQL8.0中可以用“limit 3 offset 4” ,意思是获取从第5条记录开始后面的3条记录,和“limit 4,3;”返回的结果相同 + +分页显示公式 : (当前页数-1)* 每条页数,每页条数 + +* 注意: limit子句必须放在整个select语句的最后 + +```sql +select employee_id,last_name,salary +from employess +limit 2 offset 31; +``` + +练习:查询员工表中工资最高的员工信息 + +```sql +select employee_id,last_name,salary +from employess +order by salary desc +limit 0,1; +#limit 1; +#limit 1 offset 0; +``` + diff --git "a/45\346\235\216\346\266\233/\347\254\224\350\256\260/\346\225\260\346\215\256\345\272\223\345\237\272\347\241\200\345\244\215\344\271\240.md" "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/\346\225\260\346\215\256\345\272\223\345\237\272\347\241\200\345\244\215\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..cd0e534ccd5dfb5e72a6fd118c49e7c991278ca0 --- /dev/null +++ "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/\346\225\260\346\215\256\345\272\223\345\237\272\347\241\200\345\244\215\344\271\240.md" @@ -0,0 +1,300 @@ +## 数据库基础复习 + + + +#### 创建数据库 + +```sql +create database 数据库名称 +``` + +#### 创建表 + +```sql +create table 表名 ( +列名 数据类型 自增 主键 不为空 +id int identity(1,1) primary key not null +) +``` + +##### check约束 + +check 选择 + +```sql +userSex varchar(2) not null check(userSex='男' or userSex='女') +``` + +##### check 约束字数 + +```sql +userName varchar(10) unique not null check(len(userName)>=2) +``` + +##### 默认 + +```sql +default('湖北') +``` + +##### 唯一 + +```sql +unique +``` + +##### 外键 + +```sql +references +``` + +##### 时间 + +```sql +datetime +smalldatetime +getdate() 当前时间 +``` + + + +#### 数据插入 + +单条数据插入 + +insert (into) 表名 values (列名数据,列名数据,列名数据); + +```SQL +insert into Department values('行政部','公司主管行政工作的部门'); +``` + +多条数据快捷插入 + +insert 表名 values (列名,列名,列名,列名), + +values (列名,列名,列名,列名) + +values (列名,列名,列名,列名) + +```sql +insert Department values (), +values(), +values() +``` + +选择性插入 + +表共三列名 + +```sql +insert Department(Name,Id)values('张三',5); +``` + + + + + +#### 查询 + +基础查询 + +```sql +select * from 表名 +``` + +指定查询 + +```sql +select 列名 from 表名 +select name from Department +``` + +修改列名 + +```sql +select 列名(中文) from 表名 +select name(姓名) from Department +``` + +条件查找 + +```sql +select 查找信息 from 表名 +where 查找条件 + +--查询月薪大于等于10000 的员工信息( 单条件 ) +select * from People +where PeopleSalary>=10000 +``` + + + +多条件查找 + +```sql +select 查找信息 from 表名 +where 查找条件1 +and 查找条件2 + +--6. 查询月薪在10000-20000 之间员工信息( 多条件 ) +select * from People +where PeopleSalary between 10000 +and 20000 +``` + +排序 + +```sql +order by + +asc 顺序,desc 逆序 + +--8. 查询所有员工信息 +select * from People order by PeopleSalary + +倒序 +order by desc + +select * from People order by PeopleSalary desc + +TOP 前部分数据 + +--10. 查询工资最高的5个人的信息 +select top 5 * from People order by PeopleSalary desc +``` + + + +按列名数据长度排序 + +```sql +len() + +--9. 显示所有的员工信息,按照名字的长度进行倒序排列 +select * from People +order by len (PeopleName) desc +``` + + + +##### 模糊查询 + +关键字 like + +```sql +通配符 + +%:代表匹配0个字符、1个字符或多个字符。 +_:代表匹配有且只有1个字符。 +[]:代表匹配范围内 +[^]:代表匹配不在范围内 +``` + +查询姓刘的员工信息 + +```sql +select * from People where PeopleName like '刘%' +``` + +查询姓刘的员工,名字是2个字 + +```sql +select * from People where PeopleName like '刘-' +``` + +查询出电话号码开头138的员工信息 + +```sql +select * from People where PeoplePhone like '138%' +``` + +查询出电话号码开头138的员工信息,第4位可能是7,可能8 ,最后一个号码是5 + +```sql +select * from People where PeoplePhone like '138[7,8]%5' +``` + +查询出电话号码开头133的员工信息,第4位是2-5之间的数字 ,最后一个号码不是2和3 + +```sql +select * from People where PeoplePhone like '133[2-5]%[^2-3]' + +select * from People WHERE PeoplePhone like '133[2,3,4,5]%[^2,3]' + +select * from People where PeoplePhone like '133[2,3,4,5]%[^2,^3]' +``` + + + +##### 聚合函数 + +五大聚合函数 + +```sql +count : 列表总数量 +max :最大值 +min:最小值 +sum:和 +avg:平均值 +``` + +查询出武汉地区的员工人数,总工资,最高工资,最低工资和平均工资 + +```sql +select count(*) 总人数,sum(PeopleSalary) 总工资, +max(PeopleSalary) 最高工资, min(PeopleSalary) 最低工资, +avg(PeopleSalary) 平均工资 +``` + + + +**round函数用法** + +round(num,len,[type]) +其中: +num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取) + +```sql +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 +``` + + + +##### 分组查询 + +```sql +group by + +使用顺序 +select +from +where +group by +order by + +``` + +注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group by中最大的或最小的某一字段使用 max或min函数。