sql常用语句积累及优化

来源:互联网 发布:淘宝网松下洗衣机 编辑:程序博客网 时间:2024/04/29 22:30

 
use hailan
go

select * from news order by date desc
select top 1 date from news order by date desc
select datepart(yyyy,[date]) from news
SELECT DATEPART(yyyy-mm-dd, 0)
select * from news where  DateDiff(day,(select top 1 date from news order by date desc),date)>7
select * from news where  DateDiff(day,(select top 1 date from news order by date desc))>7
select * from news where datediff(day,date,(select top 1 date from news order by date desc))<=7 order by date desc--七天之内  

select * from news where date >= convert(varchar(10),getdate() - 7,120)          --最近七天
select * from news where month(date)=month(getdate())-1             --上个月


--UNION 运算符
--将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。这与使用联接组合两个表中的列不同。
--使用 UNION 组合两个查询的结果集的两个基本规则是: 所有查询中的列数和列的顺序必须相同。数据类型必须兼容。
--UNION 指定组合多个结果集并将其作为单个结果集返回。不包括重复行。
--ALL 在结果中包含所有的行,包括重复行。如果没有指定,则删除重复行。

--示例:
select * from about where id =1 union all  select * from about where id=2


--(批量插入)一次插入多条数据时下面这种方法(用union all)效率高。应用场景满足这两个条件时才适合用union的写法:1、表不能有主键或者主键是数据库默认的(sql用自动递增列,oracle用序列)
--2、组合sql语句时只能直接用字符串连接,不能用参数化sql语句的写法(就是在组合的sql中用@parm做占位符,再给Command对象添加Parameter);  以上两条任意一条不满足,效率的提高都不明显。
--示例
insert into about select '','','df' union all select '','','dfs'


--DATEDIFF 返回跨两个指定日期的日期和时间边界数。

--语法 DATEDIFF ( datepart , startdate , enddate )

--DATEPART 返回代表指定日期的指定日期部分的整数。

--语法 DATEPART ( datepart , date ) 注释:DAY、MONTH、和 YEAR 函数分别是 DATEPART(dd, date)、DATEPART(mm, date)、和 DATEPART(yy, date) 的同义词。

--SELECT DATEPART(month, GETDATE())=select month(getdate()) 都是获取当前月份
GO

 

--学习sql:提高效率。优化sql
http://www.javaeye.com/wiki/topic/232865  
http://www.jjxj.com.cn/index1.jsp  --站内搜索  点击
http://hi.baidu.com/rxj%5F2008/blog/item/a53ab212c3435f0a5baf534a.html
http://www.xue163.com/html/2008717/743368.html
http://hi.baidu.com/sixlu/blog/item/a4f406238fb50848935807ec.html


-------------------------sql常用语句积累--------------------------

select * from 表 where datediff(day,时间字段,getdate())<=7          --查询七天之内的信息 
 select * from news where datediff(day,date,(select top 1 date from news order by date desc))<=7 order by date desc --七天之内 (示例) 

select * from 表 where datediff(day,时间字段,getdate())<=datepart(weekday,getdate())       --查询本周的信息
select * from news where datediff(day,date,(select top 1 date from news order by date desc))<datepart(weekday,(select top 1 date from news order by date desc))    --最近一周(示例)

select * from news where datediff(day,date,getdate())<datepart(weekday,getdate())       --查询本周的信息(示例)
select DATEDIFF(month, date, GETDATE()) AS MONTHS  from news 
select * from news order by newid()   --对查询结果随机排序(示例)
select * from news order by title Collate Chinese_PRC_Stroke_ci_as    --按姓氏笔画排序(示例)
select * from news order by title Collate Chinese_PRC_CS_AS_KS_WS    --按拼音首字母排序(示例)

 


--1.如何删除表中的重复记录?(这里指记录的每个字段都要相同)
select  distinct  *  into  #temp  from  tab 
delete  tab 
insert  tab  select  *  from  #temp 
drop  table  #temp 

--2.怎样返回数据库中用户表的表单名
select  name  from  sysobjects  where  xtype=&apos;U&apos; 
select  name  from  sysobjects  where  xtype  =  &apos;u&apos;  and  status  >=0 

--3.返回两个表中共有的所有记录
select * from testTable as a inner join TestTableChild as b on a.id = b.parentid 

--4.返回两个表里共有的记录,且不重复
select a.id,a.name,b.name from testTable as a inner join TestTableChild as b on a.id = b.parentid group by a.id,a.name,b.name 

--5.向一个表A中插入记录,并且插入的记录在A中不存在(通过一个字段来判断)
insert into trace_users (tracekey,muteSMS,CreateTime,traceuser,tracetime,traceSlot,traceduration)  Select &apos;TRACE_TIMER&apos;,0,getdate(),mobileid,getdate(),&apos;30&apos;,&apos;0&apos; from Epm_EmployeeList where corpid = 10001 and not exists (select traceuser from trace_users ) and mobileid like &apos;13%&apos; and len(mobileid) = 11 

--6、根据出生日期,算出年龄
DATEDIFF(month, T.Birthday, GETDATE()) AS MONTHS --得到月份
MONTHS /12  --取整就是年龄

--7、等待时间再执行语句
waitfor delay &apos;00:00:05&apos;
select * from studentinfowaitfor time ’23:08:00
select * from employee

--8、指定值的范围查询
stockname like &apos;[a-zA-Z]%&apos; --------- ([]指定值的范围)
 
stockname like &apos;[^F-M]%&apos; --------- (^排除指定范围) 

--9、从表中获取值并插入另一张表中
insert into table2 (a) select a from table1 

--10、备份与恢复数据库
backup database SCardDB to disk = &apos;F:/SCardDB.2006年10月10日(105748).bak&apos;restore   database   kangda   from   disk=&apos;d:/backup.bak‘ 

--11、对查询结果随机排序
SELECT * FROM Northwind..Orders ORDER BY NEWID() 

--12、按姓氏笔画排序
Select * From TableName Order By 列名 Collate Chinese_PRC_Stroke_ci_as 

--13获取某一个表的所有字段
select name from syscolumns where id=object_id(&apos;表名&apos;) 

--14、记录转换
select *,case Type when 1 then &apos;移动&apos; when 2 then &apos;联通&apos; when 3 then &apos;小灵通&apos; end as TypeName from abc 

--15、按拼音首字母排序
select * from 表名 order by 列名 Collate Chinese_PRC_CS_AS_KS_WS

 

原创粉丝点击