CREATE TABLE TABLE_NAME(ID int NOT NULL,NAME nvarchar(50),AGE int NULL) INSERT INTO TableName(Column1, Column2, ..., ColumnN) VALUES(Column1Value, Column2Value, ..., ColumnNValue) DELETE FROM TableName WHERE whereCondition UPDATE TableName SET Column1 = Column1Value, Column2=Column2Value, ..., ColumnN=ColumnNValue WHERE whereCondition SELECT * FROM TableName (WHERE whereCondition)
select COUNT(*) FROM Person1 select MAX(Age) FROM Person1 select MIN(Age) FROM Person1 select avg(Age) FROM Person1 select sum(Age) FROM Person1 select COUNT(*) FROM Person1 Where
select * from Person1 order by Age (ASC升序 DESC降序) ascend descend select * from Person1 order by Age DESC,Number ASC;按照age降序,number升序
order by 要放在where句子后面
案例1
select '正式工最高年龄',MAX(Age) FROM Person1 union all select '正式工最低年龄',MAX(Age) FROM Person1 union all select '临时工最高年龄',MAX(Age) FROM Person2 union all select '临时工最高年龄',MAX(Age) FROM Person2
案例2
查询正式工的信息,包括工号,工资,最后一行加上所有员工的工资合计
select FNumber,FSalary FROM T_Employee
union all
select '工资合计',sum(Fsalary)
例1:select DateDiff(hh,getdate(),DateAdd(hh,1,getdate())) 结果为1
例2:select DateDiff(year,FinDate,getdate()),count(*) as 入职年数 from T_Employee
group by DateDiff(year,FinDate,getdate())
按照入职的年数进行分组
DatePart(datepart,date) : 返回一个日期的特定部分
例1:select DatePart(year,getdate()),DatePart(month,getdate())
例2:select DatePart(year,FInDate),count(*) from T_Employee
group by DatePart(year,FInDate)
CAST(expression AS data_type) CONVERT(data_type,expression) select cast('123' as int )+1,cast('2008-09-09' as datetime), convert(int,'333'),convert(datetime,'2008-09-09') select DatePart(year, cast('2008-09-09' as datetime)) : 确保类型正确
ISNULL(expression,value): 如果 expression不为空,返回expression,否则返回value
例子:select ISNULL(Name,'佚名') from Person1
select FName, ( Case FLevel when 1 then '普通客户 ' when 2 then '会员 ' when 3 then 'VIP' else ' 未知类型' end ) as 客户类型 from T_Customer
select FName, ( case when Fsalary< 2000 then '低收入' when Fsalary>= 2000 and Fsalary <5000 then '中等收入 ' when Fsalary>= 5000 then '高收入' end ) as 收入水平 from T_Customer
select 单号 , ( case when 金额 >0 then 金额 else 0 end ) as 收入, ( case when 金额 <0 then ABS( 金额) else 0 end ) as 支出 from T_1
CREATE TABLE [T_Scores]( [Date] [datetime] NULL, [Name] [nvarchar] (50) NULL, [Score] [nvarchar] (50) NULL ); INSERT [T_Scores] ( [Date],[Name] ,[Score]) VALUES(CAST ('2008-08-08' as datetime),N '拜仁' ,N' 胜') INSERT [T_Scores] ( [Date],[Name] ,[Score]) VALUES(CAST ('2008-08-09' as datetime),N '奇才' ,N' 胜') INSERT [T_Scores] ( [Date],[Name] ,[Score]) VALUES(CAST ('2008-08-09' as datetime),N '湖人' ,N' 胜') INSERT [T_Scores] ( [Date],[Name] ,[Score]) VALUES(CAST ('2008-08-10' as datetime),N '拜仁' ,N' 负') INSERT [T_Scores] ( [Date],[Name] ,[Score]) VALUES(CAST ('2008-08-08' as datetime),N '拜仁' ,N' 负') INSERT [T_Scores] ( [Date],[Name] ,[Score]) VALUES(CAST ('2008-08-12' as datetime),N '奇才' ,N' 胜') SELECT Name , SUM( CASE Score WHEN ' 胜' THEN 1 ELSE 0 END ) AS 胜, SUM( CASE Score WHEN ' 负' THEN 1 ELSE 0 END ) AS 负 FROM T_Scores GROUP BY Name
CREATE TABLE [T_PhoneWork] ( [id] int identity (1, 1) primary key , [WorkNum] [nvarchar] (50) NOT NULL, [PhoneNum] [nvarchar] (20) NULL, [StartTime] [datetime] NULL, [EndTime] [dateTime] NULL ); INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100001' ,'13888888888', CAST('2013-1-1 7:10:10' AS datetime),CAST ('2013-1-1 7:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100002' ,'13887888788', CAST('2013-1-1 8:10:10' AS datetime),CAST ('2013-1-1 8:30:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100003' ,'13888688868', CAST('2013-1-1 7:20:10' AS datetime),CAST ('2013-1-1 8:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100004' ,'13838883888', CAST('2013-1-1 8:10:10' AS datetime),CAST ('2013-1-1 10:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100001' ,'13844888888', CAST('2013-1-1 10:10:10' AS datetime),CAST ('2013-1-1 12:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100002' ,'013888885888', CAST('2013-1-1 13:16:10' AS datetime),CAST ('2013-1-1 14:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100003' ,'13888588888', CAST('2013-1-1 14:10:10' AS datetime),CAST ('2013-1-1 16:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100001' ,'013868886888', CAST('2013-1-1 12:10:10' AS datetime),CAST ('2013-1-1 17:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100004' ,'13788878877', CAST('2013-1-1 14:10:10' AS datetime),CAST ('2013-1-1 16:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100001' ,'13787878877', CAST('2013-1-1 16:10:10' AS datetime),CAST ('2013-1-1 18:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100002' ,'13787878877', CAST('2013-1-1 12:10:10' AS datetime),CAST ('2013-1-1 14:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100003' ,'13788078877', CAST('2013-1-1 16:10:10' AS datetime),CAST ('2013-1-1 17:20:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('100005' ,'13799078877', CAST('2013-5-1 12:10:10' AS datetime),CAST ('2013-5-2 22:20:10' AS datetime)) CREATE TABLE [T_PhoneWork] ( [id] int identity (1, 1) primary key , [WorkNum] [nvarchar] (50) NOT NULL, [PhoneNum] [nvarchar] (20) NULL, [StartTime] [datetime] NULL, [EndTime] [dateTime] NULL ); INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('001' ,'020888888', CAST('2010-7-10 10:00:00' AS datetime),CAST ('2010-7-10 10:05:03' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('001' ,'020888888', CAST('2010-7-11 13:00:00' AS datetime),CAST ('2010-7-11 13:01:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('001' ,'8934343434', CAST('2010-7-11 14:06:00' AS datetime),CAST ('2010-7-11 14:09:00' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('002' ,'9837434777', CAST('2010-7-13 21:06:00' AS datetime),CAST ('2010-7-13 21:08:08' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('002' ,'0213434343', CAST('2010-6-29 20:11:00' AS datetime),CAST ('2010-6-29 20:16:06' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('001' ,'787878778', CAST('2010-7-15 13:16:00' AS datetime),CAST ('2010-7-15 13:26:00' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('003' ,'0334343444', CAST('2010-7-13 11:16:00' AS datetime),CAST ('2010-7-13 11:17:09' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('003' ,'676777333', CAST('2010-7-19 19:26:02' AS datetime),CAST ('2010-7-19 19:30:33' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('001' ,'89923434333', CAST('2010-6-19 15:16:02' AS datetime),CAST ('2010-6-19 15:26:10' AS datetime)) INSERT INTO [T_PhoneWork]([WorkNum], [PhoneNum],[StartTime] ,[EndTime]) VALUES('004' ,'400400400', CAST('2010-6-19 15:16:02' AS datetime),CAST ('2010-6-19 15:26:10' AS datetime))
1.输出所有数据中通话时间最长的5条记录. SELECT TOP 5 *FROM T_PhoneWork ORDER BY (DateDiff (s, StartTime,EndTime )) DESC 2.输出所有数据中拨打长途号码(对方号码以0开头)的总时长 SELECT SUM ( DateDiff(s ,StartTime, EndTime) ) AS 长途总时长 FROM T_PhoneWork WHERE PhoneNum LIKE '0%' 3.输出本月通话总时长最多的前三个呼叫员的编号 SELECT TOP 3 WorkNum,count (*) FROM T_PhoneWork WHERE DateDiff (month, StartTime,getdate ()) = 0 group by WorkNum order by sum( datediff(s ,StartTime, EndTime)) DESC SELECT TOP 3 WorkNum FROM T_PhoneWork WHERE DateDiff (month, StartTime,'2010-7-2 9:12:00' ) = 0 group by WorkNum order by sum( datediff(s ,StartTime, EndTime)) DESC 4.输出本月拨打号码次数最多的前三个呼叫员的编号 select top 3 WorkNum from T_PhoneWork WHERE DateDiff (month, StartTime,getdate ()) = 0 group by WorkNum order by count(*) DESC
5.注意,union的两个原则,类型要相容,这个容易犯错,谨记 输出所有数据的拨号流水,并且在最后的一行添加总呼叫次数 -记录呼叫员编号,对方号码,通话时长 -... -汇总[市内号码总时长][长途号码总时长] select WorkNum as 呼叫员编号,PhoneNum as 对方号码 ,DateDiff( s,StartTime ,EndTime) as 通话时长 from T_PhoneWork union all select ' 汇总', cast( sum( CASE substring (PhoneNum, 1,1 ) when '0' then 0 else DateDiff (s, StartTime,EndTime ) end ) as nvarchar( 50)), cast( sum( CASE substring (PhoneNum, 1,1 ) when '0' then DateDiff(s ,StartTime, EndTime) else 0 end ) as nvarchar( 50)) from T_PhoneWork 参考做法: select WorkNum as 呼叫员编号,PhoneNum as 对方号码 ,DateDiff( s,StartTime ,EndTime) as 通话时长 from T_PhoneWork union all select ' 汇总', cast( sum( CASE when PhoneNum not like '0%' then DateDiff( s,StartTime ,EndTime) else 0 end ) as nvarchar( 50)), cast( sum( CASE when PhoneNum like '0%' then DateDiff (s, StartTime,EndTime ) else 0 end ) as nvarchar( 50)) from T_PhoneWork
select * from T_Reader where FYearOfJoin IN( 2001,2003 ) select * from T_Reader where FYearOfJoin IN (select FYearPublished from T_Book) --查询书记出版那年加入协会的人的信息 限制结果集 . 返回第行到第行的数据 select * from ( select ROW_NUMBER() OVER( ORDER BY Age ASC) AS rownum , Number ,Name, Age,NickName From Person1 ) as e1 where e1. rownum>=3 and e1. rownum<=5 经典的应用是: 分页的操作 select * from ( select ROW_NUMBER() over(order by k1 .TimeDiff DESC ) as rownum,k1 .WorkNum, k1.TimeDiff as d from ( select WorkNum, sum(datediff (second, StartTime,EndTime )) as TimeDiff from T_PhoneWorkTest group by WorkNum )as k1 ) as e1 where e1. rownum >= 2 and e1. rownum <=3