SQL SERVER 语句大全

            

 database数据库的增删改查

 table表的增删改查和约束

 column列的增删改查 

 data数据的增删改查  

 view视图,case语句,if语句,while语句

 事务,存储过程 

索引,触发器

连接查询

一.  database数据库的增删改查

--增

create database mytest2014b

on primary

(

name='mytest2014b',

size=5mb,

maxsize=20mb,

filename='D:\mytest2014b.mdf'

)

 

--删

drop database mytest2014b

--改

  use apsxDb  --切换数据库

   alter database  mytest2014b modify file (name=mytest2014b,size=10MB) --修改数据库大小,只能往大改,不能往小改

--查

  use apsxDb

SELECT * FROM SYS.DATABASE_FILES          --切换数据库并查询出当前数据库大小等信息

 

二. table表的增删改查和约束

--增

    create table MyFirst(

 Id    int identity(1,1) primary key,

 FirstName nvarchar(20) not null,

 FirstSmileDate datetime not null

)                                   --创建指定的表

   

    select top 0 * into thirdtable from secondtable     --根据已有表创建新表(会有相同的结构(列名,标识列),但约束,主键等不会有)

     select *  into tbscore2 from tblscore               --复制表  包括数据不包括主键等约束

--删

  drop table MyFirst

--改

    --修改表名(调用存储过程,参数为原表名,新表名)     

    exec sp_rename  'myfirst','secondtable'      

--查

  use book_shop

  select * from sys.tables    --查询当前数据库下所有表  

--作用于表的约束(主键,Check,唯一,默认,非空,外键)

    --删除约束(几种约束都一样)

    alter table 表名 drop constraint 约束名

   alter table secondtable drop constraint PK__myfirst__3214EC07D24F39CF

    --添加主键约束

    alter table secondtable add constraint PK_SecondTable_Id primary key(Id)  

   --添加Check约束(用于给列设定条件)   

   alter table secondtable add constraint CK_SecondTable_SecondName check(len(secondname)>2) 

   --添加唯一约束(不允许重复,要求设定列表中该列没有重复)

    alter table secondtable add constraint UQ_SecondTable_secondName Unique(secondName)

   --添加默认约束

    alter table secondtable add constraint Default_SecondTable_secondName default('宾') for secondname

      --添加非空约束(与唯一约束冲突)

   alter table secondtable alter column secondname nvarchar(20) not null

   --添加外键约束   外键表引用主键表的主键ID    对应关系: 主键表1:外键表*   

    alter table 外键表名 add constraint 约束名 foreign key(关系列)references 主键表名(主键列)

    语句后追加 on delete(update)cascade 设置级联关系,删除主键表主键时会关联对应的外键表 

    alter table aspx_news add constraint FK_Aspx_News_Aspx_Type_TypeId  foreign key(NewsTypeId) references Aspx_Type(TypeId)

