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%为止
此时看你的查询语句执行速度又多么快的提升
================================
------------------------
★
------------------------
★
------------------------
★
------------------------
★
------------------------
★
- SQL Note I
- SQL knowledge Note I
- Transact-SQL 存储过程 knowledge Note I
- sql note
- SQL note
- SQL note
- sql note
- sql note
- DEPHI note I
- ASP.NET note I
- c# App NOTE-I
- C# WindForm Note-I
- C# Funciton_Method Note I
- C# control_base Note I
- C++ note I
- js note I
- c# primer note I
- .Net knowledge Note I
- 嵌入式linux驱动开发入门总结
- 双向链表的操作 模板的特化
- 第二次Google Android开发大赛的获奖作品,有的的确很有创意。
- C++总结
- JDBC
- SQL Note I
- C++基础:常量成员函数特殊说明
- Linux设备驱动开发大致流程
- C语言学习笔记之基本数据类型
- 第一份笔试题
- Android基础教程(十)之-------ListView的应用
- 转 asp.net中的报销多级审批工作流
- VC插件
- 关于postgreSQL--一点点认识