数据库模糊查询部分,刷题小结

早上刷了会数据库题型,长时间不练习有的重要知识点居然忘了,赶紧记录一下

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通常要纵览一下全表,速度慢一点。

经验分享 程序员 微信小程序 职场和发展