GaussDB SQL基础语法示例:BOOLEAN表达式详解
BOOLEAN表达式是SQL中实现逻辑判断的核心工具,用于组合多个条件或处理真值判断。本文将结合GaussDB特性,通过实际场景解析其用法与最佳实践。
-- AND并列条件
SELECT * FROM employees
WHERE department = 'IT'
AND salary > 10000;
-- OR选择条件
SELECT product_name
FROM products
WHERE category = 'Electronics'
OR stock_quantity < 50;
-- NOT取反条件
SELECT order_id
FROM orders
WHERE NOT order_status = 'CANCELLED';
-- 三条件混合运算
SELECT customer_id
FROM customers
WHERE (age BETWEEN 25 AND 40)
AND (membership_level > 2)
OR is_vip_customer = TRUE;
-- 使用参数化布尔表达式
SELECT product_name, price
FROM products
WHERE
(category = 'Books' AND price < 50)
OR
(category = 'Electronics' AND price < 200)
AND is_available = TRUE;
-- 结合JSON字段的布尔判断
SELECT user_id, profile->>'is_active' as status
FROM users
WHERE profile->>'email_verified' = 'true'
AND (profile->>'is_subscribed')::BOOLEAN = TRUE;
-- EXISTS子查询中的布尔表达式
SELECT order_id
FROM orders o
WHERE EXISTS (
SELECT 1
FROM payments p
WHERE p.order_id = o.order_id
AND p.payment_status = 'SUCCESS'
);
SELECT
student_id,
CASE
WHEN (math_score > 85 AND english_score > 85) THEN '双科优秀'
WHEN (math_score > 90 OR english_score > 90) THEN '单科突出'
ELSE '需加强'
END AS evaluation
FROM exam_results;
-- 优先显示活跃用户
SELECT user_id, last_login
FROM users
ORDER BY
is_active DESC, -- TRUE值排在前
last_login DESC;
运算符优先级
NOT > AND > OR,复杂条件建议使用括号明确优先级:
-- 正确写法
WHERE (A OR B) AND C
NULL值处理
BOOLEAN字段可能包含NULL,需显式处理:
SELECT *
FROM products
WHERE is_featured = TRUE
OR is_featured IS NULL; -- 包含未标记的情况
隐式类型转换
GaussDB支持字符串转布尔值('true'/'false'),但建议显式转换:
SELECT *
FROM config
WHERE enabled::BOOLEAN = TRUE; -- 明确类型转换
性能优化
布尔字段建议创建索引:
CREATE INDEX idx_user_active ON users(is_active);
错误示例:运算符优先级导致逻辑错误
SELECT *
FROM orders
WHERE shipped = TRUE OR paid = TRUE AND status = 'COMPLETED';
-- 正确写法(添加括号)
SELECT *
FROM orders
WHERE (shipped = TRUE OR paid = TRUE)
AND status = 'COMPLETED';
简化复杂条件
使用布尔代数简化逻辑:
-- 原始条件
WHERE (A AND B) OR (A AND C)
-- 可简化为
WHERE A AND (B OR C)
动态查询构建
在应用程序中拼接布尔表达式时,注意防止SQL注入:
# Python示例(安全参数化)
query = """
SELECT * FROM products
WHERE category = %s
AND price < %s
"""
cursor.execute(query, ('Electronics', 500))
通过灵活运用BOOLEAN表达式,可以显著提升SQL查询的表达能力和执行效率。