WHERE子句
📄字数 993
👁️阅读量 加载中...
一、功能描述
WHERE
子句用于筛选数据,是SQL
查询中用于限制结果集的重要条件语句,决定了表中哪些行应该被返回、更新、删除或参与计算。
此子句语法为'WHERE' bool_expr
,其主要依赖于bool_expr
逻辑表达式,其具体内容请参见逻辑表达式。
二、语法格式
三、参数说明
bool_expr
:过滤条件逻辑表达式,请参阅逻辑表达式
四、谓词
WHERE
子句的功能实现主要依赖于谓词(predicate),SQL中的谓词是一个表达式,用于在SQL查询中对数据进行逻辑判断和筛选,其结果是布尔值。
谓词主要包含:
- 通过比较运算符形成的比较谓词:
=
、>
、<
、<>
、!=
、>=
、<=
。 - 其他由关键字形成的谓词:
[NOT] LIKE ... [ESCAPE ...]
、BETWEEN ... AND ...
、IS NULL
、IS NOT NULL
、IN
、NOT IN
、EXISTS
、NOT EXISTS
等。
五、谓词说明
- 比较谓词可用于可比较数据类型间的数据比较,不可用于
NULL
数据的比较,作为过滤条件表达式时,使用比较谓词将数据同NULL
比较,均会比较失败,若需判断数据是否为NULL
须使用IS NULL
和IS 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.