SQL Server 基础:拾遗
序言
INSERT INTO SELECT 与 SELECT INTO
通俗来讲,INSERT INTO SELECT 和 SELECT INTO 两个语句的作用都是复制表,因为都是从一个表中查询出数据然后插入到另一个表中,被查询的表可以是派生表。二者的区别在于:INSERT INTO SELECT 只复制表数据,不复制表结构,也不创建新表;而 SELECT INTO 不仅复制表数据,还复制表结构,而且会创建新表。
从另一个角度来说,INSERT INTO SELECT 要插入的表必须是已经存在的,因此需要考虑查询表与插入表的数据兼容性,而 SELECT INTO 则会把数据插入到尚不存在的新表中。
还有一个角度就是,INSERT INTO SELECT 要求必须有目标(插入)表,但可以没有(数据)源表,临时组装的数据即可;而 SELECT INTO 恰恰相反,可以(也必须)没有目标表,但必须要有源表。
复制表结构
select * into 新表 from 旧表 where 1 > 2;
ROW_NUMBER()高效分页
int pageIndex = ;//第几页
int pageSize = ;//每页显示条数
int start = (pageIndex - ) * pageSize + ;
int end = pageIndex * pageSize;
string sqlQuery = string.Format("SELECT * FROM (SELECT * ,ROW_NUMBER() OVER(ORDER BY 排序字段 DESC) AS num FROM TableName ) AS t WHERE num BETWEEN {0} AND {1} ORDER BY PTime DESC", start, end);
更新字段
update [专家库20161222] set 履历 = replace(履历,'','$$')
获取数据库表和视图
select name from sysobjects where xtype in ('U','V')
select name = s.name +'.'+ t.name from sys.tables t , sys.schemas s where t.schema_id = s.schema_id
SQL里面IN比较快还是EXISTS比较快?
这个题不能一概而论,要根据具体情况来看。IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。
如果查询语句使用了not in,那么对内外表都进行全表扫描,没有用到索引;而not exists的子查询依然能用到表上的索引。所以无论哪个表大,用not exists都比not in 要快。
DataReader、Dataset
数据量太大就用datareader,dataset都读到内存里了,datareader是直接读取数据库。
DataReader是一个快速的只进游标
DataReader分页速度更快
分页进化
2012的OFFSET分页方式
--2012的OFFSET分页方式
select number
from spt_values
where type='p'
order by number offset 10 rows fetch next 5 rows only;
go
--2005的ROW_NUMBER分页方式
select number from (
select number,row_number() over(order by number) as num from spt_values where type='p'
) t where num between 11 and 15
order by number asc
go
--2000的TOP分页方式
select number from (
select top 5 number from (
select top 15 number from spt_values where type='p' order by number asc
) t
order by number desc
) t
order by number asc
DECLARE @pageSize INT
DECLARE @pageIndex INT --第4页,每页显示10条数据
SET @pageSize = 10
SET @pageIndex = 4 SELECT * FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY Created_Time ASC) AS 'RowNumber', * FROM dbo.COM_UserInfo
) AS UserInfo
WHERE RowNumber BETWEEN ( ( ( @pageIndex - 1 ) * @pageSize ) + 1 ) AND ( @pageIndex * @pageSize )
SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) as A
WHERE RowNumber > 页大小*(页数-1) --注解:首先利用Row_number()为table1表的每一行添加一个行号,给行号这一列取名'RowNumber' 在over()方法中将'RowNumber'做了升序排列
--然后将'RowNumber'列 与table1表的所有列 形成一个表A
--重点在where条件。假如当前页(currentPage)是第2页,每页显示10个数据(pageSzie)。那么第一页的数据就是第11-20条
--所以为了显示第二页的数据,即显示第11-20条数据,那么就让RowNumber大于 10*(2-1) 即:页大小*(当前页-1)
Merge —— 一步实现 insert,update,delete
MERGE INTO TargetTable AS T --可添加 TOP 限制操作行数: MERGE TOP(2)
USING SourceTable AS S
ON T.id=S.id
WHEN MATCHED --当两者的id能匹配,id=1,2的数据被更新
THEN UPDATE SET T.[desc]=s.[desc]
WHEN NOT MATCHED --目标表没有的ID, 在原表中有,则插入相关的数据
THEN INSERT VALUES(s.id,s.[desc])
WHEN NOT MATCHED BY SOURCE --目标表中存在,源表不存在,则删除
THEN DELETE
OUTPUT $ACTION AS [Action]
,INSERTED.id AS [插入的id]
,INSERTED.[desc] AS [插入的DESC]
,DELETED.id AS [删除的id]
,DELETED.[desc] AS [删除的DESC]
经典SQL语句大全
1.1=1,1=2的使用,在SQL语句组合时用的较多 "where 1=1" 是表示选择全部 "where 1=2"全部不选.
资料
http://www.codeisbug.com/Doc/8/1145
大型项目中,DataReader几乎是首选,DataSet难觅踪影。
https://blog.csdn.net/naughty610/article/details/5358494
C# SqlDataReader提高效率的方法
https://blog.csdn.net/limlimlim/article/details/8626920
SQL Server 基础:拾遗的更多相关文章
- SQL server基础知识(表操作、数据约束、多表链接查询)
SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...
- 数据库开发基础-SQl Server 基础
SQL Server 基础 1.什么是SQL Server SQL:Structured Query Language 结构化查询语言 SQL Server是一个以客户/服务器(c/s)模式访问.使 ...
- 【SQL Server】SQL Server基础之存储过程
SQL Server基础之存储过程 阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储 ...
- Sql Server 基础知识
Sql Server 基础知识: http://blog.csdn.net/t6786780/article/details/4525652 Sql Server 语句大全: http://www.c ...
- Sql Server 基础语法
来自:http://www.cnblogs.com/AaronYang/archive/2012/04/24/2468093.html Sql Server 基础语法 -- 查看数据表 select ...
- 《SQL Server基础——SQL语句》
SQL Server基础--SQL语句 一.创建和删除数据库: 1.创建数据库(默认化初始值) 格式: CREATE DATABASE 数据库名称 例如: CREATE DATABASE ...
- SQL Server基础之索引
索引用于快速找出在某个列中有某一特定值的行,不使用索引,数据库必须从第一条记录开始读完整个表,直到找出相关的行.表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,数据库能快速到达一个位置 ...
- sql server 基础教程[温故而知新三]
子曰:“温故而知新,可以为师矣.”孔子说:“温习旧知识从而得知新的理解与体会,凭借这一点就可以成为老师了.“ 尤其是咱们搞程序的人,不管是不是全栈工程师,都是集十八般武艺于一身.不过有时候有些知识如果 ...
- 【SQL server】SQL server基础(二)
一.一些重要的SQL命令 SELECT - 从数据库中提取数据 UPDATE - 更新数据库中的数据 DELETE - 从数据库中删除数据 INSERT INTO - 向数据库中插入新数据 CREAT ...
- SQL Server基础之《视图的概述和基本操作》
数据库中的视图是一个虚拟表.同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生.本篇将通过一些实例来介绍视图的概念,视图的作用, ...
随机推荐
- cctype函数 (字符类型判断)
这些函数都在cctype头文件定义 isalnum(c) 如果C是字母或数字,则为TRUE isalpha(c) 如果C是字母,返回TRUE iscntrl(c) 如果C是控制字符,返回TRUE ...
- Socket网络编程例子
1.为了安全的进行通信,基于ACK确认机制----重传机制 使用selector机制的多路复用的IO通信机制,此外还有epoll控制 业务挂接点或者接入点: 常见的接入点: RDBMS进行CRUD M ...
- sort函数CCF
题是比较水的啦,但是好久没有用sort函数啦,有点生疏^...^ #include<stdio.h> #include<string.h> #include<iostre ...
- Android开发-API指南-AIDL
Android Interface Definition Language (AIDL) 英文原文:http://developer.android.com/guide/components/aidl ...
- Docker学习总结之docker入门
Understanding Docker 以下均翻译自Docker官方文档 ,转载请注明:Vikings翻译. What is Docker? Docker 是一个开源的平台,设计目标是可以方便开发, ...
- [codevs5578][咸鱼]tarjan/结论题
5578 咸鱼 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 在广袤的正方形土地上有n条水平的河流和m条垂直的河流,发达的咸鱼家族在m*n个河流交叉点都 ...
- HTTP协议——学习资料小结
嗯,这几天回头再次的学习Servlet的知识点,觉得HTTP协议的内容是相当重要的,现在虽然知道浏览器与应用程序的交互离不开它,但是怎么将信息从浏览器传输到服务器的这个知识点还是一个盲点.于是从网上找 ...
- django-ajax之post方式
post方式不同于get方式可以被django直接得到,因为django为post加入了csrf保护, 详细的文档地址https://docs.djangoproject.com/en/dev/re ...
- 可视化日志分析工具Gltail的安装与使用
可视化日志分析工具Gltail的安装与使用 GlTail.rb 是一款带有浓郁的 Geek 风格的可视化日志分析工具,它采用 Ruby 技术构建,并利用 OpenGL 图形技术进行渲染,呈现 ...
- [drp 3]读取Xml配置文件,连接数据库
导读:之前看一本XML的书,里面说到了对于XML的操作问题,但由于各方面的原因,一直没有总结.这次借着做项目,就总结总结对于XML文件的利用.主要是从配置数据库连接和保存数据这两方面来的.这篇博客介绍 ...