日期:2014-05-16  浏览次数:20421 次

ms sql数据库常用语句/技巧集锦/经典语句

本文为累计整理,有点乱,凑合着看吧!

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆											
☆ 											
☆                   sql 宝 典						
☆											
☆											
☆				  2012年-8月 修订版					
☆											
☆				 修订人:情谊续写经典					
☆											
☆    郑重声明:本版本并非国际标准,使用前请查询数据库文档是否支持,转载请注明出处!	
☆											
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

MS SQL里没有括号时,运算进行的次序将是先乘后除再模后加减

减号(-)也有两种用途:1.作为负号使用 2.从某一列中减去另一列

and   or   not  
如果一个where子句中同时出现这三个操作符
最先评估not   然后是and  然后是or 


coalesce 哪个不为空用哪个 
coalesce(i.ProductID,d.ProductID)

@@rowcount
返回上一条语句影响的行数

SQL判断某列中是否包含中文字符或者英文字符 
  select * from 表名 where 某列 like '%[吖-座]%'  
  select * from 表名 where 某列 like '%[a-z]%'

--数据操作,中英文对照 
select --从数据库表中检索数据行和列  
insert --向数据库表添加新数据行  
delete --从数据库表中删除数据行  
update --更新数据库表中的数据  
--数据定义  
create table --创建一个数据库表  
drop table --从数据库中删除表  
alter table --修改数据库表结构  
create view --创建一个视图  
drop view --从数据库中删除视图  
create index --为数据库表创建一个索引  
drop index --从数据库中删除索引  
create proceduer --创建一个存储过程  
drop proceduer --从数据库中删除存储过程  
create trigger --创建一个触发器  
drop trigger --从数据库中删除触发器  
create schema --向数据库添加一个新模式  
drop schema --从数据库中删除一个模式  
create domain --创建一个数据值域  
alter domain --改变域定义  
drop domain --从数据库中删除一个域  
--数据控制  
grant --授予用户访问权限  
deny --拒绝用户访问  
revoke --解除用户访问权限  
--事务控制  
commit --结束当前事务  
rollback --中止当前事务  
set transaction --定义当前事务数据访问特征  
--程序化SQL  
declare --为查询设定游标  
explan --为查询描述数据访问计划  
open --检索查询结果打开一个游标  
fetch --检索一行查询结果  
close --关闭游标  
prepare --为动态执行准备SQL 语句  
execute --动态地执行SQL 语句  
describe --描述准备好的查询 


------------------SQL中插入数据的技巧 -----------------

插入少量数据时可以用:
insert into 表名(列名1,列名2...) values (值1,值2...)

插入大量数据时可以用:
    insert into 要复制的表名 select * from 源表名
或:insert into 要复制的表名(列名1,列名2...) select (列名1,列名2...) from 源表名

insert select 语句要求你遵循如下规则:
  SELECT 语句不能从被插入数据的表中选择行
  INSERT INTO 中的列数必须与SELECT 语句返回的列数相等
  INSERT INTO 中的数据类型要与SELECT 语句返回的数据类型相同

insert select 语句的另外一个用处对表进行备份:
  select * into 临时表名 from 源表名



----------SQL中truncate table和delete和drop的区别 ----------

truncate table在功能上与不带 Where 子句的 Delete 语句相同,二者均删除表中的全部行
但truncate table比 Delete 速度快,且使用的系统和事务日志资源少。
Delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
truncate table删除表中的所有行,但表结构及其列、约束、索引等保持不变。
新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete。
对于由 FOREIGN KEY 约束引用的表,不能使用truncate table,而应使用不带 Where 子句的 Delete 语句。
由于truncate table不记录在日志中,所以它不能激活触发器。 
truncate table不能用于参与了索引视图的表。 

truncate,delete,drop的异同点:  
注意:这里说的delete是指不带where子句的delete语句 
  
相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据  

不同点:  
1.truncate和 delete只删除数据不删除表的结构(定义)  
  drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 
  依赖于该表的存储过程/函数将保留,但是变为invalid状态. 
  
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
  如果有相应的trigger,执行的时候将被触发.  
  truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 

3.delete语句不影响表所占用的extent, 高水线(high w2atermark)保持原位置不动  
   显然drop语句将表所占用的空间全部释放  
   truncate 语句缺省情况下将空间释放到 minextents个 extent,除非使用reuse storage;   
   truncate会将高水线复位(回到最开始). 

4.速度,一般来说: drop> truncate > delete 

5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及 

使用上: 
想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 

想删除表,当然用drop 

想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 

如果和事务有关,或者想触发trigger,还是用delete. 

如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据 

---------------------------好句收藏--------------------------

1.UNION 将返回两个查询的结果并去除其中的重复部分
 SELECT NAME FROM SOFTBALL
 UNION
 SELECT NAME FROM FOOTBALL

 distinct (去掉完全重复的记录)
 select distinct * from 表名
 
 with ties (并列显示完全重复的记录)
 select Top 10 with ties * from 表名

2.UNION ALL 不去掉重复的记录
 SELECT NAME FROM SOFTBALL
 UNION ALL
 SELECT NAME FROM FOOTBALL

3.INTERSECT 返回两个表中共有的行
 SELECT * FROM FOOTBALL
 INTERSECT
 SELECT * FROM SOFTBALL

4.MINUS (相减)
返回的记录是存在于第一个表中但不存在于第二个表中的记录
 SELECT * FROM FOOTBALL 
 MINUS
 SELECT * FROM SOFTBALL

5.in(满足括号里任意一个条件即可)
 SELECT * FROM FRIENDS