本文主要是介绍谓词和CASE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
谓词(LIKE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS)及 CASE
假如我们有一张表,表名为 predicate_table,如下所示:
+---------------+---------------+-------------+-------------+
| number_column | string_column | date_column | bool_column |
+---------------+---------------+-------------+-------------+
| 10 | Apple | 2024-06-10 | 1 |
| 20 | Banana | 2024-06-11 | 0 |
| 15 | Orange | 2024-06-12 | 1 |
+---------------+---------------+-------------+-------------+
谓词
在SQL中,谓词是返回值为真值(TRUE、FALSE或UNKNOWN)的表达式。谓词通常由比较运算符、逻辑运算符和特殊的值(如NULL)组成,它们可以用于筛选、限制或者连接数据表中的数据SQL中的常见谓词主要有LIKE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS等
-
LIKE:使用通配符检查字符串是否匹配模式。
SELECT * FROM predicate_table WHERE string_column LIKE 'Ap%';+---------------+---------------+-------------+-------------+ | number_column | string_column | date_column | bool_column | +---------------+---------------+-------------+-------------+ | 10 | Apple | 2024-06-10 | 1 | +---------------+---------------+-------------+-------------+ 1 row in set (0.00 sec)
-
BETWEEN:检查值是否在指定范围内。
SELECT * FROM predicate_table WHERE date_column BETWEEN '2024-06-10' AND '2024-06-11';+---------------+---------------+-------------+-------------+ | number_column | string_column | date_column | bool_column | +---------------+---------------+-------------+-------------+ | 10 | Apple | 2024-06-10 | 1 | | 20 | Banana | 2024-06-11 | 0 | +---------------+---------------+-------------+-------------+ 2 rows in set (0.00 sec)
-
IS NULL / IS NOT NULL:检查值是否为空或非空。
SELECT * FROM predicate_table WHERE string_column IS NULL;Empty set (0.00 sec) --这是因为我们的数据表中不存在空值,所以查询的结果为空
SELECT * FROM predicate_table WHERE string_column IS NOT NULL;+---------------+---------------+-------------+-------------+ | number_column | string_column | date_column | bool_column | +---------------+---------------+-------------+-------------+ | 10 | Apple | 2024-06-10 | 1 | | 20 | Banana | 2024-06-11 | 0 | | 15 | Orange | 2024-06-12 | 1 | +---------------+---------------+-------------+-------------+ 3 rows in set (0.00 sec)
"上面"和"下面"的查询结果之间的差异,主要是由
WHERE
子句中的NOT
关键字引起的。换句话说,NOT
关键字的存在或不存在,导致了查询结果的不同。 -
IN:检查值是否在给定的列表中。
SELECT * FROM predicate_table WHERE number_column IN (10, 15);+---------------+---------------+-------------+-------------+ | number_column | string_column | date_column | bool_column | +---------------+---------------+-------------+-------------+ | 10 | Apple | 2024-06-10 | 1 | | 15 | Orange | 2024-06-12 | 1 | +---------------+---------------+-------------+-------------+ 2 rows in set (0.00 sec)
-
EXISTS 子查询:
SELECT * FROM predicate_table p WHERE EXISTS (SELECT *FROM predicate_tableWHERE number_column < 11 );+---------------+---------------+-------------+-------------+ | number_column | string_column | date_column | bool_column | +---------------+---------------+-------------+-------------+ | 10 | Apple | 2024-06-10 | 1 | | 20 | Banana | 2024-06-11 | 0 | | 15 | Orange | 2024-06-12 | 1 | +---------------+---------------+-------------+-------------+ 3 rows in set (0.00 sec)
子查询会检查是否存在满足条件
date_column < '2024-06-11'
的行。如果存在,EXISTS
返回TRUE
,子查询会返回相应的行;否则,返回空结果集。很难明白?不用着急。实际上即使不使用 EXISTS ,基本上也都可以用 IN 或者 NOT IN 代替。
CASE 表达式(很常用且简单)
当涉及到 SQL 查询时,“CASE”是一种非常有用的表达式,允许在查询中执行条件逻辑。它允许根据条件的真假来返回不同的值。CASE 表达式通常与 SELECT 语句一起使用,但也可以在 WHERE、ORDER BY 和 GROUP BY 子句中使用。其语法为:
CASEWHEN 求值表达式1 THEN 表达式1WHEN 求值表达式2 THEN 表达式2...ELSE 表达式
END
举个例子:
SELECT *,CASEWHEN number_column < 15 THEN 'Small'WHEN number_column >= 15 AND number_column < 25 THEN 'Medium'ELSE 'Large'END AS number_category
FROMpredicate_table;+---------------+---------------+-------------+-------------+-----------------+
| number_column | string_column | date_column | bool_column | number_category |
+---------------+---------------+-------------+-------------+-----------------+
| 10 | Apple | 2024-06-10 | 1 | Small |
| 20 | Banana | 2024-06-11 | 0 | Medium |
| 15 | Orange | 2024-06-12 | 1 | Medium |
+---------------+---------------+-------------+-------------+-----------------+
3 rows in set (0.00 sec)
ELSE 可以省略,但是不建议。
END 一定不能省略!!!
这个查询的结果虽然比原表多了一列,但是不影响原表,而且这一列只在这个查询语句中存在。
这篇关于谓词和CASE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!