早上刷了会数据库题型,长时间不练习有的重要知识点居然忘了,赶紧记录一下
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通常要纵览一下全表,速度慢一点。