• MSSQL相关用法


    一、分页查询
    方式一(row_number):

    SELECT TOP pageSize * 
    FROM (SELECT row_number() OVER (ORDER BY orderColumn) AS rownumber, * FROM [Table]) temptdb_row
    WHERE rownumber > (page - 1)*pageSize;
    

    Tips:
    分页查询的时候,请不要用参数化方法,因为参数化方法会给参数加上引号,会给page,pagesize加上引号,导致查询出错,而且一个参数化的参数,不能再同一个dal函数里的多条语句里同时使用。
    方式二(不推荐):
    数据库中有100条数据,我要查第40-50数据,表中有两个字段,一个字段是id,一个字段是name,其中id是不连续的,因为我删除id为44、45的记录,因为我要查数据的第40-50条记录,也就是id分别为41、42、43、46、47、…52的十条记录。

    SELECT TOP 10 *
    FROM [Table]
    WHERE id NOT IN (SELECT TOP 40 id FROM [table] ORDER BY id)
    ORDER BY id;
    

    (1)按照id排序之后先搜出前40条数据
    (2)然后搜出id不在前40之内的其它数据
    (3)最后再取出前10条数据,这就是数据库中第41-50条数据(注意,id不是41-50,因为我删除了id为44、45的记录)

    二、排序
    (1)对 1,2,3,10,11,12 等数字进行排序

    SELECT *
    FROM [systemTree]
    WHERE parentCrtId='0' AND proCode = '425'
    ORDER BY LEN(nodeName),nodeName
    

    (2)对中文数字进行排序

    三、查询重复的数据

    select * from people where peopleId in (select peopleId from people group by peopleId having count(*) > 1);
    select platform_id,count(*) from user_platfrom_unit where unit_type=1 group by platform_id having count(*)>10
    

    COUNT
    COUNT(*):求表中的行数
    COUNT(列名称):求表中该列的行数,不包含null值
    COUNT(DISTINCT 列名称):求表中该列去重后的个数

    四、增加和删除前缀和后缀

    update [TABLE] set [字段] = '前缀'+ [字段];
    update [TABLE] set [字段] = replace([字段], '前缀', '');  
    --REPLACE(String,from_str,to_str) 即:将String中所有出现的from_str替换为to_str。
    --或者substring
    

    五、where 和 having 的区别
    where 是一个约束声明,使用 where 约束来自数据库的数据,where 是在结果返回之前起作用的,where 中不能使用聚合函数。
    having 是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在 having 中可以使用聚合函数。
    在查询过程中聚合语句 (sum,min,max,avg,count) 要比 having 子句优先执行。
    而 where 子句在查询过程中执行优先级高于聚合语句。

    六、exists和in
    https://www.cnblogs.com/clarke157/p/7912871.html

    1. in()适合B表比A表数据小的情况
    2. exists()适合B表比A表数据大的情况
      当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用。

    七、把数据从一个表插入到另外一个表中

    insert into [Table1](proCode) (select proCode from [Table2] group by proCode);
    

    八、union
    https://blog.csdn.net/u010895119/article/details/80335983

    select deptno,
    count(1) 总人数,
    count(case when job ='SALESMAN' then '1' end) 销售人数,
    count(case when job ='MANAGER' then '1' end) 主管人数
    from emp
    group by deptno;--如果不group,会认为所有数据是一组,返回一个数据
    最后 SQL优化

    1. 明知道只有一条查询结果是,请使用 LMIT 1 / TOP 1,避免全表扫描。
    2. 尽量避免使用select * ,它会全表扫描,不能有效利用索引,而且如果当该表增加了字段,解析查询结果时,可能会解析出错。
  • 相关阅读:
    P2324 [SCOI2005]骑士精神
    Codeforces Round #574 (Div. 2) A~E Solution
    P4132 [BJOI2012]算不出的等式
    spring笔记(三)
    spring笔记(二)
    C3P0连接池参数解释
    spring笔记(一)
    hibernate笔记(四)
    hibernate笔记(三)
    hibernate笔记(二)
  • 原文地址:https://www.cnblogs.com/wsq-blog/p/10638774.html
Copyright © 2020-2023  润新知