“我不要你觉得,我要我觉得“
不知道大家有没有突然失忆的情况?
试图说明一件事情的经过,却只能结结巴巴地说个大概没法细细说清?
贫民,不,平民且亲切的SQL自然也是有相关的应对措施的。
杠精专场
“我不管我这个对不对,但你那个就是不对。”
成,今天先来介绍以下NOT(不是)的用法。
NOT IN
Not表示否认,在与 IN(之中)操作符联合使用时,NOT可以找出与条件列表不匹配的行。
找出在 (column) 列中除去括号内数值 (value_1, value_2, ...) 的所有行:
WHERE col_name
NOT IN (value_1, value_2, ...)
IS NOT NULL
在MySQL中,NOT(不是)支持对IN(之中)、BETWEEN(之间) 和 EXISTS(存在)子句取反,甚至可以轻松去除空值。
找出列中所有非 (not) 空值 (null) 的行:
WHERE col_name IS NOT NULL
由于目前我们接触的例子相对简单,但是在复杂的子句中,NOT是非常有用的。
创个练习表
大家还记得如何创建新的工作表么?
#建立一个测试表,里面有id,语句和值:
CREATE TABLE 测试 (id int, 语句 varchar(100), 值 int);
#放入数据:
INSERT INTO 测试
VALUE (1, "我觉得", 3),
(2, "我不要你觉得", 6),
(3, "我要我觉得", null),
(4, "你觉得", 5);
看一下我们的表是什么样子的:
SELECT * FROM 测试
否认举例
找出练习表中ID不是1和3的数据:
SELECT id, 语句
FROM 测试
WHERE id NOT IN (1, 3)
除空值举例
找出练习表中,值不是空值 (null) 的数据:
SELECT id, 语句, 值
FROM 测试
WHERE 值 IS NOT NULL
懵懵懂懂
下面来介绍一下通配符 (wildcard)。Like是“像”的意思,与上文中粗暴的NOT不同的是,它为失忆症患者【划掉】,为只想要匹配“一部分数值”的用户提供了方便的搜索方法。
Like 的好伙伴有百分号(%)以及下划线(_)。
“%“式随性
百分号(%)比较随性,一个百分号便可匹配不论多少的任意字符。
找出所有以“我觉得”开头的值,并且接受“我觉得”之后的任意字符,不论多少,要注意的是,SQL在引号内部分区分大小写:
WHERE col_name LIKE '我觉得%'
中间出现“我觉得”:
WHERE col_name LIKE '%我觉得%'
以“你觉得”开头,“我觉得”结尾:
WHERE col_name LIKE '你觉得%我觉得'
这里要留要的是,尾空格会导致类似于“%我觉得”的值无法匹配到,因为在最后的“得”后有多余的字符(空格)。
“%”无法匹配NULL,因为NULL是空值,不存在。
“_“式单一
相比之下,下划线(_)比较严厉,每次只能匹配单个字符,不能多也不能少。
找出任意“X觉得”:
WHERE col_name LIKE '_ 觉得'
这里会返回类似于“我觉得”或者“你觉得”的值,但不会返回“我要我觉得”这些超出长度的值。
百分号举例
找出所有包含“觉得”二字的语句(%觉得%):
SELECT 语句
FROM 测试
WHERE 语句 LIKE "%觉得%"
下划线举例
找出所有为“X觉得”的语句:
SELECT 语句
FROM 测试
WHERE 语句 LIKE "_觉得"
小结
在寻找近似信息的时候,SQL还可以用正则(REGEXP)来处理,但由于这方面会涉及到一些别的表达式,我准备过段时间再细细说来。
复习一下今天的重点:
WHERE...LIKE...:寻找出近似值;
%:任何符合条件的语句数值,无论长短;
_:任何符合条件的语句数值,只能匹配单一值。
下划线的效果可以叠加哟:
SELECT 语句
FROM 测试
WHERE 语句 LIKE "___觉得" #这里有三个下划线!
如果能熟练掌握对通配符的运用,那就可以有效应对突然失忆【不是】的症状了。
希望本文能帮助大家初步了解SQL的通配符概念,如果还是有什么疑问或是建议的话,欢迎留言询问~
祝各位学习愉快!