模糊查询
#五、模糊查询 #like 和 通配符 一起使用 #like _ 匹配单个字符 #like % 匹配任意个字符
#查询名字中有’冰’字的员工信息 SELECT * FROM t_employee WHERE ename LIKE ‘%冰%’;
#查询姓李的员工信息 SELECT * FROM t_employee WHERE ename LIKE ‘李%’;
#查询姓李,名字就一个字的员工信息 SELECT * FROM t_employee WHERE ename LIKE ‘李_’;
#查询李冰冰的信息 SELECT * FROM t_employee WHERE ename LIKE ‘李冰冰’; |
通常情况,可以使用FIND_IN_SET()函数或LIKE操作符搜索SET值:
mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET(‘value’,set_col)>0;
mysql> SELECT * FROM tbl_name WHERE set_col LIKE ‘%value%’;
第1个语句找出SET_col包含value set成员的行。第2个类似,但有所不同:它在其它地方找出set_col包含value的行,甚至是在另一个SET成员的子字符串中。
下面的语句也是合法的:
mysql> SELECT * FROM tbl_name WHERE set_col & 1;
mysql> SELECT * FROM tbl_name WHERE set_col = ‘val1,val2’;
第1个语句寻找包含第1个set成员的值。第2个语句寻找一个确切匹配的值。应注意第2类的比较。将set值与’val1,val2’比较返回的结果与同’val2,val1’比较返回的结果不同。指定值时的顺序应与在列定义中所列的顺序相同。
如果想要为SET列确定所有可能的值,使用SHOW COLUMNS FROM tbl_name LIKE set_col并解析输出中第2列的SET定义。 有什么实际应用呢?
比如我们设定用户的权限控制,一个用户可能会有多种权限,我们使用所有权限创建一个SET类型的字段,我们不需要用一系列int来定义各种权限了,直接使用一个SET字段即可:
/* 用户权限permission表 */ create table user_permission( id int UNSIGNED not null auto_increment, user_id int not null , permission set(‘阅读’,’评论’,’发帖’) not null, primary key(id), unique (user_id) ); desc user_permission; insert into user_permission values (0,1,’阅读’),(0,2,’阅读’),(0,3,’阅读,评论’); insert into user_permission values (0,4,’阅读,评论,发帖’); select *,permission+0 from user_permission; select permission from user_permission where user_id=1; select * from user_permission where permission & 10; SELECT * FROM user_permission WHERE FIND_IN_SET(‘评论’,permission)>0; |
文章转载于尚硅谷官网 www.atguigu.com