数据库模糊查询部分,刷题小结
早上刷了会数据库题型,长时间不练习有的重要知识点居然忘了,赶紧记录一下
1.模糊查询用like关键字
题目中,不说具体条件,比如“年龄18”或者“性别男性”,而是很笼统的指代一个范围,比如“名字中包含 王 字”等问法,使用模糊查询。语法如下:
字段名 like ‘匹配内容’ ;
举个栗子: 预期结果是这样: 这里我们就使用模糊查询方法,使用like语法:
select device_id, age, university from user_profile where university like 北京%; 或者 where university like %北京%;
以下还有几种模糊查询方式:
-
_:匹配任意一个字符; %:匹配0个或多个字符; [ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 ); [^ ]:不匹配[ ]中的任意一个字符。
举个栗子:( 都是使用like关键字) (1)_匹配字符
select age from student where name like 张_; #查询名字以张开头,且姓名只有2个字的学生年龄
select age from student where name like 张__; #查询名字以张开头,且姓名长度为3个字的学生年龄
select age from student where name like _泽_; #查询名字第二个字是泽的学生年龄
(2)%匹配0个或多个字符
select age from student where name not like 刘%; #查询名字不以刘开头的学生的年龄
(3)[ ]:匹配[ ]中的任意一个字符
SELECT * FROM 学生表 WHERE 姓名 LIKE [张李刘]%’ #.查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。
(4)[^]:不匹配[ ]中的任意一个字符。
SELECT * FROM 学生表 WHERE 姓名 LIKE _[^言]%’ #.查询学生表中姓名第二位字不包含言字的学生年龄。
知识点:
SQL语句优化也属于数据库优化的一部分; 使用like模糊查询会引起全表扫描,查询速度变慢,一般尽量尽量避免使用like关键字进行模糊查询。
2. in和=的区别
-
查询数据时,如果查询的只有一个对象参数,那么in等价于= 如果查询的是一个结果集,那么只能用in,不能用= 举个栗子:
SELECT * FROM 学生表 WHERE 姓名 in (张三); #.查询姓名为张三的学生。等价于以下语法: select * from 学生表 WHERE 姓名 = 张三;
in关键字查询的是结果集,表示多个= 相与,不能用单独的=代替
SELECT * FROM 学生表 WHERE 姓名 in (张三 , 李四); #查询名字为张三或者李四的学生信息,等价于: select * from 学生表 where 姓名 = 张三 or 姓名 = 李四;
检索时,= 比in的效率更高,因为=能更好的识别索引,in通常要纵览一下全表,速度慢一点。
下一篇:
mysql学习总结二:认识mysql