谓词
功能描述
SQL语句中的谓词是一种特殊的函数,所有返回值均为逻辑值。
- 通过比较运算符形成的比较谓词:
=
、>
、<
、<>
、!=
、>=
、<=
。 - 其他由关键字形成的谓词:
LIKE
、NOT LIKE
、BETWEEN
、IS NULL
、IS NOT NULL
、IN
、NOT IN
、EXISTS
、NOT EXISTS
、ESCAPE
等。
谓词使用场景如下:
- 在查询语句的WHERE子句或者HAVING中使用(仅部分谓词可在HAVING中使用)。
- 在连接查询中确定连接条件中使用。
- 在更新或删除语句的WHERE条件中使用。
- 在复制表或复制表数据的WHERE条件中使用。
- 在存储过程、函数、触发器确定数据使用。
谓词说明如下:
- 比较谓词可用于可比较数据类型间的数据比较,不可用于NULL数据的比较,使用比较谓词同NULL返回值均为空集即无数据返回,若需判断数据是否为NULL须使用
IS NULL
和IS 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|