Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


WHERE子句

📄字数 993
👁️阅读量 加载中...

一、功能描述

WHERE子句用于筛选数据,是SQL查询中用于限制结果集的重要条件语句,决定了表中哪些行应该被返回、更新、删除或参与计算。

此子句语法为'WHERE' bool_expr,其主要依赖于bool_expr逻辑表达式,其具体内容请参见逻辑表达式

二、语法格式

三、参数说明

四、谓词

WHERE子句的功能实现主要依赖于谓词(predicate),SQL中的谓词是一个表达式,用于在SQL查询中对数据进行逻辑判断和筛选,其结果是布尔值。
谓词主要包含:

  • 通过比较运算符形成的比较谓词:=><<>!=>=<=
  • 其他由关键字形成的谓词:[NOT] LIKE ... [ESCAPE ...]BETWEEN ... AND ...IS NULLIS NOT NULLINNOT INEXISTSNOT EXISTS等。

五、谓词说明

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

六、示例

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

Execute successful.
Use time:28 ms.

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

Total 4 records effected.
Use time:4 ms.

-- 使用比较谓词筛选数据
SQL> SELECT * FROM tab_pre WHERE id>3;

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

(1 row)
Use time:5 ms.

-- 使用LIKE和ESCAPE谓词筛选数据
SQL> SELECT * FROM tab_pre WHERE name LIKE 'on%';

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

(1 row)
Use time:0 ms.

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

Execute successful.
Use time:39 ms.

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

Total 3 records effected.
Use time:0 ms.

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

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

(1 row)
Use time:0 ms.

-- 使用EXISTS谓词筛选数据
-- 返回结果为false情况
SQL> SELECT * FROM tab_pre WHERE EXISTS (SELECT * FROM tab_pre WHERE id=66);

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

(0 rows)
Use time:3 ms.

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

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

(4 rows)
Use time:0 ms.