sql-logical-funtions
SQL - 条件逻辑函数 (Conditional Logic Functions)
Section titled “SQL - 条件逻辑函数 (Conditional Logic Functions)”SQL 不仅用于检索数据;它也用于转换数据。条件逻辑函数允许你直接在查询中实现 if-then-else 风格的逻辑。这对于创建派生列 (derived columns)、清理数据以及处理特殊情况而无需在应用层 (application layer) 处理数据来说,都非常强大。
CASE 语句
Section titled “CASE 语句”CASE 语句是 SQL 中条件逻辑的基石,它是 ANSI SQL 标准的一部分,使其在不同的数据库系统之间具有高度可移植性。它评估一系列条件并返回多个可能的结果表达式之一。
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE else_resultEND示例:按价格对产品进行分类
Section titled “示例:按价格对产品进行分类”想象一个 Products(产品)表。我们希望在查询结果中添加一个名为 PriceCategory 的新临时列。
SELECT ProductName, Price, CASE WHEN Price < 20.00 THEN 'Budget' WHEN Price >= 20.00 AND Price < 100.00 THEN 'Standard' WHEN Price >= 100.00 THEN 'Premium' ELSE 'Uncategorized' END AS PriceCategoryFROM Products;这个查询将评估每个产品的价格并将其分配到一个类别,使报告更具可读性。
COALESCE:返回第一个非 NULL 值
Section titled “COALESCE:返回第一个非 NULL 值”COALESCE 函数是处理 NULL 值的一个便捷快捷方式。它接受一个参数列表,并返回其中第一个非 NULL 的值。
COALESCE(value1, value2, ..., fallback_value)示例:查找联系电话
Section titled “示例:查找联系电话”假设 Users(用户)表有不同的电话号码列。我们希望为每个用户获取最佳可用联系电话。
SELECT UserName, COALESCE(MobilePhone, HomePhone, WorkPhone, 'Not Available') AS ContactNumberFROM Users;此查询将首先检查 MobilePhone。如果它是 NULL,它将检查 HomePhone。如果那也是 NULL,它将检查 WorkPhone。如果所有都为 NULL,它将返回字符串 ‘Not Available’。
NULLIF:如果两个表达式相等则返回 NULL
Section titled “NULLIF:如果两个表达式相等则返回 NULL”NULLIF 函数接受两个参数,如果它们相等则返回 NULL。否则,它返回第一个参数。这对于防止除以零错误或将某些值视为 NULL 很有用。
NULLIF(expression1, expression2)示例:安全除法
Section titled “示例:安全除法”假设我们正在从两个列 ItemsSold(售出商品)和 ItemsReturned(退回商品)计算一个比率。ItemsSold 中的值为 0 将导致除以零错误。
-- 如果 ItemsSold 为 0,这可能会导致错误-- SELECT ItemsReturned / ItemsSold FROM SalesMetrics;
-- 使用 NULLIF 的安全版本SELECT ItemsReturned / NULLIF(ItemsSold, 0) AS ReturnRatioFROM SalesMetrics;如果 ItemsSold 为 0,NULLIF(ItemsSold, 0) 将变为 NULL。在 SQL 中,任何与 NULL 进行的算术运算结果都为 NULL,从而优雅地避免了错误。
特定于数据库的函数
Section titled “特定于数据库的函数”虽然 CASE、COALESCE 和 NULLIF 是标准函数,但某些数据库提供了它们自己的函数。例如,SQL Server 有 IIF(condition, value_if_true, value_if_false),它是简单 CASE 语句的紧凑替代方案。然而,为了最大程度的可移植性,最好尽可能坚持使用标准函数。