每天学点SQL(009) LIKE/BETWEEN/IN/IS NULL 常见谓词


视频约120秒,关注收藏。


SQL 谓词

SQL 中的谓词指的是返回值是逻辑值的函数。我们知道函数的返回值可能是数字、字符串或者日期等等,但谓词的返回值全部是逻辑值 (TRUE/FALSE/UNKNOW),谓词是一种特殊的函数。

常见谓词

LIKE 模糊查询

<code>列名 LIKE 条件/<code>

其中关于条件,有四种匹配模式:

%: 表示任意0个或多个字符。可匹配任意类型和长度的字符。

_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

[ ]: 表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

[^ ]: 表示不在括号所列之内的单个字符。其取值和[]相同,但它要求所匹配对象为指定字符以外的任一个字符。

BETWEEN 范围查询

<code>列名 BETWEEN 左边界 AND 右边界/<code>

左边界、右边界,可以是表达式或者文字值,要求左边界小于右边界的值。

如果列名大于或等于左边界且小于等于右边界的值,则BETWEEN 返回TRUE,这样相当于以下条件:

列名>= 左边界 AND 列名 <= 右边界。

IN / NOT IN 查询

<code>列名 IN (值1, 值2, 值3…) 列名 NOT IN (值1, 值2, 值3…)/<code>

IN 用于值与一组值进行比较,如果值在值集内,则IN返回TRUE,否则返回FALSE或UNKNOW。

NOT IN 否定IN 的结果,如果值与值集内的任何值都不匹配,则NOT IN 返回TRUE,否则返回FALSE。

如果值集中的任何值为NULL,则运算符不返回任何行。

其中,IN 可以用OR 重写,相当于 (列名 = 值1 OR 列名 = 值2 OR 列名 = 值3…)

NOT IN 可以用AND 重写,相当于 (列名 != 值1 AND 列名 != 值2 AND 列名 != 值3…)

IS NULL / IS NOT NULL 查询

<code>列名 IS NULL 列名 IS NOT NULL/<code>

NULL 可以表示数据未知的值,可以简单理解为表示:不适用 或不存在的值。 NULL值是特殊的,因为任何与NULL 值的比较都不会导致TRUE 或 FALSE。

不能使用比较运算符的等于(=)将值与NULL值进行比较。

要确定列值是否为NULL,可以使用IS NULL,反之使用IS NOT NULL。

EXISTS 查询

<code>EXISTS 子查询/<code>

EXISTS 运算符用于指定子查询以测试行的存在。如果子查询包含任何行,则EXISTS运算符返回TRUE否则返回FALSE。EXISTS 运算符在找到行后立即终止查询处理,因此,可以利用EXISTS 运算符合此功能来提高查询性能。


798艺术区


常见谓词使用示例

假设表名students

包含以下几个字段:

其中,各字段定义为:sid为学生ID、name为姓名、gender为性别,age为年龄,province为所在省份,city为所在城市,district为所在区 (NULL表示未上报)。

IN 示例

<code>SELECT sid, name, province FROM students WHERE province IN (‘山东省’, ‘湖北省’)/<code>

该语句查询来自山东及湖北省学生信息。

IS NOT NULL 示例

<code>SELECT name, province, district FROM students WHERE province IN (‘山东省’, ‘湖北省’) AND district IS NOT NULL/<code>

该语句查询来自山东及湖北学生信息且区信息不为空。

BETWEEN 示例

<code>SELECT sid, name, age FROM students WHERE age BETWEEN 20 AND 23/<code>

该语句查询年龄在20-23岁的学生信息。

LIKE 示例

<code>SELECT name, gender, age FROM students WHERE name LIKE ‘李%’/<code>

该语句查询姓李的学生信息。


碎片时间,关注收藏。

往期视频:

每天学点SQL(001) SELECT语句

每天学点SQL(002) DISTINCT语句

每天学点SQL(003) WHERE子句

每天学点SQL(004) AND 或 OR

每天学点SQL(005) ORDER BY语句

每天学点SQL(006) 聚合函数

每天学点SQL(007) GROUP BY 子句

每天学点SQL(008) JOIN 表连接