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

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


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

like

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

USE data1;
SELECT 
`last_name`,	
  CONCAT(
    ',',`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

发布了8 篇原创文章 · 获赞 7 · 访问量 196

猜你喜欢

转载自blog.csdn.net/weixin_43178828/article/details/104075516