用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > sqlserver教程

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

时间:2014-11-30  来源:互联网  作者:佚名

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

例:

以下为引用的内容:

QUOTE:

create table orders (

id int not null auto_increment,

name varchar(100) not null,

email varchar(255) not null,

address text not null,

pay_type char(10) not null,

shipped_at datetime null,

primary key (id)

);

里面有数据

1 aaa aaa@gmail.com 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)

);

来顶一下
返回首页
返回首页
推荐资讯
从零开始学ASP.NET-基础篇第1/7页 从零开始学ASP.NET-基础篇第1/7页第一天 学习目的: 掌握最基本的Label、TextBox、Button控件
ASP.NET入门数据篇 ASP.NET入门数据篇对于网站编程的初学者来说,总是会上网找些源码来看,但久而
相关文章
栏目更新
栏目热门