SQL Server 2008编程入门经典

3.1  基本sql语句

 1)如果在查询中未指定查询结果的排列顺序,则有sql server 决定数据的输出顺序,通常是按照表的物理储存顺序,或者用于查找数据的索引的顺序;

 2)除了count(*),以其他任意形式使用的count函数都会自动忽略NULL值,其他聚合函数(SUM,AVG,MAX,MIN等同理)。

     比如5行数据中有1行为NULL,count(*)统计出来的总行数为5,count(’列名‘)统计出来的是4

 

4.7 联合

 1)UNION查询返回的结果默认为distance,即不返回重复的行,若需要返回所有行,需增加使用ALL关键字,即为 union all;

 

5.2.2

exec sp_help tb_test; 调用了一个储存过程,查看tb_test的表信息;

不带exec时也能执行,但限制只能作为第一个语句;

 

5.3.2

1)在已存在的表中添加一列not null的列,需考虑原来已经是null的数据。可以为改列设置设置一个默认值default;

2)sql server中无法在表的特定位置添加列,新增的列都会在表的最后;

3)添加列对视图的影响:即使视图是用select * 作为基本语句构建的,在重新构造视图前,新增列不会出现在视图中,

只能重建视图或者用alter view重新构造视图。因为视图的的列名称是在视图创建时进行解析的。

 

6.3.2

1)添加了外键的表中插入新记录时,外键的列要么与被引用表中的被引用列的某条记录匹配,要么外键的值设为null;

2)外键可以引用自身表中的列,但表中至少有一行数据,否则插入第一行时没有值可以引用,或者外键约束的列设置为允许NULL;

3)为了使外键约束的记录能在 当被引用列的值被改变或被删除 时自动更新或删除,需要设置 级联;

4)被外键引用的列必须定义一个主键或唯一约束;

 

6.3.3 唯一约束

唯一约束 与主键类似,都要求表中指定的列有唯一值,但唯一约束可以允许列中有且仅有一个NULL,而主键不允许有NULL;

 

6.4 check约束

check约束可以与一个列关联,也可以与一个表关联;

可以使用与where语句一样的规则来定义check约束;

与其他选择(规则和触发器),check约束的速度更快;

 

6.6 禁用约束

1)sql server 只允许禁用外键约束和check约束;

2)创建约束时可以忽略表中原有的不符合约束的数据,方法是在alter table语句中加入WITH NOCHECK;(alter table tb_test with nocheck .....)

 

6.7规则和默认值

规则与默认值是实际存在的对象,需要将其绑定到指定表的指定列才会起作用;而约束是在建表时定义的,不会单独存在;

规则类似于check约束,但规则不能联合多列进行检查,每列都是独立的;

默认值类似于Default约束;

 

7.1 嵌套查询

使用连接(join)的方式进行查询,性能优于嵌套的select查询;

 

7.2关联子查询

能高效得从表中获取特定数据;

 

关联子查询中内部查询根据外部查询的信息运行:

1)外部查询获得一个记录, 将记录传给内部查询;

2)内部查询根据传递的值执行;

3)内部查询将查询结果传回外部查询,外部查询再根据该结果完成一次处理;

4)外部查询获得新一个记录,重复1到4;

例子:

 

select so1.OrderDate,so1.CustomerID, so1.SalesOrderID from Sales.SalesOrderHeader so1 where so1.OrderDate= 
(select min(so2.OrderDate) from Sales.SalesOrderHeader so2 where so1.CustomerID = so2.CustomerID ) 

对于外部查询返回的每行数据,内部查询都会执行,条件是限制其结果集与
CustomerID匹配。Min() 调用将结果集限制为感兴趣的一行数据。

如果有500位客户下达了订单,内部查询将执行500次——so1中的每个记录中的CustomerID执行一次,外部查询然后根据so1.OrderDate进行数据筛选

7.4 一般来说,EXISTS关键字的查询会比join,以及派生表的查询要快,因为只要判断有存在就会返回结果,不必继续搜索;

7.5 CAST和CONVERT进行数据类型转换

大部分时候两者是功能相同的;

CAST:是ANSI兼容的;CONVERT进行日期转换可以控制日期格式 ;

 

连接,嵌套子查询,关联子查询,派生表,EXISTS, 预查询(声明一个变量,将需要的值赋给这个变量)

 

8、第一范式:消除重复数据组合保证数据原子性;

     第二范式:每列必须依赖整个键;

    第三范式:任何列不能依赖于非键列,不可以有派生数据;

一、二、三范式依次递进,均以前一范式为基础;

 

9.2.2 广义上将SQL SERVER检索数据的方式有:使用表扫描;使用索引;

