diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.5.txt" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.5.txt" new file mode 100644 index 0000000000000000000000000000000000000000..8a5d18b0c339cfb407f82bb93edddd3d2ab4deca --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.5.txt" @@ -0,0 +1,85 @@ +create database Gc +go +use gc +go +--工程表 +create table Gcinfo +( +Gcid varchar(10) primary key, +Gcname varchar(20), +) +--职工表 +create table Zginfo +( +Zgid int primary key, +Zgname varchar(20), + +) +--职务表 +create table Zwinfo +( +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 diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\345\255\246\346\240\2411.png" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\345\255\246\346\240\2411.png" new file mode 100644 index 0000000000000000000000000000000000000000..cd9b758e5ab53eb6b8b072f8766754afb7bf7079 Binary files /dev/null and "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\345\255\246\346\240\2411.png" differ diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\345\255\246\346\240\2412.png" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\345\255\246\346\240\2412.png" new file mode 100644 index 0000000000000000000000000000000000000000..422620a1f530ba5ecbfc978859f6ad35cac8fd0e Binary files /dev/null and "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\345\255\246\346\240\2412.png" differ diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\351\223\266\350\241\2141.png" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\351\223\266\350\241\2141.png" new file mode 100644 index 0000000000000000000000000000000000000000..d0334a29b20d28712b537b6426a514e518ccdc48 Binary files /dev/null and "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\351\223\266\350\241\2141.png" differ diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\351\223\266\350\241\2142.png" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\351\223\266\350\241\2142.png" new file mode 100644 index 0000000000000000000000000000000000000000..e65c3fef7f0f100166441bc1d26b91b8367d93bd Binary files /dev/null and "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/E-R/\351\223\266\350\241\2142.png" differ diff --git "a/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/8.31 \347\254\254\344\270\200\346\254\241\350\257\276.md" "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/8.31 \347\254\254\344\270\200\346\254\241\350\257\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..ee47a9a18f7fe1d4e370ecfd64ff01c255595182 --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/8.31 \347\254\254\344\270\200\346\254\241\350\257\276.md" @@ -0,0 +1,118 @@ +## 数据库 + +## 基本概念 + +### 数据Date + +*一切表示(有意义的)信息的文字或者符号* + +### 数据库管路系统DBMS + +*介于用户和操作系统之间的一个软件* + +### 数据库 + +- *存储数据的仓库就叫数据库* + +### 数据库系统 + +- *有数据库、数据管理系统的数据库管理员一起组成的用于数据的储存、管理、维护等的一整套系统* + +## 基本组成 + +**数据库** + +- **表**: *关系* +- **行**:*记录* +- **列**:*也叫属性,字段* + +## 数据库的分类 + +### 关系型数据库 + +- *SqlServer* +- *MySql* +- *MariaDb* +- *PostgreSQL*:世界上功能最强大的数据库 +- *Oracle*(甲骨文) +- *达梦* +- *金仓* +- *Sqllite*:桌面型数据库 + +### 非关系型数据库 + +- *MongoDb*:文档数据库,最像关系型数据库的非关系型数据库 +- *Redis*:键值对数据库,内存数据库,速度极快,多用于高并发,高缓存场景 +- *Hbase*:列储存型数据库,多用于大数据场景 + +## 结构化查询语言SQL + +### 基础语句 + +#### 查询 + +select*from xxx + +##### 查询子句 + +*平均值* avg、*最大值* max、*最小值 * min、*总和* sum、*计数* count、*类似于,像* like、前面几条记录 top、*位于什么区间* between...and...、*去重* distinct + +##### 投影查询 + +- *选择返回的数据集的字段和集合* +- select id.userName from xxxx where yyy=zzz + + +##### 多表查询 + +*一次查询多个表* + +select a.*.b. from a.b where a.id = b.id + +##### 连接查询 + +*通过join关键词从各表中获取信息* + +###### 内连接 + +##### **inner join** + +###### 外连接 + +##### **outer join** + +*left outer join* 、*right outer join* 、*full outer join* + +##### 子查询 + +*一个查询从另外一个或若干个查询中获取数据* + +select * from (select * from xxx) + +##### 合并查询 + +*union* 会去重、*union all* 不去重 + +##### **要求** + +合并的若干个集合字段数一直,并且每个字段的类型兼容 + +**形式** + +select id.userName from a1 union select id.userName from a2 + +##### 分页查询 + +#### 更新 + + update xxx set yyy = a1,zzz = b2 where id = 1 + +#### 插入 + + insert into xxx() values(),() + +#### 删除 + + delect xxx where id =1 + +#### SqlServer使用的是微软扩展的语句T-SQL \ No newline at end of file diff --git "a/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.1 \346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.1 \346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..9cfd81f2ac840fa61389b115804ada8c6a14736e --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.1 \346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.md" @@ -0,0 +1,64 @@ +#### + +# 数据库设计 + +### 信息收集 + +- 应用程序的业务有其针对性,数据库必然存储相关的数据 + +- 该阶段的成果从很大程度上决定了将来数据库存储信息的数据结构和容量 + +- 明确哪些问题必须关心,哪些问题不用去关心 + + ### 建模 + + 和面向对象的程序设计一样,在创建数据库之前,也是设计过程的初级阶段,我们需要为后面的主体工作做充分的准备,这些准备包括 + + - 与数据库相关的将来的应用程序的需求分析,主要是信息收集 + - 将这些信息归纳并用图形符号进行标识 + +#### E-R图转换为关系模型 + +- 1对1: + - 可以转换为一个独立的关系模式 + - 可以与任意一端对应的关系模式合并,***在任意一方加入对方的主键*(主码)变为其外键(外码),** + - **并加入联系本身的属性**。 +- 1对n,n对1: + - 可以转换为一个独立的关系模式 + - 可以与n端对应的关系模式合并**,将1方的主键加入n方作为其外键**,**并将联系的属性也加入n方** +- m对n: + - 可以转换为一个独立的关系模式(新建一张关系表)**,将联系双方的主键(主码)加入其中,并将联系的属性也加入其中。** + + + +### **数据规范化** + +仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构。 + +Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是: + +- 第一范式(1st NF -First Normal Fromate) +- 第二范式(2nd NF-Second Normal Fromate) +- 第三范式(3rd NF- Third Normal Fromate) + +#### 第一范式 (1st NF) + +- 第一范式的目标是**确保每列的原子性** +- 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF) + +#### 第二范式 (2nd NF) + +如果一个关系满足第一范式,并且除了主键以外的其他列都依赖于该主键,则满足第二范式(2NF) + +#### 第三范式 (3rd NF) + +如果一个关系满足第二范式,并且除了主键以外的其他列都依赖,且直接于主键列,则满足第三范式(3NF) + +订单表(n):订单编号,订购日期,顾客编号 + +顾客表(1):顾客编号,顾客姓名 + +1-->1 + +1--n + diff --git "a/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.5 \345\217\230\351\207\217.md" "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.5 \345\217\230\351\207\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..cb25128c387787d3883403e01a7a8ea0ee11e99e --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.5 \345\217\230\351\207\217.md" @@ -0,0 +1,83 @@ +## 变量与逻辑控制 + +- 掌握变量的定义和使用 +- 掌握输出语句 +- 掌握逻辑控制语句 +- 理解批处理的概念 + +### 变量 + +#### 局部变量 + +局部变量必须以标记@作为前缀 ,如@age +局部变量的使用是先声明,再赋值 +局部变量只在定义它的局部范围内有效 + + + +声明一个局部变量:**declare @变量名 数据类型** + +```sql +--例: + declare @id int --声明一个名为id的整型变量 + declare @name varchar(50) --声明一个可变长度为50的存放姓名的字符串变量 + +``` + +赋值: + +- set @变量名 = 值 + +- select @变量名 = 值 + +```sql +--例: + select @id = 1001 + set @name = '周飘' +``` + +set与select赋值的区别: + +set赋值给变量指定的值,select一般用于表中查询出的数据赋值给变量,如果查询结果有多条,取最后一条赋值给变量 + + + +#### 全局变量 + +全局变量必须以标记@@作为前缀,如@@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 +``` + + + +#### 使用convert函数 + +​ 由于PRINT 命令向客户端返回一个结果的字符串的信息。如果变量值不是字符串的话必须先用数据类型转换函数 CONVERT 将其转换为字符串。 + +```sql +--显示自动编号 +print '当前自动编号的值:' + convert(varchar(10),@@IDENTITY) +``` + diff --git "a/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.6 \351\200\273\350\276\221\346\216\247\345\210\266.md" "b/05 \351\273\204\347\202\234\346\235\260/\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 0000000000000000000000000000000000000000..ec995c58f962c2151ea59e845edba6a7c9710161 --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.6 \351\200\273\350\276\221\346\216\247\345\210\266.md" @@ -0,0 +1,72 @@ +## 逻辑控制语句 + +#### 1、if语句 + +**代码结构:** + +if(判断条件) { +执行代码 +} + +#### 2、if…else语句 + +**代码结构:** + +if(判断条件) { +执行代码 +}else{ +执行代码 +} + +#### 3、if…else if…else语句 + +**代码结构:** + +if(判断条件1) { +执行代码1 +}else if(判断条件2) { +执行代码2 +}else{ +执行代码3 +} + +### 总结: + +- if语句适合但条件判断;if…else语句适用于互斥条件判断;if…else if…else语句适用于多条件互斥判断 + +- 并列的if语句,每个判断条件都要去判断;if…else if…else语句只要有一个条件满足,其他不会判断 +- 在程序设计中,当出现每个条件都需要判断时,我们选择并列if语句;当出现只要一个结果时,选择if…else if…else语句 + +#### 4、switch…case语句 + +**代码结构:** +switch(表达式){ +**case 常量表达式1:** +语句1 +break; +**case 常量表达式2:** +语句2 +break; +**case 常量表达式3:** +语句3 +break; +… +**case 常量表达式n:** +语句n +break; +default: 语句n+1 +} + +**switch语句的注意事项:** + +- 用作判断的表达式必须是符合byte、short、int、char类型的表达式,而不能使用double、long、boolean,在JDK1.7以前也不能使用字符串,但是在JDK1.7以后可以使用字符串,但是不建议使用 +- switch表达式依次和每个case子句中的常量值相比较。如果匹配成功,则执行case子句中常量值后的语句,直到break语句为止 +- case子句中的常量值不能相同,否则会报错 +- default子句可以省略 + +#### 5、逻辑控制语句的关联和区别 + +- if可以用于判断数值,也可以判断区间,只要运算结果是boolean类型,都可以 进行判断;switch用于对固定的几个值,进行判断。判断的值的类型有限 +- if的组合更灵活,可以依据不同的情况进行嵌套;switch结构清晰,但不够灵活 +- if不需要通过流程控制关键字进行控制;switch必须以流程控关键字来控制 +- if判断条件多元化,可以通过逻辑运算符来组合;switch只能判断常量 \ No newline at end of file