例子如下: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数据库查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)