PostgreSQL - 表达式
PostgreSQL - 表达式
Section titled “PostgreSQL - 表达式”SQL 中的表达式是一个或多个值、运算符和函数的组合,它会计算出一个单一的值。表达式是查询的构建块,允许您执行计算、操作数据和指定复杂条件。
查询中的语法
Section titled “查询中的语法”表达式可以在 SQL 语句的各个部分中使用,最常见的是在 SELECT 列表和 WHERE 子句中。
SELECT expression_1, expression_2, ...FROM table_nameWHERE conditional_expression;让我们通过现代示例来探索不同类型的 PostgreSQL 表达式。我们将使用以下示例表:
CREATE TABLE employees ( id INT PRIMARY KEY, first_name TEXT, last_name TEXT, department TEXT, salary NUMERIC(10, 2), hire_date DATE);
INSERT INTO employees VALUES(1, 'Alice', 'Williams', 'Engineering', 90000.00, '2022-03-15'),(2, 'Bob', 'Smith', 'Engineering', 85000.00, '2021-07-01'),(3, 'Charlie', 'Brown', 'Marketing', 72000.00, '2023-01-20'),(4, 'Diana', 'Jones', 'Sales', 95000.00, '2020-11-10');布尔表达式求值为 TRUE(真)、FALSE(假)或 NULL(空)。它们是 WHERE 子句的基础,用于根据特定条件过滤行。
-- 查找“Engineering”部门中薪水超过 80000 的所有员工SELECT first_name, last_name, salaryFROM employeesWHERE department = 'Engineering' AND salary > 80000.00;此查询将产生以下结果:
first_name | last_name | salary------------+-----------+---------- Alice | Williams | 90000.00 Bob | Smith | 85000.00(2 rows)数值表达式执行数学计算。它们可以在 SELECT 列表中用于计算新值,或在 WHERE 子句中用于条件逻辑。
-- 为每位员工计算 5% 的奖金SELECT first_name, salary, salary * 0.05 AS bonusFROM employees;这将产生:
first_name | salary | bonus------------+----------+---------- Alice | 90000.00 | 4500.000 Bob | 85000.00 | 4250.000 Charlie | 72000.00 | 3600.000 Diana | 95000.00 | 4750.000(4 rows)SUM()、AVG()、COUNT() 等聚合函数也从一组行中产生一个单一的数值。
-- 获取员工总数和平均薪水SELECT COUNT(*) AS total_employees, AVG(salary) AS average_salaryFROM employees;这将产生:
total_employees | average_salary-----------------+----------------------- 4 | 85500.00000000000000(1 row)日期和时间表达式
Section titled “日期和时间表达式”这些表达式用于操作日期和时间值。PostgreSQL 提供了丰富的函数和运算符用于日期算术。
-- 获取当前服务器时间戳并查找过去 2 年内雇佣的员工SELECT first_name, hire_dateFROM employeesWHERE hire_date > (CURRENT_DATE - INTERVAL '2 years');假设当前日期是 2024 年初,这将产生:
first_name | hire_date------------+------------ Alice | 2022-03-15 Charlie | 2023-01-20(2 rows)您还可以提取日期的部分或将其格式化为字符串。
-- 提取雇佣年份并格式化雇佣日期SELECT first_name, EXTRACT(YEAR FROM hire_date) AS hire_year, TO_CHAR(hire_date, 'Month DD, YYYY') AS formatted_dateFROM employees;