当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL“多字段模糊匹配关键字查询”

MSSQL
SQL Server导出表到EXCEL文件的存储过程
如何利用触发器实现两个数据库间的同步
SQL Server数据库连接查询的种类及其应用
SQL Server 2005中利用xml拆分字符串序列
Microsoft SQL Server数据库SA权限总结
用SQL语句生成带有小计合计的数据集脚本
深入剖析SQL Server的六种数据移动方法
为导入文件加上时间戳标记的两种方法
SQL Server与Oracle、DB2的优劣对比
带你深入了解SQL Server 2008的独到之处
通过视图修改数据时所应掌握的基本准则
SQL Server中如何优化磁带备份设备性能
教你轻松解决几种常见的SQL疑难问题
怎样取得局域网中所有SQL Server的实例
在系统崩溃的时候如何恢复原有的数据
获得当前数据库对象依赖关系的实用算法
SQL Server如何才能访问Sybase中的表
如何才能保护好我们的SQL Server数据库
从两个方面讲解SQL Server口令的脆弱性
SQL Server数据库日志清除的两个方法

MSSQL 中的 SQL“多字段模糊匹配关键字查询”


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 155 ::
收藏到网摘: n/a

我们开发数据库应用时,常常需要用到模糊查询。如果同一个条件需要匹配很多字段怎么办呢?通常,程序员会每个字段都在SQL中“field like'%cond%'”一次。这样,SQL语句会长得惊人,碰上复杂一点的,甚至SQL语句会因为超长而被数据库拒绝执行。其实,这个问题只要动动脑筋就很容易解决:首先,将要匹配相同条件的字段连起来(field1+field2+...)成一个长字符串;然后再 Like “%cond%”就可以了。不过这种方法有个问题,就是得权衡多表连接造成的效率降低。一般来说,单表内字段肯定应该连接后再统一like判断;表间字段,则需要先过滤后,再实行这个策略。采取这个策略,不仅可以缩短SQL,而且能够有效地提高SQL的执行效率。

例:

里面有数据
1 aaa [email protected] beijing cc 2006-10-11 16:17:26

现在想要查找出email为aaa开头的,address为bei开头的记录

那么一般我们会构建如下SQL
select * from orders o where o.email like "aaa%" and o.address like "bei%"

其实我们可以使用如下SQL来缩短SQL语句(也就是连接字段一起进行like操作)
SELECT * FROM orders o where concat(o.email,o.address) like "like%df%"
 
多表的情况意思是说where子句先写连接子句进行过滤再写连接like语句进行检索
比如:
SELECT * FROM line_items l,orders o where l.order_id=o.id and concat(l.quantity,o.email) like "3%like%"

其中line_items表

以下为引用的内容:
create table line_items (
id int not null auto_increment,
product_id int not null,
order_id int not null,
quantity int not null default 0,
unit_price decimal(10,2) not null,
constraint fk_items_product
foreign key (product_id) references
products(id),
constraint fk_items_order foreign
key (order_id) references
orders(id),
primary key (id)
);