数据库学习之MySQL (七)——模糊查询 通配符 like ‘between and’ in ‘is null’ 安全等于

MySQL学习专栏 正在持续更新中:)


上一篇 数据库学习之MySQL (六)——条件查询 条件表达式 逻辑表达式 讲了条件查询,那是比较精确的而又死板的,这里这里讲一下模糊查询。

like

这个就是一个执行通配符(wildcard character) 筛选的函数罢了
我们先来试一试下面的代码:

USE data1;
SELECT 
`last_name`,	
  CONCAT_WS(',',
    `first_name`,
    IFNULL(`manager_id`, 0),
    IFNULL(`job_id`, 0),
    IFNULL(`email`, 0),
    IFNULL(`commission_pct`, 0)
  ) 职工基本情况,
  `salary` 
FROM
  employees

WHERE
  `last_name` LIKE '%b%';

%就是通配符,注意通配符和正则表达式(regular expression) 是两码事,目的也不相同。
通配符是根据形势筛选个体(比如字符串 或者一个对象的某个属性),
正则表达式是在一个个体(一个字符串)中摘取自己想要的片段,摘取的过程就必须先匹配(match),锁定自己要的部分,再拿出来。

下面是运行结果:在这里插入图片描述
另外 之前学的 逻辑表达式完全也可以应用上,毕竟无论是模糊查询还是条件查询,都是表达式
where处改变了一下,代码如下:

WHERE
  NOT(salary>=10000 AND salary<=20000)
  AND `last_name` LIKE '%b%';

结果如下:
在这里插入图片描述
现在我们具体看看
LIKE 支持的通配符 % _ 介绍
其实就支持两种
百分号% 代表(通配)任意数量**(包括0个)的字符,意味着%可以代表所有**东西,除了NULL,类似于正则表达式中的*,这个星号匹配我们在SELECT * FROM employees;还用过。

下划线_ 代表(通配)1个的字符,类似于正则表达式中的 ?.

下面举个栗子:要last_name的第二个字符是下划线 以及 first_name的第二个字母是b的所有人的资料

WHERE
  `last_name` LIKE '_\_%'
  AND `first_name` LIKE '_b%';

在这里插入图片描述
这里转义的方式与绝大多数语言相同:利用反斜杠\
当然MySQL也可以自定义转义符号:比如想改成$

WHERE
  `last_name` LIKE '_$_%' ESCAPE '$'
  AND `first_name` LIKE '_b%';

between and

上一节教程提到了这个,between and其实可以完全实现这个功能。
在这里插入图片描述

WHERE
  salary between 10000 and 20000;

在这里插入图片描述
另外 换成

WHERE
  salary between 20000 and 10000;

你可以试试行不行:)

in

这里,我们假设需要找到所有last_name为Peter, Christopher, David, Oliver, Patrick的人,你应该怎么做?
上一节的知识 我们会这样:

USE data1;
SELECT 
`last_name`,
`first_name`,
`job_id`,	
  CONCAT(',',
    `last_name`,
    `first_name`,
    IFNULL(`manager_id`, 0),
    IFNULL(`job_id`, 0),
    IFNULL(`email`, 0),
    IFNULL(`commission_pct`, 0)
  ) 职工基本情况,
  `salary` 
FROM
  employees

WHERE
  first_name = 'Peter' OR
  first_name = 'Christopher' OR 
  first_name = 'David' OR 
  first_name = 'Oliver' OR 
  first_name = 'Patrick';

但是很明显 where部分太冗余了 如果代码放在一行可能更加难受,
而in就是解决这个问题的,我们看看改进后的where:

WHERE
  first_name IN('Peter','Christopher','David','Oliver','Patrick');

is null 和 is not null

当单元格为空,值就是NULL,我们想针对这类空值进行判断,该怎么办?

WHERE
  `commission_pct` = NULL;

这样吗? 你可以试试行不行2333

WHERE
  `commission_pct` IS NULL;

效果如下:
在这里插入图片描述
如果不为空 很简单

WHERE
  `commission_pct` IS NOT NULL;

安全等于 <=>

上面 IS 关键字只能判断NULL
= 只能判断普通值(不是NULL的)
有一个全能型选手能够搞定所有可能的判断,这就是安全判断

WHERE
  `commission_pct` <=> NULL;

在这里插入图片描述

WHERE
  `commission_pct` <=> 0.4;

在这里插入图片描述
但传统说法认为安全等于可读性不高 我觉得倒是挺靠谱的2333

下一站:数据库学习之MySQL (八)——排序查询 ORDER BY ASC DSC

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值