首先,写这个的原因是我其实sql语句不太行,总觉得自己写得很乱,好像也没有系统学习过,借此复习和与大家探讨

No.1 关于查询时间区间是否重叠的sql语句

问题是这样:插入之前,想查询同User是否其他请求时间重叠
表(Id,UserId,FromDate,ToDate,Reason)

select * from Request
where
UserId=@UserId
and
(
FromDate between @fromDate and @toDate
or
ToDate between @fromDate and @toDate
or
@fromDate between FromDate and ToDate
or
@toDate between FromDate and ToDate
);
--select出来有东西就是有记录与@fromDate和@toDate之间重叠

后来想想有

select * from Request
where
UserId=@UserId
and

FromDate > @toDate--在原有时间段之前
or
ToDate < @fromDate--在原有时间段之后

--搜出来的就是不重叠时间的记录

No.2 三种SqlServer分页查询语句

1)Top not in(等于查两次,性能不好)

declare @page int = 1;    --页码
declare @pagesize int = 5; --每页数 SELECT TOP (@pagesize) * FROM Campaign
WHERE Id NOT IN
(
SELECT TOP ((@page-1)*@pagesize) Id FROM Campaign
ORDER BY Id
)
ORDER BY Id

2)ROW_NUMBER() OVER()方式(也是select两次,不过查询靠后的数据速度比上一种快点)

declare @page int = 1;    --页码
declare @pageSize int = 5; --每页数 SELECT * FROM
(SELECT * ,ROW_NUMBER() OVER (ORDER BY Id) AS RowNum FROM Campaign) as T1
WHERE RowNum BETWEEN (@page-1)*@pageSize and @page*@pageSize

3)offset fetch next(速度比上面的快,但sql2012以上才可以用)

declare @page int = 2;    --页码
declare @pageSize int = 3; --每页数 SELECT * FROM Campaign
order by Id
OFFSET (@page-1)*@pageSize ROWS FETCH NEXT @pageSize ROWS ONLY

No.3 复制表中数据

Insert into table(field1,field2,...) values(value1,value2,...)这种插入经常用到。
但我们也经常有一种情况,将一个表数据的部分字段复制到另一个表中。
两种方式,有所区别:
1)INSERT INTO SELECT语句
(要求目标表Table2必须存在)

INSERT INTO Table2(a,c,d) SELECT a,c,5 from Table1

2)SELECT INTO FROM语句
(要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中)

SELECT a,c into Table2 from Table1

No.4 存在就更新,不存在就插入
用 exists 作为 if 判断条件,判断是否查询出东西 ①有东西则存在,就进行更新 ②没有的话就进行插入操作

IF EXISTS(SELECT * FROM table WHERE Id=@Id )
BEGIN
UPDATE XXX
END
ELSE
BEGIN
INSERT XXX
END

最新文章

  1. [PostgreSQL] 图解安装 PostgreSQL
  2. Return Largest Numbers in Arrays
  3. 彻底搞懂Html5本地存储技术(一)
  4. javascript 中break、 continue、函数不能重载
  5. 50.ISE布局布线错误
  6. Mellanox OFED2.1-X安装记录
  7. 【NOIP 2012 疫情控制】***
  8. android108 内存分配
  9. PHP 异常处理
  10. iOS弹出底部视图简单实现
  11. elasticsearch中国字(mmseg)——手动添加字典
  12. 解决EditText不能撑满全屏的问题及EditText你应该知道的属性
  13. gulp 小坑一个
  14. 第一次作业:来自一个奋斗的IT学子
  15. Excel init
  16. Python中logging日志模块的使用
  17. Cannot uninstall &#39;html5lib&#39;. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
  18. Hadoop集群最迅速的配置免密码登陆方法
  19. 学生成绩管理系统3.0(JSP+Servlet+MySQL)
  20. 软件常用设置(VC, eclipse ,nodejs)---自己备用

热门文章

  1. Linux程序设计:目录维护
  2. Android 音视频开发入门指南
  3. 网站架构:PHP针对并发访问如何优化?
  4. 「工具」三分钟了解一款在线流程绘制工具:Whimsical
  5. python基础知识梳理-----4基本数据类型,list ,tuple 操作 ,增删该查,以及其他功能函数
  6. webpack+vue中安装使用vue-layer弹窗插件
  7. IDEA External libraries 不显示Maven中引入的repository
  8. windows安装tesseract-OCR及使用
  9. h5 html5 模拟时钟 页面
  10. Mono for android彻底退出程序