版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 8 讲 DML 应用,一、 DML 应用 1 子查询的使用 2 组合 T-SQL 语句 3 4 二、 SQL Server 中的几个问题 1 记录的自动编号 2 空(NULL)值对查询的影响,如果用一个 SELECT 查询命令无法将表数 据查询出来,可试试改用子查询来实现该操作. 所谓的子查询, 就是在 SELECT、 INSERT、UPDATE 和 DELETE 句子中又包含 了另一句 SELECT. 子查询也可以当成是一个表达式, 以单独 评估子查询中的数据, 其结果会成为主查询的 条件.,一、 DML 应用 1 子查询的使用,在 T-SQL 中, 包含子查询的语句与语意上 相等的其他
2、写法之间, 其性能通常没有差异. 不过, 在某些必须检查存在性的情况下, 连接 将产生更好的性能. 但有的子查询的性能也可 能比连接更好, 所以最好多尝试几种方法, 已 找出最利于你的情况的语句.,先讨论经常使用的派生表, 派生表是在 FROM 子句的后面加上子查询, 然后在子查询 之后加上别名来完成的. 子查询的结果集在主 查询的功能就像表一样.,SELECT 员工,订单数 FROM ( SELECT LastName + FirstName 员工, COUNT(CustomerID) 订单数 FROM orders AS o JOIN Employees AS e ON e. Employ
3、eeID=o. EmployeeID Group by LastName, FirstName ) AS T, 取代表达式的子查询 在 T-SQL 命令中, 子查询允许在表达式 的多个位置被使用, 例如将子查询当成字段的 表达式. 这个子查询可以独立地产生一个数值 数据, 并且由外层的主查询所使用.,USE pubs INSERT 客户 ( 客户编号, 客户名称, 生日 ) VALUES( 1001, Candy , 1980/04/22 ) GO SELECT * FROM 客户, 自动编号的一个方法 记录的自动编号,是指利用数据库提供的 功能直接实现编号,在数据处理时,不需要编 写额外的代
4、码就可以实现编号的生成. 在 SQL Server 中,实现自动编号的一个 最简单的方法就是使用标识( IDENTITY)列. 当用户在表中插入记录时,标识列的值由系统 根据情况(初始值、增量值、当前表中已经使 用的最大标识值)自动确定.,1 记录的自动编号, 自动编号的一个方法 记录的自动编号,是指利用数据库提供的 功能直接实现编号,在数据处理时,不需要编 写额外的代码就可以实现编号的生成. 在 SQL Server 中,实现自动编号的一个 最简单的方法就是使用标识( IDENTITY)列. 当用户在表中插入记录时,标识列的值由系统 根据情况(初始值、增量值、当前表中已经使 用的最大标识值)
5、自动确定.,1 记录的自动编号, 自动编号的一个方法 记录的自动编号,是指利用数据库提供的 功能直接实现编号,在数据处理时,不需要编 写额外的代码就可以实现编号的生成. 在 SQL Server 中,实现自动编号的一个 最简单的方法就是使用标识( IDENTITY)列. 当用户在表中插入记录时,标识列的值由系统 根据情况(初始值、增量值、当前表中已经使 用的最大标识值)自动确定.,1 记录的自动编号, 自动编号的一个方法 记录的自动编号,是指利用数据库提供的 功能直接实现编号,在数据处理时,不需要编 写额外的代码就可以实现编号的生成. 在 SQL Server 中,实现自动编号的一个 最简单的
6、方法就是使用标识( IDENTITY)列. 当用户在表中插入记录时,标识列的值由系统 根据情况(初始值、增量值、当前表中已经使 用的最大标识值)自动确定.,1 记录的自动编号,本节参考书目 邹建. 中文版SQL Server2000开发与管理 应用实例. 人民邮电出版社. 2005.8,二、SQL Server 中的几个问题, 自动编号的一个方法 记录的自动编号,是指利用数据库提供的 功能直接实现编号,在数据处理时,不需要编 写额外的代码就可以实现编号的生成. 在 SQL Server 中,实现自动编号的一个 最简单的方法就是使用标识( IDENTITY)列. 当用户在表中插入记录时,标识列的
7、值由系统 根据情况(初始值、增量值、当前表中已经使 用的最大标识值)自动确定.,1 记录的自动编号, IDENTITY属性与 IDENTITY() 函数的使用 1 创建表时使用 IDENTITY 属性 CREATE TABLE t1(ID int IDENTITY,A int) 2 使用 ALTER TABLE 语句在表中添加 IDENTITY 列 CREATE TABLE t2(A int) ALTER TABLE t2 ADD ID int IDENTITY 3 创建表时使用 IDENTITY 函数 SELECT ID=IDENTITY(int),NULL AS A INTO t3, 标识
8、列特性 每个表只允许定义一个标识列. 在表中插 入记录时,不必为标识列指定值, SQL Server 自动为该标识列赋值. 新插入记录的标识值只会递增,不会使用 已经删除记录的标识值. 所以删除记录可能会 导致表中的标识值之间产生差距。 如果要为新插入的记录指定标识值,则要 设置IDENTITY_INSERT 选项,以允许将显式 值插入表的标识列中. SET IDENTITY_INSERT database.owner. table ON|OFF,任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON. 如 果某个表已经将此属性设置为 ON,当为另一 个表发出了 S
9、ET IDENTITY_INSERT ON 语 句时,就会得到出错信息. 为标识列强制插入一个大于表中当前标识 值的记录,新插入记录的标识值以强制插入的 标识值为起点. 如果强制插入一个小于表中当前标识值的 记录,当直接插入记录时,标识值会是什么?,示例 测试的表 CREATE TABLE ta(ID int IDENTITY(1,1), col int) INSERT ta VALUES(1) INSERT ta VALUES(2) 强制在表中插入标识值 SET IDENTITY_INSERT ta ON INSERT ta(ID,col) VALUES(1,11) SET IDENTITY
10、_INSERT ta OFF INSERT ta(col) VALUES(3),上例的结果 SELECT * FROM ta /* - 结果 ID col - 1 1 2 2 1 11 3 3 -*/, 需要注意的问题 (1) 标识属性不能够保证 IDENTITY 值唯一 可以设置主键约束 (2) 不能够修改标识值 可以采用插入和删除的处理方法 参见参考书 P128129, 空值的例题 空值(NULL)表示数值未知、不可用或 将在以后添加的数据. 空值不同于空白或零值. 没有两个相等的 空值. 比较两个空值, 或将空值与任何其他数 值相比较均返回未知(UNKNOWN), 这是因 为每个空值均为
11、未知. 空值对查询有那些影响呢?我们看下例.,2 空(NULL)值对查询的影响,设表变量T1中的列col有3个值1,null,2 DECLARE T2 TABLE(col int) INSERT T2 SELECT 1 查询 SELECT T1总记录数=COUNT(*) FROM T1 结果:3 SELECT T1在T2的记录数=COUNT(*) FROM T1 WHERE col IN(SELECT col from T2) 结果: 1, 将上面 IN 改为 NOT IN ,结果也是1,-设表变量T1中的列col有3个值1,null,2 DECLARE T1 TABLE(col int) I
12、NSERT T1 VALUES(1) INSERT T1 VALUES(null) INSERT T1 VALUES(2) DECLARE T2 TABLE(col int) INSERT T2 SELECT 1 -查询 SELECT T1总记录数=COUNT(*) FROM T1 -结果:3 SELECT T1在T2的记录数=COUNT(*) FROM T1 WHERE col IN(SELECT col from T2) -结果: 1, 将上面 IN 改为 NOT IN ,结果也是1 go,INSERT T2 SELECT NULL SELECT T1在T2的记录数=COUNT(*) FROM T1 WHERE col IN(SELECT col from T2) 结果: 1 SELECT T1在T2的记录数=COUNT(*) FROM T1 WHERE col NOT IN(SELECT col from T2) 结果: 0 这显然与用户期望的结果有差异,之所以会这样, 是由于空值的特殊性所致., 关于空值的一些总结 (1) 在排序处理中,空值始
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年智能药箱定时提醒与用药管理功能应用
- 护理管理的职业发展
- 2026年地下管线事故应急响应机制:外力破坏事故降幅超92%的北京经验
- 2026年柔性夹爪选型四步法需求建模参数对比实测验证成本优化
- 2026年整车检修能力625辆 年的产线规划与能力提升
- 2026年超大规模智算集群建设提升智能算力高质量供给技术方案
- 2026年网络安全数据保护
- 2026年太极拳入门教程养生课件
- 2026年实验室生物安全柜使用培训
- 2026年上班族养生保健操课件
- JGJ162-2025《建筑施工模板安全技术规范》
- JG/T 235-2014建筑反射隔热涂料
- 二次供水人员培训试题及答案
- 夜间安全驾驶课件
- 《研究生就业指导课件(说课)》
- PSP问题解决流程分析
- 3.1.1农业区位因素及其变化-仙居杨梅的地理密码【知识探究】高中地理人教版(2019)必修二
- 部编版小学语文四年级下册教师(教学参考)
- 2025北京丰台高三一模化学试题及答案
- 幼儿园数字故事制作培训
- 水库工程标准化管理工作手册示范文本(制度手册)
评论
0/150
提交评论