diff --git "a/27\346\233\276\351\271\217/\344\272\213\345\212\241.md" "b/27\346\233\276\351\271\217/\344\272\213\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..ac6d04500eeda9f2f38ed63c2ba44347e48b0c08 --- /dev/null +++ "b/27\346\233\276\351\271\217/\344\272\213\345\212\241.md" @@ -0,0 +1,11 @@ +# 事务 + +**事务属性:** + +- 事务有四个属性,称为 ACID 属性 - +- 原子性 - 确保与工作单元的所有操作都成功完成; 否则,事务在失败点被取消,最早的活动被移回之前的位置。这意味着要么全部成功,要么没有。 +- 一致性 - 这确保数据库在成功提交的事务上正确更改状态。 +- 兼容性 - 将数据库从一种一致状态带到另一种稳定状态可确保将数据库从一种稳定状态转移到另一种恒定状态。 +- 隔离性 - 隔离确保一个事务与其他事务不同。这使操作能够彼此透明地工作。 +- 稳定性 - 这可确保在系统故障的情况下已提交事务的结果或影响。稳定性是指一旦交易完成,在出现错误、断电等情况下仍能保持。 + diff --git "a/27\346\233\276\351\271\217/\345\217\230\351\207\217.md" "b/27\346\233\276\351\271\217/\345\217\230\351\207\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..138e51166983cade9e0ed3925895e20491a412d3 --- /dev/null +++ "b/27\346\233\276\351\271\217/\345\217\230\351\207\217.md" @@ -0,0 +1,81 @@ +### 变量 + +#### 局部变量 + +局部变量必须以标记@作为前缀 ,如@age +局部变量的使用是先声明,再赋值 +局部变量只在定义它的局部范围内有效 + +声明一个局部变量:**declare @变量名 数据类型** + +```sql +--例: + declare @id int --声明一个名为id的整型变量 + declare @name varchar(50) --声明一个可变长度为50的存放姓名的字符串变量 + +``` + +赋值: + +- set @变量名 = 值 + +- select @变量名 = 值 + +```sql +--例: + select @id = 101 + 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/27\346\233\276\351\271\217/\345\255\220\346\237\245\350\257\242.md" "b/27\346\233\276\351\271\217/\345\255\220\346\237\245\350\257\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..6bc0a04baa6143758bb7ef355989ce9a298f7096 --- /dev/null +++ "b/27\346\233\276\351\271\217/\345\255\220\346\237\245\350\257\242.md" @@ -0,0 +1,160 @@ +一 子查询 + +**子查询**是一个嵌套在**select**、**insert**、**update**、**delete**语句的其他查询中的查询。==任何允许使用表达式的地方都可以使用子查询==。子查询也称为内部查询或内部选择,而包含子部查询的语句也称为外部查询或外部选择 + +==子查询的注意事项:== + +1. 子查询语法中的小括号 + +2. 可以使用子查询的位置:**where,select,having,==from(要用as取别名)==** + +3. 不可以使用子查询的位置:group by ,order by + +4. 主查询和子查询可以不是同一张表 + +5. 一般不在子查询中使用排序(但是在top-n问题分析中必须对子查询使用排序) + +6. 一般先执行子查询,再执行主查询(相关子查询除外) + +7. 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符 + + 注意:当子查询为null值的问题 + + 子查询也可以作为赋值语句的一部分 + +### 1 使用in 和 not in完成子查询 + +in[在] not in[不在] + +**in 和 not in==通常在where子句中使用==,在 in 或 not in后接的子查询中==可以有多个值出现==** + +例:查询出所有选修课程都及格的学生的信息 + +``` +select * from StudentInfo +where stuNO in (select stuid + from stuMarks + group by stuid + having min(Score) >= 60 + ) +``` + +------ + +### 2.使用some、any、all进行查询 + +some[一些] any[任意的] all[全部] + +**在SQL查询中,`some`、`any`、`all` 后必须跟子查询** + +- **==some和any的查询功能是一样的==,where条件能够满足some和any所接的子查询中的==任意一个值==,就表示where条件成立** +- **all表示的是能够==满足==all所接的子查询中的==所有值==才成立** +- = any 等值于in + +------ + +### 3.使用exists 和not exists完成子查询 + +**exists[存在]: 如果子查询结果非空,即记录条数1条以上,则exsts(子查询)返回true 或 false**,==可配合if语句使用if exists(条件)== + +**`exists` 和 `not exists`表示存在和不存在的意思。在语句中会==判断`exists` 或 `not exists`后接的子句是否存在和是否不存在==** + +------ + +### 4.使用compute和compute by进行汇总查询 + +**compute 和 compute by子句使您得以用同一select语句即查看明细行,有查看汇总行。可以计算子组的汇总值,也可以计算整个结果集的汇总值** + +当compute不带可选的by子句时,select语句有两个结果集: ● 每个组的第一个结果集是包含选择列表信息的所有明细行 ● 第二个结果集有一行,其中包含compute子句中所指定的聚合函数的合计 + +compute子句需要下列信息: ● 可选by关键字。它基于每一列计算指定的行聚合 ● 行聚合函数名称 SUM、AVG、MIN、MAX、或 COUNT ● 要对其执行行聚函数的列 + +对结果先进行分组然后进行汇总计算时使用:compute by进行分组汇总查询 + + + +## 嵌套/子查询 + +#### 什么是子查询? + +**问题:编写T-SQL语句,查询“黄炜杰”同学的分数大于80 分的考试成绩记录?** + +``` +--实现方式1:连接查询 +--实现方式2: 子查询 +``` + +#### 子查询的特点和优势 + +1)使用灵活。 + +1. 可以成为SQL 语句的多个部分。 +2. **子查询作为查询条件使用**。 + +``` +--练习:查询学号在曾鹏前面的同学信息 +``` + +1. **子查询作为临时表使用**。 from () + +``` +--练习:查询所有学生的HTML成绩,如果学生没有成绩显示null +``` + +1. **子查询作为列使用**。 + +``` +--练习:查询所有学生的HTML成绩,如果学生没有成绩显示null +``` + +2)降低SQL 的语句的复杂度,提高SQL 语句的可读性。 + +#### 子查询 + +##### 按结果分类 + +###### 标量子查询 : + +**通常可以使用连接查询替代** + +标量子查询是指子查询返回的是**单一值**,如一个数字或一个字符串。 + +``` +--1.查询书目表(tb_bibliography)中,条码号(barcode)为"TP311.13"图书(需要在图书表中先查找"TP31L13"的ISBN号)的图书名称(name)和作者(author) + + +--2.查询借阅表(tb-record)中姓名为"邓承明"(需要在学生表中先查找"邓承明'的学号)的学生的借阅信息,显示学号(stu-num)和条码号(barcode) +``` + +###### 列子查询 + +**列子查询是指子查询返回的结果集是N行1列**,该结果通常来自对表某个字段的查询结果,带in关键字的子查询是最常用的一类子查询,在使用in关键字进行查询时,子查询语句返回的结果应该是一个数据列中的多个值,如果仅返回1个数值,则可用标量子查询代替。 + + + +###### 行子查询 + +行子查询是指子查询返回的结果集是1行N列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集。 + + + +###### 表子查询(from子查询) + +表子查询是指子查询返回是M行N列的结果集,查询语句可嵌套在FROM关 键字后,且需要定义别名。 + + + +##### 按位置分类 + +###### exists子查询 + +关键字EXISTS构造子查询时,当子查询的结果集不为空时,则EXISTS返回的结果为TRUE,外层查询语句进行查询;当子查询的结果集为空时,则EXISTS返回的结果为FALSE,外层查询语句不进行查询。 + + + +## 排序函数 + +**排序函数 OVER( [分组子句] 排序子句[DESC][ASC] )** + +**排序子句 :ORDER BY 排序列,排序列…** + diff --git "a/27\346\233\276\351\271\217/\347\264\242\345\274\225.md" "b/27\346\233\276\351\271\217/\347\264\242\345\274\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..3a68f8280bf9b4d4d0a334203972ed2200925530 --- /dev/null +++ "b/27\346\233\276\351\271\217/\347\264\242\345\274\225.md" @@ -0,0 +1,26 @@ +# 索引 + +**索引主要分为两类**: + +- **聚集索引(clustered)**:根据数据行的键值在表或视图中的排序存储这些数据行,每个表只有一个聚集索引。聚集索引是一种对磁盘上实际数据重新组织以按指定的一列或多列值排序(类似字典中的拼音索引)(物理存储顺序)。 +- **非聚集索引 (nonclusterted)**:具有独立于数据行的结构,包含非聚集索引键值,且每个键值项都有指向包含该键值的数据行的指针。(类似字典中的偏旁部首索引)(逻辑存储顺序)。 + +## 索引的创建与使用 + +- 索引的创建 + +``` +create index 索引名 on 表名(字段) +``` + +- 索引的使用 + +``` +select * from 表名 with (index=索引名) where ... +``` + +- 索引的删除 + +``` +drop index 索引名 on 表名 +``` \ No newline at end of file diff --git "a/\347\254\224\350\256\260.md" "b/27\346\233\276\351\271\217/\350\214\203\345\274\217.md" similarity index 88% rename from "\347\254\224\350\256\260.md" rename to "27\346\233\276\351\271\217/\350\214\203\345\274\217.md" index 2174880aa953b80ae3e6d4a55ae96cd1e545910f..3c51f259aba99b569de759c4b67800e1e539b1ed 100644 --- "a/\347\254\224\350\256\260.md" +++ "b/27\346\233\276\351\271\217/\350\214\203\345\274\217.md" @@ -16,6 +16,3 @@ -# 变量 - -1.定义变量:**declare @name varchar(20) 用declare定义一个名字为name的字符串类型的变量,变量前面需要加@** \ No newline at end of file diff --git "a/27\346\233\276\351\271\217/\350\247\206\345\233\276.md" "b/27\346\233\276\351\271\217/\350\247\206\345\233\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..98eeeac06112ce2013a669863365dac095c77673 --- /dev/null +++ "b/27\346\233\276\351\271\217/\350\247\206\345\233\276.md" @@ -0,0 +1,73 @@ +# 视图 + +## 图 + +#### 关系(Relations) + +三种类型关系: + +- 表(Table)--基表,存储关系(Base Tables,Sorted relations) +- 视图(Views)--虚拟关系(Virtual relations)(不是物理存在的是虚拟的) +- 临时结果(Temporary results)--用于构建**子查询**的结果 + +### 视图的作用 + +- 视图能够简化用户的操作 +- 视图使用户能以多种角度看待同一数据 +- 视图对重构数据库提供了一定的逻辑独立性 +- 视图能够对机密数据提供安全保护 + +### 定义视图 + +##### 创建视图 + +``` +create view 视图名 +as +select */(字段1,字段2,...) from 表名 +with check option +``` + +##### 使用视图 + +``` +select * from 视图名 +``` + +##### 删除视图 + +``` +drop view 视图名 +``` + +##### 常见的视图形式 + +- 行列子集视图:去掉了某些行和某些列,但保留了主键 + +``` +--建立信息学院学生的视图 +create view V_StuMajor(学号,姓名,学院,专业) +as +(select stu_num ,name ,school ,major from tb_student where school='信息学院') +``` + +- with check option 视图 + +``` +--建立信息学院学生的视图,并要求通过该视图进行的更新操作只涉及信息学院的学生 +create view V_StuMajor(学号,姓名,学院,专业) +as +(select stu_num ,name ,school ,major from tb_student where school='信息学院') +with check option +``` + +- 带表达式的视图 + +``` +--定义一个反映学生年龄的视图 +create view V_StuAge(学号,姓名,年龄,学院,专业) +as +(select stu_num ,name ,year(getdate())-year(birth),school,major from tb_student) +select * from V_StuAge +``` + diff --git "a/27\346\233\276\351\271\217/\351\200\273\350\276\221\346\216\247\345\210\266\350\257\255\345\217\245.md" "b/27\346\233\276\351\271\217/\351\200\273\350\276\221\346\216\247\345\210\266\350\257\255\345\217\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..c9038630ff790035fdce1c5c1987d68fc4c925ad --- /dev/null +++ "b/27\346\233\276\351\271\217/\351\200\273\350\276\221\346\216\247\345\210\266\350\257\255\345\217\245.md" @@ -0,0 +1,29 @@ +## 逻辑控制语句 + +### if条件分支 + +``` +if 条件 +begin +语句 +end +``` + +### 循环控制语句 + +``` +while (条件) +begin +break(跳出循环)、continue(跳出当前循环) +end +``` + +#### 逻辑控制语句 + +``` +case +when 条件 then 输出 +else +end +``` +