SQL Note I

来源:互联网 发布:阿里云logo含义 编辑:程序博客网 时间:2024/04/28 13:51

------------------------------------------------
★模糊查找
select*from TLFGL_LFRY where AU_LFRY_ZJH like'%1985%'

------------------------------------------------
★读取、添加 数据库image格式数据

读取

Image ima= Image.FromStream(new MemoryStream((byte[])seet.Tables[].Rows[0]

[index]));

添加

 

http://support.microsoft.com/default.aspx?scid=kb;zh-cn;317701

---判断dataSet中的二进制字段是否为空

数据库为空用DbNull.Value
而不用null:
if(ds.Tables[0].Rows[0][0]!=DbNull.Value)

DBNull只有一个值,就是DBNull.Value,用来比较判断表字段是否为空,
null是对引用对象进行比较的
------------------------------------------------
★数据库insert 语句错误
仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'TABLE' 中为标识

列指定显式值。当表中设立了自增数据,在添加的时候不用添加自增字段,或者设置set

表 IDENTITY_INSERT off

------------------------------------------------
★CONVERT()格式处理函数
把datetime转换成指定格式的字符串
CONVERT(VarChar(100),arrivetime,20) //2006-05-16 10:57:47

------------------------------------------------
★在sql中 字符串可以直接进行比较
例:
select CONVERT(varchar(5) , getdate(), 108) where '1:111'<'1:' //无记录
select CONVERT(varchar(5) , getdate(), 108) where '1:111'<'2:' //显示当前时


------------------------------------------------
★判断数据库中是否有"XX"这个表
IF NOT  EXISTS( SELECT * FROM SYSOBJECTS  WHERE TYPE='U' AND NAME='XX')
------------------------
★sql 左连接查表
select b.*,a.*,c.*
from  a  left join  b
on a.culumn1=b.culumn1
left join c
on a.culumn2=c.culunm1
where 条件语句
------------------------
★数据库 varchar()的字段A与datetime(系统时间) 数据的比较
I  CONVERT(VARCHAR(5),字段A,108)>=CONVERT(varchar(5) , getdate(), 108) ,
这种比较方法有个bug,因为它实际是把他们多转换成字符串类型进行比较,如果字段A

以4位格式,如'5:00',那么比较的时候,会有 '5:00'>'20:00'的情况发生。
II 最好的方法当然是把字符串转换成datetime 格式,再进行比较,CAST(字段A AS

DATETIME)>=CONVERT(varchar(5) , getdate(), 108)

CAST(str AS DATETIME)  转换类型至datetime
CONVERT(varchar(5) , getdate(), 108) 格式化字符串

3,怎么把string="08:00"; 转换成当前的datetime类型
CAST( CONVERT(varchar(100), GETDATE(), 23)+' 08:00'  AS DATETIME) 注意加空格

------------------------
★SELECT COUNT(*) FROM TABLE 返回查询结果的记录数
------------------------
★嵌套查询,IN,是否在查询结果中
select column0
from dbo.table0
where column0 IN
(select column0 from dbo.table1)
------------------------
★比较查询结果。ANY(其中一个值)与ALL(所有值)
如where column0>all    //大于结果中所有的值
(select column0 from dbo.table1)

------------------------
★查询结果是否为中间值
select *
from TABLE
where '02'
BETWEEN '00' AND '03'
------------------------
★isnull(A.MJ_GEN_MONEY,0)=如果MJ_GEN_MONEY为NULL则0代替
------------------------
★★★连接查询和子查询比较:

 

  尽量使用Join 而不是Where来列出关联条件,特别是多个表联合的时候。 

  原因是: 

  (1)在效率上,Where可能具有和Inner join一样的效率。但基本可以肯定的(通过SQLServer帮助和其它资料,以及本测试)是Join的效率不比Where差。 

  (2)使用Join可以帮助检查语句中的无效或者误写的关联条件 

  ======================= 

  以上整理,个人结论如下: 

  用where进行多表连接的比较时,先全部进行迪卡尔积后,最后再统一过滤。 

  而inner join是一边Descartes迪卡尔积,同时这滤,所以临时记录会少一些。 

  这一点在多个表联络合表现比较突出。 

  inner join是sql国际准标,有些db如sql2005会尽可能的进行编译运行优化,将where转化为inner join 

  ============================= JOIN的效率是很低,特别是ON后的字段不是关键子或者索引时 

  给你个建议: 

  先把你的查询语句保存成SQL文件 

  打开企业管理器->打开你要查询的数据库->点击上面的运行向导->管理->索引优化向导->优化模式选择彻底->选择我的工作负荷文件(打开你的查询文件)->执行优化->在建议的列上加索引 

  执行优化向导2到4遍至性能提升为0%为止 

  此时看你的查询语句执行速度又多么快的提升 

  ================================ 

 

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

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

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

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

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

原创粉丝点击