Mysql如何对数据库进行模糊查询

Mysql如何对数据库进行模糊查询,第1张

例子如下:SELCET FROM T-USER U WHERE CONCAT(ULASTNAME,UFIRSTNAME) LIKE '%$LSP_NAME$%'

LASTNAME 字段是姓;

FIRSTNAME字段是名字;

当查询字段为null时,返回结果为null。与concat_ws()不同。

如果为多个字段同时进行查询时,使用concat_ws()。

select concat_ws(',','11','22','33');

select concat_ws(',','11','22','33',null);都返回11,22,33。

CONCAT_WS() 代表 CONCAT With Separator,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。

CONCAT()可以连接一个或者多个字符串,CONCAT_WS()可以添加分割符参数。

1、where型子查询

(把内层查询结果当作外层查询的比较条件)

#不用order by 来查询最新的商品

select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);

#取出每个栏目下最新的产品(goods_id唯一)

select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id);

2、from型子查询

(把内层的查询结果供外层再次查询)

#用子查询查出挂科两门及以上的同学的平均成绩

思路:

#先查出哪些同学挂科两门以上

select name,count() as gk from stu where score < 60 having gk >=2;

#以上查询结果,我们只要名字就可以了,所以再取一次名字

select name from (select name,count() as gk from stu having gk >=2) as t;

#找出这些同学了,那么再计算他们的平均分

select name,avg(score) from stu where name in (select name from (select name,count() as gk from stu having gk >=2) as t) group by name;

3、exists型子查询

(把外层查询结果拿到内层,看内层的查询是否成立)

#查询哪些栏目下有商品,栏目表category,商品表goods

select cat_id,cat_name from category where exists(select from goods where goodscat_id = categorycat_id);

创建测试表,插入数据:

create table a

(productid varchar(3),

sale_year int,

sales int);

insert into a values ('001',2001,10);

insert into a values ('002',2001,15);

insert into a values ('003',2002,12);

insert into a values ('003',2003,10);

执行:

select productid,

max(case when sale_year=2001 then sales else null end) `2001`,

max(case when sale_year=2002 then sales else null end) `2002`,

max(case when sale_year=2003 then sales else null end) `2003`

from a

group by productid

结果:

请在函数名后面的圆括号里填写参数,函数名(参数1,参数2,参数n), 具体的用法请参考用户手册。

例如:

select month(now()),left(sname,1),length('abcd') from student;

这个说的有点广叫人如何下手?是说查询有几个数据库?那就用show databases;

是说查询指定数据库里面有几个表?那就用show tables;

是要查询表里面的内容?那就用selectfrom table_name;

代码如下:

mysql> show tables;

Empty set (000 sec)

提示是一个空的记录集,表示里面没有任何记录。

这个show tables即为显示当前数据库中所有的表。又如:

mysql> use mysql

Database changed

mysql> show tables;

1对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2应尽量避免在 where 子句中使用!=或<> *** 作符,否则将引擎放弃使用索引而进行全表扫描。

3应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

4应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20

以上就是关于Mysql如何对数据库进行模糊查询全部的内容,包括:Mysql如何对数据库进行模糊查询、如何在MySQL数据库进行子查询、mysql数据库查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10190841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存