• 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
  • 相关阅读:
    JSP内置对象
    Java数据结构
    Java引用传递
    椭圆曲线算法的基本原理及实现
    常见的Java异常
    Java数据结构
    Java数据结构
    重拾JSP
    [洛谷P6185] [NOI online 提高]T1 序列
    [题解][BZOJ1299]巧克力棒
  • 原文地址:https://www.cnblogs.com/EvanWay/p/8245572.html
Copyright © 2020-2023  润新知