三.列的增删改查  

   --添加列

   alter table myfirst add Id int identity(1,1) not null

    ---添加列并指定为主键(主键不能有重复)(SET IDENTITY_INSERT 表名 ON  开启后可对主键列进行修改,SET IDENTITY_INSERT 表名 OFF 关闭修改权)

    alter table myfirst add Id int identity(1,1) primary key         

  --删除列

   alter table myfirst drop column Id

   --修改列

   --修改列名(调用存储过程,参数为 表.列名 新列名 column'(对象名))   

   exec sp_rename 'myfirst.firstname','secondName','column'

   --修改列类型

    alter table secondtable alter column secondname  nvarchar(10) not null

   --查列(查看所有列名)

   select top 0 * from secondtable

四.数据的增删改查  

   --增  

    insert  into secondtable  (secondname,firstsmiledate) values('汪峰',dateadd(day,2,getdate()) )   --插入一条数据

      insert into tblclass (tclassname,tclassdesc) output inserted.tClassId values('高二三班','牛叉班')  --插入数据并获取刚刚插入的数据的id

    insert  into secondtable   values('白亚松',dateadd(day,1,getdate()) )     --插入一条数据(除主键外所有column)

      insert into thirdtable select secondName, FirstSmileDate from secondtable   --从一个表向另一个表导入数据(要求两个表有相同的列且对应类的数据类型可兼容(列名可以不同))

   --删

    delete from secondtable where id=6      --删除一条指定的数据

      delete from secondtable                  --删除表中所有的数据

      truncate table secondtable                --删除表中所有的数据 (比delete更快)

    --改

      update secondtable set secondName='比比', FirstSmileDate=dateadd(day,-10,getdate()) where id=13    --修改一列指定的数据

   --查

     select * from secondtable           --查询表中所有数据

      select top 5 * from secondtable     --查询表中前五条数据

      select * from mystudent where fid between 20 and 100    --查询20-100之间的数据(包含20,100)

      select * from mystudent where fid in(20,100)                 --查询20,100 两条数据

      select top 5 * from secondtable order by NEWID()     --随机获取五条数据

      select tclassdesc from (select * from tblclass1 where tclassname='高一四班')as t       --子查询

      select * from thirdtable where secondname like '%亚%'  --查询表中secondname列包含字的数据        --模糊查询,少用

      select * from thirdtable where secondname  not like '%亚%'  --查询表中secondname列不包含字的数据

      select * from thirdtable where secondname like '%比'   --查询表中secondname列以字结尾的数据

      select * from thirdtable where secondname like '白%'   --查询表中secondname列以字开头的数据

      select * from thirdtable order  by id desc(asc)     --按条件降序(升序查询,把order by 以后返回的数据集合叫游标。)

      select  distinct secondname as N'姓名', firstsmiledate as '第一笑点' from thirdtable     --查询表中不重复的数据 (DISTINCT是对查询出的整个结果集进行数据重复处理的,而不是针对某一个列。)

      select count(0) from thirdtable   --查询表中数据总数                     --聚合函数

      max(scores) min(scores) sum(scores) avg(scores)        

      select getdate()  --获取当期时间                                      --时间函数

      select datediff(year,'2012-12-11',getdate())  --获取规定单位的时间差

      select dateadd(year,-12,getdate())   --获取加减单位时间后的时间

      select datepart(year,getdate())   --获取时间的某一部分单位

      select * from thirdtable where secondname is not null              --空值判断

      select * from thirdtable where secondname is null

      select isnull(secondname,'匿名') from thirdtable                 --secondname值为null则用匿名代替,仅在检索时有效

      select cast('123'as int)                                           --类型转换

      select convert(int ,'22')     

    select secondname ,max(id) from thirdtable group by secondname     --分组(没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的 (聚合函数中除外)

      select secondName from thirdtable group by secondname having count(secondname)>1      --分组后筛选

    GROUP BY子句必须放到WHERE语句的之后 ,Group By与Order By都是对筛选后的数据进行处理,而Where是用来筛选数据的。Having 是Group By的条件对分组后的数据进行筛选(与Where类似,都是筛选,只不过having是用来筛选分组后的组的。)

   select productid,sum(quantity) as 销售数量 from orders group by productid order by 销售数量 desc  --根据产品总销量降序排列

     select productid,sum(quantity*UnitPrice) as 销售总价 from orders group by productid having sum(quantity*UnitPrice)>40000 order by 销售总价 desc --将总销售价大于40000的根据产品销售总价排行     

    select tsname,tmath from v_tms union all select '总成绩',sum(tmath) from v_tms   --联合查询

五.视图,case语句,if语句,while语句

  创建视图 (视图保存虚拟表,不存储具体的数据,在没有top指定的情况下查询语句不能用orderby)     

   create view v_tms as

   select tsname,tmath from  tblstudent  as t1 inner join tblscore as t2 on t1.tSId=t2.tScoreId

   create view v_test as

   select top 50 percent tmath from tblscore order by tmath de --指定top后查询可用orderby 但是若top 100 percent 时保存检索的视图将不会排序

   create view v_test1 as

   select top 100 percent tmath from tblscore order by tmath desc

    select * from v_test1   =    select tmath from tblscore

   删除视图  

  drop view v_tms

  case语句

  select secondname,               --等值判断

编号=(

case id

when 17 then '十七' 

when 18 then '十八'

else '成年'

end

) from secondtable

   

   select secondname,              --区间(范围)判断

编号=(

case 

when id>18 then '成年' 

when id>35 then '中年'

else '小孩'

end

) from secondtable

select case                        --超出长度转换

 when len(tclassdesc)>then left(tclassdesc,1)+'...' 

end from tblclass2

   select teamname,              --综合case,聚合函数,分组   先分组,再确定列,再case,再使用聚合

=(

sum(case 

when gameresult= '' then 1

when gameresult= '' then 0

end)

 ),

 =(sum(case 

 when gameresult='' then 1

  when gameresult='' then 0

 end)

 ) from TeamScore group by teamname

  if语句

   declare @num int 

 set @num=12

 if(@num>10)

 begin

 print('hello')

 end

while语句

 declare @num int 

 set @num=10

while(@num>1)

begin

set @num-=1

print(@num)

end

六.事务,存储过程

事务:

begin tran

declare @num int

 set @num=0

 update bank set balance=balance-2000 where cid='0001'

 set @num+=@@error

 update bank set balance=balance+2000 where cid='0002'

 set @num+=@@error

 if(@num<>0)

 begin

 rollback tran

 end

 else

 begin

 commit tran

 end

分页存储过程:

     create proc usp_Orders

 @pagesize int,  --页大小

 @pageindex int, --当前页数

 @recordcount int output, --总记录数

 @pagecount int output  --总页数

 as

 begin

   set @recordcount=(select count(*) from orders) 

   set @pagecount=ceiling(@recordcount*1.0/@pagesize)

   --分页查询

   select OrderID, CustomerID, EmployeeID, OrderDate, ShipVia, ProductID, UnitPrice, Quantity, Discount

   from(select  OrderID, CustomerID, EmployeeID, OrderDate, ShipVia, ProductID, UnitPrice, Quantity, Discount,

   rn=row_number() over (order by orderid) from Orders )  as t where t.rn between (@pagesize*(@pageindex-1))+and @pagesize*@pageindex

 end 

七.索引、触发器

  索引

   

   --建立聚集索引

 create clustered index IXid on myorders(id)

 --建立非聚集索引

 create nonclustered  index IX购买人 on myorders(购买人)

 --删除索引,表名.索引名

 drop index myorders.IXid

触发器

--after(for)触发器(执行之后触发)

create trigger tri_delete1 on tblclass

after delete  --(update,insert)

as

begin

 insert into tblclass1 select tclassname ,tClassDesc from deleted --(inserted)

end

--instead of 触发器(替换触发器)

go

create trigger tri_delete2 on tblclass

instead of delete  --(update,insert)

as

begin

 insert into tblclass1 select tclassname ,tClassDesc from deleted --(inserted)

end

--删除触发器

drop  trigger tri_delete2 

--使用触发器去除多余的重复数据

create trigger tri_getdistinct on tblclass2

after delete  --(update,insert)

as

begin

 insert into tblclass2 select distinct tclassname ,tClassDesc from deleted --(inserted)

end

delete from tblclass2

 

 

   

 

 

 


  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值