第八回:身在其中

—— IN 与 BETWEEN
👈 上一回:似是而非 🏠 回到大竹峰 下一回:化名之术 👉

正魔大战在即,掌门令我召集“青云门”、“天音寺”和“焚香谷”的所有弟子。

这我知道!用 OR!Sect='青云门' OR Sect='天音寺' OR Sect='焚香谷'...

笨!要是有一百个门派,你难道要写一百个 OR?用 IN,一招搞定。

🎯 众矢之的:IN

📜 集合心法

IN 操作符允许你在 WHERE 子句中规定多个值。

SELECT * FROM Disciples WHERE Sect IN ('青云门', '天音寺', '焚香谷');

这就相当于问:你的门派在“这个名单”里吗?

🌀 阵中阵:子查询 (Subquery)

如果名单太长,或者名单本身就在数据库里(比如要找所有“正道”门派的弟子),我们可以用子查询

SELECT * FROM Disciples WHERE Sect IN (SELECT SectName FROM Sects WHERE Alignment = '正道');

这就像是先发一道“符箓”去查正道有哪些门派,然后再把结果传给主阵法。

📏 进退有度:BETWEEN

那如果要找修为在 1000 到 5000 之间的弟子呢?或者找“七脉会武”期间发生的大事?

数值可以用 BETWEEN,但若是涉及日期,可要万分小心。

📜 区间心法

BETWEEN 操作符选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

SELECT * FROM Disciples WHERE Power BETWEEN 1000 AND 5000;
⏳ 岁月无情 (日期陷阱):

当你使用日期进行 BETWEEN '2000-01-01' AND '2000-01-31' 时,数据库通常将其理解为 2000-01-31 00:00:00

如果你有一条记录发生在 1月31日 中午,它会被漏掉

破解之法: 对于日期,建议使用 >=< (第二天),例如:
WHERE OrderDate >= '2000-01-01' AND OrderDate < '2000-02-01'

⚠️ 边界警告:
不同的数据库对边界的处理可能不同(是否包含 1000 和 5000)。通常情况下是包含的 (Inclusive),但最好亲自测试一下。

🧘‍♂️ 试炼:排除法

寻找修为不在 1000 到 5000 之间的弟子(太弱的或太强的):

SELECT * FROM Disciples WHERE Power NOT BETWEEN 1000 AND 5000;