优化Sql_Server总结
- 格式:docx
- 大小:285.17 KB
- 文档页数:30
Accp 6.0APTECH ACCP6.0优化MySchool数据库设计数据库设计章节总结Mr.Lei2013/5/21目录数据库的设计 (3)1.数据库设计 (3)1.1数据库设计的步骤 (3)✧收集信息 (3)✧标识实体 (3)✧标识实体需要存储的详细信息 (3)✧标识实体之间的关系 (3)✧绘制E-R 图 (3)✧实体-关系模型 (3)1.2实体关系图 (4)图例 (4)1.2.1关系数据库模式 (4)1.3绘制数据库模型图 (4)图例 (4)1.4数据规范化 (5)1.4.1为什么要使用数据规范化 (5)1.4.2规范设计 (5)2.数据库的实现 (6)2.1T-SQL语句回顾 (6)2.2使用SQL语句创建和删除数据库 (6)2.2.1创建数据库 (6)2.2.2删除数据库 (7)2.2.3删除表 (8)2.3使用SQL语句创建和删除约束 (8)2.3.1数据完整性 (8)2.3.2常用的约束类型 (9)2.3.3添加约束 (9)2.3.4删除约束 (10)2.4SQL Server 文档 (10)3.SQL编程 (11)3.1变量 (11)3.1.1局部变量 (11)3.1.2全局变量 (11)3.2输出语句 (12)3.2.1Print 语句和SELECT 语句 (12)3.2.2数据类型转换 (12)3.3逻辑控制语句 (13)3.4逻辑运算符 (13)3.4.1基本逻辑运算符的注意事项 (13)3.4.2常用的逻辑语句有: (13)3.5批处理 (15)4.高级查询 (16)4.1子查询 (16)4.1.1简单子查询 (16)4.1.2经验 (16)4.2In 和 not in 子查询 (16)4.3Exists 和not Exists子查询 (17)4.3.1Exists 子查询 (17)4.3.2Not Exists 子查询 (17)4.3.3子查询注意事项 (17)4.4嵌套在SELECT语句的SELECT子句中的子查询语句如下 (17)4.5嵌套在SELECT语句的FROM子句中的子查询语句如下 (17)4.6嵌套在父查询SELECT语句的子查询可包括一下几类 (18)4.6.1在子查询select 子句中不能出现text, ntext 或image 数据类型的列 (18)4.6.2只出现在子查询中而没有出现在父查询中的表不能包含在输出列中 (18)5.我的租房网 (18)5.1知识梳理 (18)5.2综合练习 (18)数据库的设计1.数据库设计数据库设计就是将数据库中的数据实体以及这些数据实体之间关系, 进行规划和结构化的过程良好的数据库: 效率高, 便于进一步扩展, 使得应用程序的开发变得容易1.1数据库设计的步骤✧收集信息✧标识实体✧标识实体需要存储的详细信息✧标识实体之间的关系✧绘制E-R 图✧实体-关系模型实体对应我们表中的一行数据属性可以理解为实体的特征联系两个或者多个实体之间的关联关系映射基数有1对1, 一对多, 多对一, 多对多几种关系1.2实体关系图图例(1)矩形表示实体集,(2)椭圆表示属性(3)菱形表示联系集(4)直线用来连接属性和实体集, 也用来连接实体集和联系集1.2.1 关系数据库模式一个关系描述为属性名的集合称为关系模式,1.3绘制数据库模型图图例新建数据库模型图添加实体添加数据列及相应的属性添加实体之间的映射关系1.4数据规范化1.4.1 为什么要使用数据规范化(1)设计问题(2)信息重复(3)跟新异常(4)插入异常(5)删除异常(丢失有用的信息)1.4.2 规范设计1.4.2.1 第一范式确保每列的原子性1.4.2.2 第二范式在第一范式的基础上更近一层,如果一个关系满足第一范式, 并且除了主键以外的其他列都依赖于该主键, 则满足第二范式1.4.2.3 第三范式如果一个关系满足第二范式, 并且除了主键以外的其他列都只依赖于主键列, 列和列之间不存在相互依赖的关系, 则满足第三范式1.4.2.4 实体-规范化和性能的关系在实际的数据库设计中, 既要考虑三大范式, 避免数据的冗余和各种数据操作异常,又要考虑数据访问性能, 有时为了减少表间连接,提高数据库的访问性能,允许适当的数据冗余列数据库的实现2.数据库的实现2.1T-SQL语句回顾添加数据Insert into 表名(列名列表) values(值列表)例子:Insert into Student(StudentNo,StudentName) values(‘S1001’,’雷石军’) 修改数据Update 表名set 列1=值1,列2=值2,…. WHERE (条件)例子:Update Student set StudentName=’易显双’ where StudentName=’雷石军’ 查询数据Select 列名列表from 表名WHERE (条件) order by 列名例子:Select * from Student where StudentNo=’S1001’Order by StudentNo删除数据Delete from 表名where (条件)例子:Delete from Student where StudentNo=’S1001’2.2使用SQL语句创建和删除数据库2.2.1 创建数据库✧语法:C reate database 数据库名O n primary(<数据文件参数> [,…n] [<文件组参数>])Log on(<日志文件参数>)✧参数:文件具体参数(Name=逻辑文件名,Filename =物理文件名,Size=初始大小,Maxsize= 最大大小,FileGrowth=增长量[….])文件组参数:FileGroup文件组名<文件参数> [,….N]例子2.2.2 删除数据库语法:Drop database 数据库名注意1.使用use master 设置当前数据库为master 以确保可以访问sysdatabases 表判断是否存在数据库If exists(select * from sysydatabases where name=数据库名)2.3使用SQL语句创建和删除表2.3.1 创建表语法:Create table 表名(列1 数据类型列的特征,列2 数据类型列的特征,………..)例子:Create table Student(StudentNointidentity(1,1) primary key not null,StudentNamevarchar(20) not null,………..)其中, 列的特征包括是否为空(null) , 是否标识列( Identity(自动编号) ),是否有默认值以及是否为主键等.2.3.2 删除表语法:Drop table 表名例子:Drop table Student经验:在删除表之前, 请先确认表中是否有数据2.4使用SQL语句创建和删除约束2.4.1 数据完整性实体完整性唯一确定表中一行记录, 由主键保证, 唯一约束保证域完整性表中特定列数据的有效性, 以确保不会输入无效的数值, 由约束保证引用完整性插入或删除记录时, 维护表之间定义的关系,由主外键保证SQL server 将防止用户执行下列操作✓在主表中没有关联记录的情况下在从表中添加或跟新记录✓在主表中更改数值, 使得从表中出现孤立的记录✓在有匹配记录的情况中删除主表中的记录自定义完整性定义不属于以上三种完整性的特定业务规则2.4.2 常用的约束类型✓主键约束( Primary key Constraint) 要求主键列数据唯一,并且不允许为空✓非空约束( not null ) 要求列不能存在空值,✓唯一约束( Unique Constraint) 要求该列的值必须唯一,允许为空,但只能出现一个空值✓检查约束( Check Constraint ) 某列取值范围限制,格式限制等✓默认约束( Default Constraint ) 某列的默认值✓外键约束( Foreign Key Constraint ) 用于两表之间建立关系, 需要指定引用主表的哪一列2.4.3 添加约束语法:Alter table 表名Add constraint 约束名约束类型具体的约束说明例子:Alter table StudentAdd constraint UQ_StudentName Unique(StudentName)注意:约束名命名规则采用”约束类型_约束列”2.4.4 删除约束语法:Alter table 表名Drop constraint 约束名例子:Alter table StudetDrop constraint UQ_StudentName2.5SQL Server 文档学会灵活的使用sql server 文档会带来很多帮助的用法为:选中谋关键字, 在按F1进入帮助页, 或者直接按F1进入帮助页, 再查找需要的帮助信息SQL编程3.SQL编程3.1变量变量是可以存储数据值的对象3.1.1 局部变量用户自己定义的变量, 名称必须以标记@作为前缀3.1.1.1 声明语法:D eclare @variable_nameDataType其中variable_name 为局部变量名称, DataType为数据类型例:Declare @name varchar(8) –声明存放姓名的变量name , 最多可存储八个字符3.1.1.2 赋值方法有两种,使用set 或select语法:Set @variable_name = ‘雷石军’或Select @variable_name=StudentName from Studentwhere StudentNo=’S1001’表3.1 set语句与select的区别3.1.2 全局变量使用@@作为前缀不可操作, 只读, 系统自带3.2输出语句3.2.1 Print 语句和SELECT 语句语法:Print 局部变量或字符串例子:Print @name 或者print ‘雷石军’语法:Select 局部变量as 自定义列名其中,使用select 语句输出数据是查询语句的特殊应用例子:Select @name as 姓名3.2.2 数据类型转换CAST() 和CONVERT() 函数语法:Cast (表达式as 数据类型)例子:Declar @numint=20,Print Cast (@num as varchar(5))语法:Convert (数据类型[(长度)], 表达式[(,样式)] )例子:Declar @numint=20,Print Convert (varchar(5), getdate(), 121)--121代表日期样式区别Convert() 函数与cast()函数的不同之处是, 在将日期时间类型/浮点类型的数据转换为字符串数据时, convert() 函数可以通过第三个参数指定转换后的字符样式,不同的样式使转换后的字符数据的显示格式不同, convert() 函数的第3个参数可以省略.3.3逻辑控制语句3.4逻辑运算符3.4.1 基本逻辑运算符的注意事项要记的,在SQL中,我们的等值判断:不能用“==“,只能用“=”不等于有:<>或!=如果给表达式取反不能用!,只能用not3.4.2 常用的逻辑语句有:✧顺序结构控制语句: begin-end 语句✧分支结构控制语句: if-else语句和case-end 语句✧循环结构控制语句: while 语句3.4.2.1 BENGIN-END语句语法:Begin语句或语句块End说明:这里的begin-end 等同于我们JAVA和c#里的{} 符号3.4.2.2 IF-ELSE条件语句语法If(条件)语句或语句块1Else语句或语句块2说明:与JAVA和C# 中的if-else 类似例子:Declare @numint =10,If(@num=10)Print ‘大鑫是煞笔’ElsePrint ‘大鑫还是煞笔’3.4.2.3 WHILE 循环语句语法:While(条件)Begin语句或语句块[break | continue ]End说明:与JAVA和C#中的while类似例子:While(@num>0)BeginPrint ‘大鑫他就是个煞笔’@num=@num-1;End3.4.2.4 CASE 多分支语句语法:CaseWhen 条件1 then 结果1When 条件2 then 结果2………[Else 其他结果]End说明:Case 语句表示如果”条件1”成立, 则执行”结果1” 其余类推, 如果when 的条件都不匹配, 则执行else后面的结果..例子:Select ‘骂死大鑫’=caseWhen StudenNo=0 then ‘大鑫是煞笔’When StudenNo=1 then ‘大鑫也是煞笔’Else ‘煞笔’End From Student3.5批处理GO指令我们在sql server 中使用go 来将sql语句分批次执行Go关键字标志批处理的结束高级查询4.高级查询4.1子查询4.1.1 简单子查询子查询就是,在一个查询中包括另外一个查询,就是子查询。