0

0

SQLServer2005宝典学习笔记(数据操纵部分)

php中文网

php中文网

发布时间:2016-06-07 15:51:30

|

1191人浏览过

|

来源于php中文网

原创

摘要:本文主要是我学习SQL2005宝典的笔记(只是第二部分),少许平时记录的知识点。主要内容:1、系统函数;2、几种联接;3、CTE公用表表达式;4、已有数据库结构的修改;5、数据库的备份与恢复;6、CSV文件加载数据和Excel复制数据;7、存储过程:加密与获

         摘要:本文主要是我学习sql2005宝典的笔记(只是第二部分),少许平时记录的知识点。主要内容:1、系统函数;2、几种联接;3、cte公用表表达式;4、已有数据库结构的修改;5、数据库的备份与恢复;6、csv文件加载数据和excel复制数据;7、存储过程:加密与获得源码,存储过程返回数据;8、触发器的定义与应用;9、索引相关;10、 sql通配符;11、sql注入分析;12、其他:一些优化注意点,关键字pivot ,between and 的注意点。

         1、系统函数
               每个数据库都可以查看系统函数的,只要有环境就可以,如下图是NorthWind数据库中查找系统函数的截图:

               SQLServer2005宝典学习笔记(数据操纵部分)

              这里只介绍一些常见的函数:
              1.0、Left和Right获得左边或右边的指定长度的字符串,语法:Left(string,count);
              1.1、Rtrim和Ltrim去除字符串左边或右边的空格;
              1.2、Upper和Lower将指定的字符串转换成大写(或小写);
              1.3、Len求字符串的长度;
              1.4、SubString,抽取指定位置开始的指定长度字符串,语法SubString(string,position,length);
              1.5、CharIndex返回字符串中指定表达式的起始位置,例如:CharIndex ('a',id)表示id中’a’的位置;
              1.6、Replace(source,search,replace)在字符串中将指定字符串换成另外一种字符串;
              1.7、Cast/Convert类型转换,例如Cast (sales   AS   char(20)) ;Convert (char(20),   sales)  ;
              1.8、str(number,length,decimal)将数字转换成字符串;
              1.9、Stuff函数,格式化字符串,
                        例将123456789转换成123-45-6789;
                        Stuff(Stuff(‘123456789’,4,0,’-‘),7,0,’-‘),内层在第四个位置加上‘-’;
        2、几种联接
              2.1、form a,b ….与a  inner join b等价;
              2.2、Full join全外联接,查询所有数据,一般可用来查找所有问题数据;Cross join返回笛卡尔乘积记录集;
              2.3、Union联合默认删除重复的行,所以无需再加distinct画蛇添足;
              2.4、子查询类似于联接,使用联接从两个数据源取回数据后可以对其进行筛选和操纵。如果必须在联接前对数据进行操纵,应使用子查询;

        3、CTE公用表表达式,CTE(Common Table Expression)
                语法:With CTEName (parameters)
                            AS (Simple Subquery……)
                            Select ……From CTEName
                注:在性能上子查询和CTE几乎没有什么区别。
        4、已有数据库结构的修改
               4.1、修改数据库名(运用系统存储过程sp_renamedb)

Use Test0113;
exec sp_renamedb 'Test0113', 'new_name'

               4.2、删除数据库

USE MASTER
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'Test0113')
DROP DATABASE [Test0113]

               4.3、删除表

USE MASTER
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'Test0113')
DROP DATABASE [Test0113]

               4.4、修改表

                       4.41、增加一列:

ALTER TABLE tableName ADD columnName columnType NULL
ALTER TABLE tableName ADD columnName columnType NOT NULL DEFAULT colvalue

                       4.42、修改列的属性(列名除外);

VisualizeAI
VisualizeAI

用AI把你的想法变成现实

下载
--(注意语法,有一次忘了COLUMN,怎么也没查到错误)
ALTER TABLE tableName ALTER COLUMN columnName columnType NULL

                       4.43、修改列名,索引名;

EXEC sp_rename ‘tableName.columnName’,’newColumnName’,’COLUMN’

                       4.44、删除有数据的一个表的其中一列

ALTER TABLE tableName DROP COLUMN columnName

        5、数据库的备份与恢复
              5.1、备份:

backup DataBase Test2011 to Disk='C:\Test.bak'
With name='Test2011Back'

              5.2、恢复数据库:

Use master;
Restore Database Test2011
From Disk=’C:\Test2011Back.bak’

        6、CSV文件加载数据和Excel复制数据

CREATE TABLE Test1220
(
TestID int primary key,
TestContent char(10)
)
BULK INSERT Test1220
FROM 'C:\Test.csv'
WITH(FirstRow=1,FieldTerminator=',',RowTerminator='\n')

              FirstRow表示从CSV的第几行开始读取,1表示从第一行开始读取,如果有标题则为2, RowTerminator表示分隔符的字符。
              通过Excel将数据复制到表中(注意类型要对应,非空的一定要有值,一些约束也需符合)
        7、存储过程:加密与获得源码,存储过程返回数据
               7.1、加密存储过程源码

Create Procedure procName
Encryption
AS
……

              7.2、获得存储过程的源码
                        Sp_helptext procName
              7.3、存储过程返回值
                        7.31、方法一:

Create Procedure Test
(
@para1 int ,
@outPara2
)
--调用时
Declare @returnValue int;
Exec Test 1,@returnValue OutPut

                        7.32、方法二:return 关键字
              注意对于每个返回的记录集SQL Server在默认的情况下都发送一条消息,指出返回了或者影响了多少行记录,经过测试,最多甚至降低17%的性能,所以在有返回值的存储过程AS后面加上 Set NoCount ON
        8、触发器的定义与应用
              8.1、触发器的定义

Create Trigger trigName on tableName
After Upder               /*insert,delete均可*/
AS 
……

               8.2、根据触发器的知识解决以前一个问题:
                         一个用户注册了之后,注册日期一经确定就不可以再改变。
                         写了一个类似的例子:

Create table Test1220(
TestID int Primary Key,
TestContent Char(10) Default ‘Hello’
)
Create Trigger trig on Test1220
After Update
AS
If Update(TestContent)
RollBack

        9、索引相关
              9.1、创建主键为非聚焦索引
                       TestID int Primary Key NonClustcred
              9.2、创建聚焦索引
                        Create Clustered index IxOrderID On OrderDetail(OrderID)
              9.3、组合聚焦索引
                        Create Clustered index IxGuideName On Guide(LastName,FirstName);
               9.4、创建非聚焦索引
                         Create NonClustered index IndexName On TableName(columnName)
               9.5、创建唯一索引 Unique index
               9.6对于预期将在Where,Order By ,Group By子句中的每列基于它创建一个单列索引;索引的选择性,当数据重复密度高时不适合使用索引。
               9.7、索引优化
                        关于索引,通俗点的理解就是目录,查字典时如果没有目录就得将字典从前到后翻一遍查找所需的字。SQL查询数据库时也是一样,如果不用索引就得全表扫描。
                        运用索引优化过的分页语句:

--运用max和top实现查找第31-40的数据
--66万条数据,瞬间秒杀(环境SQL2000,测试时精度不高)
SELECT top 10* FROM Orders WHERE OrderID>
(
SELECT max(OrderID) FROM 
(
SELECT top 20 OrderID FROM Orders ORDER BY OrderID ASC
)a
)
ORDER BY OrderID ASC
--相比之下,没有运用索引优化的方法:
--运用top和not in实现
--66万条数据耗时3秒(环境SQL2000,测试时精度不高,但性能还是和前者有明显的差距)
SELECT top 10* FROM Orders WHERE OrderID not in
(
SELECT top 20 OrderID FROM Orders  
) 
ORDER BY OrderID ASC

          10、 SQL通配符
                (1)%多个字符,例如Like ‘m%’
                (2)_下划线,表示单个字符,例如Like ‘pingf_n’,注意有几个下划线就匹配几个字符
                (3)[]匹配指定范围中的字符,例如Like ’[a-g]’
                (4)[^]匹配不在指定范围内的字符,Like’[^m-t]’
                注意:如果要匹配以F%15开头的,有两种解决方案,其一用[]将通配符括起来,Like’F[%]15%’,这是SQL Server特有的,其二前面加上自定义转义字符,Like’F&%15%’ escape ‘&’,这是一般通用的。
        11、SQL注入分析
                 11.1、SQL注入分析
                         (1)恶意代码:123’;delete OrderDetail--
                         (2)使用 or 1=1 :例如123’ or 1=1
                         (3)绕开密码保护:
                               UserName:  Jack’--注意左边是两个连接符,也就是SQL中注释符号
                               PassWord:  Who Cases
                  11.2、防范注入攻击的一些方法
                         (1)采用存储过程
                         (2)检查参数是否包含语句结束符(例如分号,注释符等)
                         (3)避免动态SQL
                         (4)屏蔽出错信息。
        12、其他
               12.1、将数据列定义成not null,有利于简化查询,因为不需要检查值的null属性,有利于检索引擎做出判断;
               12.2、SQL优化小结;
                          (1)表的字段设置要恰当,尽可能减少占用空间;
                          (2)避免对大容量的数据段做无谓的检索;
                          (3)合理使用索引,提高查询效率;
               12.3、使用列序号来指定排序的列
                           Select ID,Name From Student Order By 1则按第1列ID排序。
               12.4、between and 的注意点
                           Between A and B 是闭区间[A,B]
                           注意: between ‘07/01/01’ and ‘08/31/01’  表示从07/01/01 00:00:00.000到08/31/01 00:00:00.000,这就遗漏了8月31日0点之后的数据,另外还要注意毫秒的精确度。
                12.5关键字Pivot  http://msdn.microsoft.com/zh-cn/library/ms177410.aspx (官方资料)。
        后记说明:写本文为了巩固所学知识,毕竟不是所有的知识都立即在工作中用到,我感到没用到的很容易忘,有些没有理解的没有写出,绝大多数内容都是源于SQLServer2005宝典的第二部分—使用Select操纵数据,如果冒犯了本书原作者或者翻译者的版权什么的请通知。Pivot部分资料点此下载(搜集的网上的Pivot资料,具体第一个作者是谁我也不知道,感觉找到的版本都一样,如果冒犯了原作者的版权什么的请通知)。


					

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

43

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

38

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

35

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

20

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

18

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

3

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

235

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

11

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

382

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2.1万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号