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.