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