1)表扫描是从表的物理起点浏览表的每一行,直到数据结尾;

2)使用索引时sqlserver将在B-平衡树中导航至与条件匹配的数据位置,并提取相应的数据;

    与表扫描的区别在于,使用索引时数据是排序的,所以查询引擎知道何时到达正在查找的范围的下界,从而结束查询或者转至其他数据范围;

3)索引分为:(物理数据在不同的索引中的排列顺序是不同的,而且sqlserver通过索引到达数据的方式也是不同的)

    1、群集索引:一个表只能有一个群集索引;群集索引的叶级是实际数据,也就是说数据重新排序,按照索引排列条件声明的相同物理顺序存储;

   2、非群集索引(又可细分为堆上的非群集索引和群集表上的非群集索引)。群集表是具有群集索引的表;堆没有群集索引的任意表;

       堆上的非群集索引:叶级不是数据,而是一个指向数据的指针;这意味着数据的物理排序是不确定的,需要通过指针才能找到数据,

                                检索多个数据时需要在硬盘访问多个页,会增加很多系统开销,而群集索引则不需要;

       群集表上的非群集索引:在叶级找到的是群集键,利用群集索引进行查找;这意味中需要多次利用群集索引进行查找;

9.3.3当向表中添加主键约束或者唯一约束,会隐式地创建索引;

 

9.4.1 索引,特别是非群集索引,只有在索引中具有相当高的选择性时才是有益的。选择性是指列中唯一值的百分比。但对群集索引几乎没什么影响;

 

9.4.2 索引在读取数据时可提高性能,但在数据发生修改是,索引也必然做出相应更新,导致花费的增加;

一旦创建了索引,改变它的唯一方法是删除并重建它

 

10.视图

1、减少用户查询时的复杂性;

2、防止敏感数据被查询;

3、给数据库添加额外的索引以提高性能;

默认情况下,视图跟在命令行执行命令一样,并不会有预先优化的过程。使用视图进行查询,会比直接查询多一层开销,

一般会比直接运行内部的select语句会慢;

 

10.10视图的索引

