Skip to content

谓词

功能描述

SQL语句中的谓词是一种特殊的函数,所有返回值均为逻辑值。

  • 通过比较运算符形成的比较谓词:=><<>!=>=<=
  • 其他由关键字形成的谓词:LIKENOT LIKEBETWEENIS NULLIS NOT NULLINNOT INEXISTSNOT EXISTSESCAPE等。

谓词使用场景如下:

  • 在查询语句的WHERE子句或者HAVING中使用(仅部分谓词可在HAVING中使用)。
  • 在连接查询中确定连接条件中使用。
  • 在更新或删除语句的WHERE条件中使用。
  • 在复制表或复制表数据的WHERE条件中使用。
  • 在存储过程、函数、触发器确定数据使用。

谓词说明如下:

  • 比较谓词可用于可比较数据类型间的数据比较,不可用于NULL数据的比较,使用比较谓词同NULL返回值均为空集即无数据返回,若需判断数据是否为NULL须使用IS NULLIS NOT NULL谓词。
  • [NOT] LIKE:字符和通配符%配合使用匹配数据,该谓词主要用于模糊匹配。
  • BETWEEN>=<=谓词的联合使用方式,必须指定上下边界即范围限制值。
  • IS [NOT] NULL:判断字段数据是否为NULL值,如要获取是否含有NULL值仅可使用该谓词。
  • [NOT] IN:字段值与IN后列表中的常量值进行匹配,若与其中任一个常量匹配则返回true否则返回false。
  • [NOT] EXISTS:使用子查询查询指定表是否存在一行或多行。
  • ESCAPE:自定义转义符,通常与LIKE搭配使用,用于匹配包含通配符(如 % 和 _)的文本。

示例

比较谓词:

sql
SQL> CREATE TABLE pre_tb(id INT,name VARCHAR(30));

SQL> INSERT INTO pre_tb VALUES(1,'abc')(2,null)(3,'def')(4,'one');

SQL> SELECT * FROM pre_tb WHERE id>3;

ID | NAME | 
------------------------------------------------------------------------------
4 | one|

LIKE和ESCAPE谓词:

sql
SQL> SELECT * FROM pre_tb WHERE name LIKE 'on%';

ID | NAME | 
------------------------------------------------------------------------------
4 | one|

SQL> CREATE TABLE tt_escape(id INT,cc VARCHAR);

SQL> INSERT INTO tt_escape VALUES(1,'test1')(2,'test2')(3,'%test3');

-- 查询cc列中以%开头的数据
SQL> SELECT * FROM tt_escape WHERE cc LIKE '\%%' ESCAPE '\';

ID | CC |
------------------------------------------------------------------------------
3 | %test3|

EXISTS谓词:

sql
-- 返回结果为false情况
SQL> SELECT * FROM pre_tb WHERE EXISTS (SELECT * FROM pre_tb WHERE id=66);

ID | NAME | 
------------------------------------------------------------------------------

-- 返回结果为true情况
SQL> SELECT * FROM pre_tb WHERE EXISTS (SELECT * FROM pre_tb WHERE id=1);

ID | NAME | 
------------------------------------------------------------------------------
1 | abc|
2 | <NULL>|
3 | def|
4 | one|