PostgreSQL 表达式详解
                           
天天向上
发布: 2025-03-11 23:32:31

原创
587 人浏览过

在 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. 比较表达式

比较表达式用于比较两个值,返回 TRUEFALSE

示例

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. 逻辑表达式

逻辑表达式用于组合多个条件,返回 TRUEFALSE

示例

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 语句,提高数据查询和操作的效率!更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *