SQL - 表达式

你好啊,未来的 SQL 大师们!今天,我们将踏上一段激动人心的旅程,探索 SQL 表达式的世界。如果你是编程新手,不用担心——我会成为你的友好向导,我们会一步步前进。在本教程结束时,你将能够像专业人士一样编写 SQL 表达式!

SQL - Expressions

什么是 SQL 表达式?

让我们从基础开始。SQL 表达式就像是一个公式或计算,你可以在 SQL 查询中使用它。它是 一个或多个值、运算符和 SQL 函数的组合,计算结果为一个值。把它想象成给你的数据库查询添加风味的秘密酱汁!

例如,假设你有一个产品表,你想对所有价格应用 10% 的折扣。你可以使用这样的表达式:

SELECT product_name, price, price * 0.9 AS discounted_price
FROM products;

在这个查询中,price * 0.9 就是我们的 SQL 表达式。它取价格并乘以 0.9(这等同于减去 10%)。

SQL 布尔表达式

现在,让我们深入布尔表达式。这些就像 SQL 世界中的是非问题。它们的结果总是 TRUE、FALSE 或 NULL(意味着“未知”)。

布尔表达式在你想要过滤数据或在查询中做决策时非常有用。以下是一些在布尔表达式中常用的运算符:

运算符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
AND 逻辑与
OR 逻辑或
NOT 逻辑非

让我们通过一些例子来看看这些运算符的实际应用:

-- 查找所有价格超过 100 美元的产品
SELECT * FROM products WHERE price > 100;

-- 查找过去 30 天内的所有订单
SELECT * FROM orders WHERE order_date >= CURRENT_DATE - INTERVAL '30 days';

-- 查找在纽约或加利福尼亚的活跃客户
SELECT * FROM customers
WHERE (state = 'NY' OR state = 'CA') AND is_active = TRUE;

在每个例子中,WHERE 子句后面的部分都是一个布尔表达式。它就像是对数据库中的每一行数据提出一个是非问题。

SQL 数值表达式

接下来,我们来看看数值表达式。这些就像是 SQL 中的数学问题——它们涉及数字和算术运算。

以下是可以使用的基本算术运算符:

运算符 描述
+ 加法
- 减法
* 乘法
/ 除法
% 取模(余数)

让我们看一些例子:

-- 计算库存的总价值
SELECT product_name, quantity, price, quantity * price AS total_value
FROM inventory;

-- 计算员工的年龄
SELECT first_name, last_name, EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM birth_date) AS age
FROM employees;

-- 计算已花费的预算百分比
SELECT project_name, budget, spent, (spent / budget) * 100 AS percent_spent
FROM projects;

在这些例子中,我们使用数值表达式来对数据执行计算。这对于从现有数据中获取新的见解非常有用。

SQL 日期表达式

最后但同样重要的是,让我们来谈谈日期表达式。在 SQL 中处理日期可能会很棘手,但它也非常强大。日期表达式允许你在查询中操作和比较日期。

以下是一些常见的日期函数:

函数 描述
CURRENT_DATE 返回当前日期
CURRENT_TIMESTAMP 返回当前日期和时间
DATE_ADD 将指定的时间间隔添加到日期
DATE_SUB 从日期中减去指定的时间间隔
DATEDIFF 计算两个日期之间的差异

让我们看看这些函数的实际应用:

-- 查找今天下的订单
SELECT * FROM orders WHERE order_date = CURRENT_DATE;

-- 查找在过去 90 天内没有下订单的客户
SELECT * FROM customers
WHERE customer_id NOT IN (
SELECT DISTINCT customer_id
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '90 days'
);

-- 计算每个订单下单的天数
SELECT order_id, order_date,
DATEDIFF(CURRENT_DATE, order_date) AS days_ago
FROM orders;

这些日期表达式允许你执行与日期相关的复杂操作,这对于分析基于时间的数据至关重要。

就这样,朋友们!我们已经穿越了 SQL 表达式的土地,从布尔逻辑到数字计算到时间旅行(好吧,有点像)。记住,熟能生巧,所以不要害怕在你的查询中尝试这些表达式。

在结束之前,这里有一个 SQL 开玩笑给你:数据库管理员为什么离开他的妻子?因为她有太多的一对多关系!(砰!)

快乐查询,愿你的连接总是迅速,你的查询永远不会超时!

Credits: Image by storyset