您的位置:首页 > 数据库

SQL复习 总结

2012-11-07 14:17 357 查看
新建数据库

删除数据库

新建数据表

create table Test

{

number varchar(10),

ammout float

}

drop table Test-----删除表

修改表字段(一列):

alter table Test alter column Number nvarchar(50)

插入数据:

insert into Test Number,ammout values()

修改表中的数据:

update Test set ammont=ammont+50 where Number=PK1

删除表中的数据

Delect from Test where ammout<0

插入多行

inset into Test

select union

聚合函数

Max Min Sum() Count() avg

分组

group by()

排序

order by

*******复制表结构,Copy表内容

4 复制表(只要表结构,不要数据)

(1)方法1

select *

into New2Teacher

from TblTeacher

where 1<>1

(2)方法2

use TestSchool

select top 0 *

into New3Teacher

from TblTeacher

5 把一个表的数据copy到另一个 已经用上面的方式生成的

表中。

set identity_insert New3Teacher on

insert into New3Teacher values('玉良',1,22,2000,'2010-10-10')

select* from TblTeacher

set identity_insert New3Teacher off

insert into TestDatatime (uname) values('战三')

----默认值绑定

转换日期类型

select GetDate()

print GetDate()

Print convert(varchar(50),getdate(),105)

**Print 以消息的方式输出

把‘2012-03-22’----转换为----‘201203’

Print convert (varchar(50),getdate(),105)

Print cast(getdate() as varchar(10))

3 dateadd 日期相加

算出100 天后的日期

Print dateadd(day,100,getdate())

算出200天后的日期

Print dateadd(day,200,getdate())

再转换一下

Print convert(varchar(50),dateadd(day,200,getdate()),111)

插入日期数据

update MyStudent set FBirthday='1992-03-22' where FBirthday is null

select * from Employees

order by EmpInTime

给入职超过一年的员工加薪1000

入职时间大于1 年,使用getdate和dateadd

入职日期+1年 还<当前日期

update Employees

set EmpSalary=EmpSalary+1000

where EmpInTime

DATEADD(year,1,EmpInTime)<GETDATE()

1983 年11月22日距现在相差多少年?(月)

datadiff() 相减

datadiff(year,'1983-11-22',getdate())

datadiff(month,'1983-11-22',getdate())

统计每年入职的人数

select year(EmpInTime) as 入职年份,

人数=count(*)

from Employees

group by year(EmpInTime)

---用year 获取时间的一部分

统计1991 年出生的学生 MyStudet

select * from MyStudents

where YEAR(FBirthday)='1991'

datepart 日期的一部分

print datapart(hour,getdate())

print datapart(minute,getdate())

print datapart(second,getdate())

print datapart(ms,getdate())

4.

select top 3 CallerNumber as 呼叫员编号,

count(*) 呼叫次数

from CallerRecords

where

group by CallerNumber

order by 呼叫次数 desc

更新时间

update CallRecords set StartDateTime=Dataadd(year,2,StartDateTime),

ENDDateTime=Dataadd(year,2,EndDateTime)

CASE函数

select scoreId,StudentId,english,

评级=

case(

when english>=90 then '优秀'

when english>=80 then '良好’

when english>=70 then '中等'

when english>=60 then '及格'

else'不及格'

)

end

from Score

一个表中,有AB两列,现在要求查询结果集中包含ABC三列。

如果A>B则

C列中的值为A,否则为B

create table 表名

(

A int,

B int

)

insert into values()

select A, B ,

C=

case

when A>B then A

else B

end

from 表名

-------------------------------------

USE Test

select * from MyOrders

select

salesAssistant as 销售员,

Sum(saveNumber*savePrice) as 销售总金额,

称号=

case

when Sum(saveNumber*savePrice) >6000 then '金牌'

when Sum(saveNumber*savePrice) >6000 then '银牌'

when Sum(saveNumber*savePrice) >6000 then '铜牌'

else '普通'

end

from MyOrders

group by salesAssistant

order by 销售总金额 desc

----------------------------------

cerate table TestCase2

(

Number varchar(50),

Amount float

)

insert into TestCase2 values('RK1',10)

insert into TestCase2 values('RK2',30)

insert into TestCase2 values(RK3',-20)

insert into TestCase2 values('RK4',-60)

select

number as 账号,

支出=

case

when Amont>0 then AMOUNT

else 0

end,

收入=

case

when Amount<=0 then abs(Amount)

else 0

end

from 表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: