关闭

常用sql写法

542人阅读 评论(0) 收藏 举报
分类:


一:将两个不相关的两个sql查询结果合并起来

         有时候我们为了减少与数据库的查询次数可以把几个需要的值一起查询出来,虽然大多数情况下可以用连接查询

         但是还是有时候没有什么关联的

         select a.m,b.n from ( select  * from x ) a ,
         (select * from y ) b

        其实也很好理解就是把查询的结果当成一张临时表来取数据


二:清空表并让自增加列为初始值

      truncate table 表名


三:去重复,查询某列重复的值

  方法1:  delete from test  where id not in (select max(id) from test with(nolock) group by bookname,nuthor having count(id) > 0)

 方法2:WITH myd AS
 (
    SELECT ROW_NUMBER() 
    OVER(PARTITION BY bookname,nuthor ORDER BY ID ) 
    AS NUM,* FROM test
 )
 DELETE FROM myd
 WHERE NUM != 1

  select username,COUNT(id) as '重复次数' from Org_Register group by  username having COUNT(id)>1


四:分页

   1: select * from ( 
    select *, ROW_NUMBER() OVER(Order by a.CreateTime DESC ) AS RowNumber from table_name as a 
  ) as b 
  where RowNumber BETWEEN 1 and 5 


   2:select * 
from( 
select ROW_NUMBER() OVER( ORDER BY PSIO.CreateTime DESC ) AS RowNumber,PSIO.SeqNo,PSIO.CreateTime from dbo.Output PSIO 
inner join Album PPA on PSIO.PPAID=PPA.PPAID 
where PPA.PPAID=103--PPAID=3.PPAID 
) T where RowNumber BETWEEN 1 and 5 order by 1 

 3:sqlserver2012分页方式   

select number 
from spt_values
where type='p'
order by number offset 10 rows fetch next 5 rows only;


五:字符串列需要包含匹配的查询

    例如可能得星期是:周一,周三

    前台搜索条件是周一,周三,周五

    我们应该把数据库星期为周一,周三的都查询出来

    可以先把条件分割成周一,周二,周三,然后分别和数据库的字段like一下


  六:按照某个条件进行排序

    --比如想让c排第一    此时后边的排序会受col排序的影响
select * from tb 
order by case when col='c' then 0  else 1 end,col,id


   --此时可以让c排第一,且后边的排序会受col排序的影响

select * from tb 
order by case when col='c' then 0  else 1 end,id


七:查询含有单引号的数据

  select * from Price_Port where NameEN like '%'+char(39)+'%'

   去掉单引号

   update Price_Port set NameEN = REPLACE(NameEN,'''','') where NameEN like '%'+char(39)+'%'



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:321436次
    • 积分:5470
    • 等级:
    • 排名:第5169名
    • 原创:224篇
    • 转载:75篇
    • 译文:0篇
    • 评论:70条
    最新评论