您的位置:首页 > 数据库

常用sql写法

2013-12-03 15:19 148 查看
一:将两个不相关的两个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)+'%'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: