SqlServer常用语句

首先,写这个的原因是我其实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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是SQL数据库: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是...
    西贝巴巴阅读 1,901评论 0 10
  • 50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna...
    最美的太阳WW阅读 3,267评论 0 23
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,834评论 18 399
  • 春宵苦短,红烛帐暖。 第二日清晨时,我从梦中醒来,身边早已空空的了,不见长平王身影。只听得外间里昨日迎亲时的喜娘丫...
    穿堂而过的流影阅读 252评论 1 2
  • 你害怕什么? 你看了害怕那小小的毛毛虫吗 害怕那寂静的黑夜吗 害怕那无人的孤独吗 可你知道我害怕什么吗 我害怕我不...
    悲言阅读 196评论 0 1