PostgreSQL 表达式详解
在 PostgreSQL 中,表达式(Expression)是由一个或多个值、运算符、函数和 SQL 语句组成的计算单元。表达式用于查询、更新、插入数据时的计算操作,可以返回单个值或一个数据集。
1. 表达式的分类
PostgreSQL 主要支持以下几类表达式:
- 算术表达式
- 比较表达式
- 逻辑表达式
- 字符串表达式
- 日期时间表达式
- 数组表达式
- JSON 表达式
- CASE 表达式
- 子查询表达式
2. 算术表达式
算术表达式用于执行数学计算,涉及 +、-、*、/、% 等运算符。
示例
SELECT 10 + 5; -- 结果:15
SELECT 20 - 4; -- 结果:16
SELECT 8 * 7; -- 结果:56
SELECT 10 / 2; -- 结果:5
SELECT 10 % 3; -- 结果:1
应用在查询语句中:
SELECT id, salary, salary * 1.1 AS new_salary FROM employees;
以上查询会计算 salary 增长 10% 后的新值。
3. 比较表达式
比较表达式用于比较两个值,返回 TRUE 或 FALSE。
示例
SELECT 10 = 10; -- 结果:TRUE
SELECT 10 <> 5; -- 结果:TRUE
SELECT 10 > 5; -- 结果:TRUE
SELECT 10 < 5; -- 结果:FALSE
SELECT 10 >= 10; -- 结果:TRUE
SELECT 10 <= 11; -- 结果:TRUE
应用在 WHERE 语句中:
SELECT * FROM employees WHERE salary > 5000;
4. 逻辑表达式
逻辑表达式用于组合多个条件,返回 TRUE 或 FALSE。
示例
SELECT TRUE AND FALSE; -- 结果:FALSE
SELECT TRUE OR FALSE; -- 结果:TRUE
SELECT NOT TRUE; -- 结果:FALSE
用于数据查询:
SELECT * FROM employees WHERE age > 30 AND department = 'IT';
SELECT * FROM employees WHERE salary > 7000 OR position = 'Manager';
SELECT * FROM employees WHERE NOT department = 'HR';
5. 字符串表达式
字符串表达式用于连接、匹配或操作字符串。
示例
SELECT 'Hello' || ' World'; -- 结果:Hello World
SELECT UPPER('postgresql'); -- 结果:POSTGRESQL
SELECT LOWER('POSTGRESQL'); -- 结果:postgresql
SELECT LENGTH('database'); -- 结果:8
应用在查询中:
SELECT first_name || ' ' || last_name AS full_name FROM employees;
6. 日期时间表达式
日期时间表达式用于操作和计算日期时间数据。
示例
SELECT NOW(); -- 返回当前时间戳
SELECT CURRENT_DATE; -- 返回当前日期
SELECT CURRENT_TIME; -- 返回当前时间
SELECT EXTRACT(YEAR FROM NOW()); -- 提取当前年份
SELECT AGE('2000-01-01'); -- 计算从 2000 年 1 月 1 日到现在的时间差
应用在查询中:
SELECT * FROM orders WHERE order_date > CURRENT_DATE - INTERVAL '30 days';
以上查询会获取过去 30 天内的订单。
7. 数组表达式
数组表达式用于存储和操作数组数据。
示例
SELECT ARRAY[1, 2, 3] || ARRAY[4, 5]; -- 结果:{1,2,3,4,5}
SELECT ARRAY[10, 20, 30] @> ARRAY[20]; -- 结果:TRUE
SELECT ARRAY[10, 20, 30] <@ ARRAY[10, 20, 30, 40]; -- 结果:TRUE
应用在查询中:
SELECT * FROM products WHERE tags @> ARRAY['Electronics'];
以上查询会返回包含 “Electronics” 标签的产品。
8. JSON 表达式
PostgreSQL 支持 JSON 数据类型,并提供了丰富的 JSON 操作表达式。
示例
SELECT '{"name": "Alice", "age": 25}'::jsonb -> 'name'; -- 结果:"Alice"
SELECT '{"person": {"name": "Bob"}}'::jsonb #> '{person, name}'; -- 结果:"Bob"
应用在查询中:
SELECT data->>'name' FROM users WHERE data->>'age' > '30';
以上查询会获取年龄大于 30 的用户姓名。
9. CASE 表达式
CASE 表达式用于实现条件判断,相当于 SQL 版的 if-else。
示例
SELECT
first_name,
salary,
CASE
WHEN salary > 10000 THEN 'High'
WHEN salary BETWEEN 5000 AND 10000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employees;
CASE 表达式的用途:
- 计算分级
- 数据转换
- 动态分组
10. 子查询表达式
子查询表达式用于嵌套查询。
示例
SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
应用:
SELECT name FROM departments WHERE id IN (SELECT department_id FROM employees WHERE salary > 7000);
以上查询会返回薪资高于 7000 的员工所在的部门名称。
总结
PostgreSQL 提供多种类型的表达式,常见包括:
- 算术表达式(数学计算)
- 比较表达式(值比较)
- 逻辑表达式(条件组合)
- 字符串表达式(字符串处理)
- 日期时间表达式(时间计算)
- 数组表达式(数组操作)
- JSON 表达式(JSON 处理)
- CASE 表达式(条件判断)
- 子查询表达式(嵌套查询)
掌握 PostgreSQL 表达式,可以更灵活地构造 SQL 语句,提高数据查询和操作的效率!更多详细内容请关注其他相关文章。