在视图上建立索引,为提取视图背后的信息提供了一种更快的方法,但同时也会导致底层表的insert,update,delete的执行速度变慢;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介 《SQL Server 2008编程入门经典(第3版)》由浅入深逐步介绍了SQL Server数据库的高级主题,重点讨论了SQL Server 2008的特殊功能以及与其他编程环境的不同之处。作者Robert Vieria是Microsoft SQLServer方面的权威,他采用通俗易懂的方法揭示了SQL Server-2008核心组件的重要更改。 《SQL Server 2008编程入门经典(第3版)》首先概述了数据库设计的概念,介绍了如何用SQL Setver 2008实现这些基本概念。然后,讲述了RDBMS(关系数据库管理系统)的功能和它在开发系统架构方面的优势。SQL Server 2008的新增内容和更改包括:DATE和TIME数据类型、hierarchyID数据类型、MERGE命令和多行插入,以及递归查询等。《SQL Server 2008编程入门经典(第3版)》旨在帮助您快速地掌握Microsoft SQL Selwer2008编程技术。 编辑推荐 《SQL Server 2008编程入门经典(第3版)》主要内容 RDBMS如何存储、管理和检索数据 创建和修改表的方法 数据库范式的多种形式 编写脚本和使用存储过程的技巧 索引的优缺点 锁和死锁对系统性能的各种影响 理解触发器及其使用方式 《SQL Server 2008编程入门经典(第3版)》读者对象 《SQL Server 2008编程入门经典(第3版)》适合于希望全面了解数据库设计概念和学习SQL的开发人员。读者具有数据库方面的基础知识有助于更好地理解《SQL Server 2008编程入门经典(第3版)》的内容。 作者简介 作者:(美国)韦拉(Rovert Vieria) 译者:孙皓 马煜 合著者:杨大川 韦拉(Robert Vieria),是畅销书作者。他从1 980年开始深入学习计算技术,从构建和修复计算机软件包,到通过Z80、Basic以及6502汇编语言进行编程。1 983年,Robert开始攻读计算机信息系统的学位,随后转而研究“PC故障”并开始使用数据库语言(从dBase到SQL Server)进行编程,于1990年获得商业管理学位。此外,他还获得了CMA、MCSD、MCT以及MCDBA等认证。Robert目前是俄勒冈州波兰特市的Huron Consuiting Group的Stockarnp事务所的DBA团队领导人,偶尔也会在数据库开发、商业智能和其他主题方面发表演讲。 其他责任者简介: 杨大川,毕业于美国纽约州立大学布法罗分校计算机系,曾担任美国硅谷Annuncio Software等公司的首席工程师,归国后,他于2003年创办了北京迈思奇科技有限公司并担任技术总监,为国内外多家大中型企业提供商业智能咨询和项目实施服务,并逐渐从高新技术外包开发走向了自主知识产权产品的研发道路。他曾被誉为微软全球最有价值专家(MVP);2008年荣获“中关村年度优秀创业留学人员”称号:现担任中国科学院软件学院的兼职教授。 目录 第1章 RDBMS基础:SQLServer数据库的构成 1.1 数据库对象概述 1.1.1 数据库对象 1.1.2 事务日志 1.1.3 最基本的数据库对象:表 1.1.4 文件组 1.1.5 数据库关系图 1.1.6 视图 1.1.7 存储过程 1.1.8 用户自定义函数 1.1.9 用户和角色 1.1.10 规则 1.1.11 默认值 1.1.12 用户自定义数据类型 1.1.13 全文目录 1.2 SQL Server数据类型 1.3 SQL Server对象标识符 1.3.1 需要命名的对象 1.3.2 命名规则 1.4 本章小结 第2章 SQL Server管理工具 2.1 联机丛书 2.2 SQLServer配置管理器 2.2.1 服务管理 2.2.2 网络配置 2.2.3 协议 2.2.4 客户端 2.3 SQLServer Management Studio 2.3.1 启动Management Studio 2.3.2 “查询”窗口 2.4 SQL Server集成服务(SSIS) 2.5 BulkCopy Program(bcp) 2.6 SQL ServerProfiler 2.7 sqlcmd 2.8 Power Shell 2.9 本章小结 第3章 T-SQL基本语句 3.1 基本SELECT语句 3.1.1 SELECT语句与FROM子句 3.1.2 WHERE子句 3.1.3 ORDERBY子句 3.1.4 使用GROUPBY子句聚合数据 3.1.5 使用HAVING子句给分组设置条件 3.1.6 使用FORXML子句输出XML 3.1.7 通过OPTION子句利用提示 3.1.8 DISTINCT和ALL谓词 3.2 使用INSERT语句添加数据 3.2.1 多行插入 3.2.2 INSERTINTOSELECT语句 3.3 用UPDATE语句更改数据 3.4 DELETE语句 3.5 本章小结 3.6 练习 第4章 连接 4.1 连接 4.2 内部连接 4.3 外部连接 4.3.1 简单的外部连接 4.3.2 处理更复杂的外部连接 4.4 完全连接 4.5 交叉连接 4.6 JOIN语句的早期语法结构 4.6.1 内部连接的早期语法结构 4.6.2 外部连接的早期语法结构 4.6.3 交叉连接的早期语法结构 4.7 联合 4.8 本章小结 4.9 练习 第5章 创建和修改数据表 5.1 SQLserver中的对象名 5.1.1 模式名 5.1.2 数据库名 5.1.3 通过服务器命名 5.1.4 回顾默认值 5.2 CReATE语句 5.2.1 CREATEDATAASE 5.2.2 CREATETABLE 5.3 ALTER语句 5.3.1 AITERDATABASE 5.3.2 ALTERTABLE 5.4 DROP语句 5.5 使用GUI工具 5.5.1 使用ManagementStudio创建数据库 5.5.2 回到代码:使用MariagementStudio创建脚本的基础知识 5.6 本章小结 5.7 练习 第6章 约束 6.1 约束的类型 6.1.1 域约束 6.1.2 实体约束 6.1.3 参照完整性约束 6.2 约束命名 6.3 键约束 6.3.1 主键约束 6.3.2 外键约束 6.3.3 唯一约束 6.4 CHECK约束 6.5 DEFAuLT约束 6.5.1 在cREATETABLE语句中定义DEFAULT约束 6.5.2 在已存在的表中添加DEFAUIT约束 6.6 禁用约束 6.6.1 在创建约束时忽略无效的数据 6.6.2 临时禁用已存在的约束 6.7 规则和默认值 6.7.1 规则 6.7.2 默认值 6.7.3 确定哪个表和数据类型使用给定的规则或默认值 6.8 用于实现数据完整性的触发器 6.9 如何选择 6.1 0本章小结 第7章 更复杂的查询 7.1 子查询的概念 7.2 关联子查询 7.2.1 关联子查询的工作原理 7.2.2 在WHERE子句中的关联子查询 7.2.3 处理NULL数据——ISNULL函数 7.3 派生表 7.4 EXISTS运算符 7.5 混合数据类型:CAST和CONVERT 7.6 MERGE命令 7.6.1 BYl.ARGET和BYSOURCE 7.6.2 OUTPUT子句 7.7 性能方面的考虑 7.8 本章小结 7.9 练习 第8章 规范化和其他基本设计问题 8.1 表 8.2 保持数据“规范 8.2.1 准备工作 8.2.2 第一范式 8.2.3 第二范式 8.2.4 第三范式 8.2.5 其他范式 8.3 关系 8.3.1 一对一关系 8.3.2 一对一或一对多关系 8.3.3 多对多关系 8.4 数据库关系图 8.4.1 表 8.4.2 添加和删除表 8.4.3 关系 8.5 反规范化 8.6 超出规范化的一些规则 8.6.1 保持简单 8.6.2 选择数据类型 8.6.3 尽量进行存储 8.7 创建一个快速示例 8.7.1 创建数据库 8.7.2 添加数据库关系图和初始表 8.7.3 添加关系 8.7.4 添加一些约束 8.8 本章小结 8.9 练习 第9章 SQLServer存储和索引结构 9.1 SQLServer存储机制 9.1.1 数据库 9.1.2 区段 9.1.3 页 9.1.4 行 9.1.5 稀疏列 9.2 理解索引 9.2.1 平衡树(B.树) 9.2.2 SQLServer中访问数据的方式 9.3 创建、修改和删除索引 9.3.1 CREATEINDEX语句 9.3.2 创建XML索引 9.3.3 随约束创建的隐含索引 9.3.4 在稀疏列和地理空间列上创建索引 9.4 明智地选择——在何时何地使用何种索引 9.4.1 选择性 9.4.2 注意成本 9.4.3 选择群集索引 9.4.4 列顺序问题 9.4.5 修改索引 9.4.6 删除索引 9.4.7 从查询计划中获取提示 9.4.8 使用数据库引擎调整向导 9.5 维护索引 9.5.1 碎片 9.5.2 确定碎片和页拆分的可能性 9.6 本章小结 9.7 练习 第10章 视图 10.1 简单的视图 10.2 更加复杂的视图 10.3 使用T-SOL编辑视图 10.4 删除视图 10.5 在MaliagementStudio中创建和编辑视图 10.6 审查:显示现有的代码 10.7 保护代码:加密视图 10.8 关于模式绑定 10.9 使用VIEWMETADATA使视图看起来像表一样 10.10 索引(物化)视图 10.11 本章小结 10.12 练习 第11章 编写脚本和批处理 11.1 脚本的基础知识 11.1.1 USE语句 11.1.2 声明变量 11.1.3 使用@@IDENTITY 11.1.4 使用@@ROWCOUNT 11.2 批处理 11.2.1 批处理中的错误 11.2.2 何时使用批处理 11.3 sqlcmd 11.4 动态SQL:用ExEC命令动态生成代码 11.5 控制流语句 11.5.1 IFELSE语句 11.5.2 CASE语句 11.5.3 用WHILE语句进行循环 11.5.4 WAITOR语句 11.5.5 TRY/CATCH块 11.6 本章小结 11.7 练习 第12章 存储过程 12.1 创建存储过程:基本语法 12.2 使用ALTER修改存储过程 12.3 删除存储过程 12.4 参数化 12.5 通过返回值确认成功或失败 12.6 错误处理 12.6.1 以前的方式 12.6.2 在错误发生前处理错误 12.6.3 手动引发错误 12.6.4 添加自定义的错误消息 12.7 存储过程的优点 12.7.1 创建可调用的进程 12.7.2 为了安伞性使用存储过程 12.7.3 存储过程和性能 12.8 扩展存储过程(XP) 12.9 递归简介 12.10 调试 12.10.1 启动调试器 12.10.2 调试器的组成 12.10.3 使用调试器 12.11 .NET程序集 12.12 本章小结 第13章 用户自定义函数 13.1 UDF的定义 13.2 返回标量值的uDF 13.3 返回表的UDF 13.4 调试用户自定义函数 13.5 数据库中的.NET 13.6 本章小结 13.7 练习 第14章 事务和锁 14.1 事务 14.1.1 BEGINTRAN 14.1.2 COMMITTRAN 14.1.3 ROLLBACKTRAN 14.1.4 SAVETRAN 14.2 SQLServer日志的工作方式 14.2.1 失败和恢复 14.2.2 隐式事务 14.3 锁和并发 14.3.1 通过锁可以防止的问题 14.3.2 可以锁定的资源 14.3.3 锁升级和锁对性能的影响 14.3.4 锁定模式 14.3.5 锁的兼容性 14.3.6 指定一种特有的锁定类型——优化器提示 14.4 设置隔离级别 14.5 处理死锁(1205错误) …… 第15章 触发器 第16章 初识XML 第17章 Reporting Services 第18章 使用Integration Services进行集成 第19章 扮演管理员的角色 附录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值