正魔大战在即,掌门令我召集“青云门”、“天音寺”和“焚香谷”的所有弟子。
这我知道!用 OR!Sect='青云门' OR Sect='天音寺' OR Sect='焚香谷'...
笨!要是有一百个门派,你难道要写一百个 OR?用 IN,一招搞定。
IN 操作符允许你在 WHERE 子句中规定多个值。
SELECT * FROM Disciples
WHERE Sect IN ('青云门', '天音寺', '焚香谷');
这就相当于问:你的门派在“这个名单”里吗?
如果名单太长,或者名单本身就在数据库里(比如要找所有“正道”门派的弟子),我们可以用子查询:
SELECT * FROM Disciples
WHERE Sect IN (SELECT SectName FROM Sects WHERE Alignment = '正道');
这就像是先发一道“符箓”去查正道有哪些门派,然后再把结果传给主阵法。
那如果要找修为在 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 之间的弟子(太弱的或太强的):
SELECT * FROM Disciples
WHERE Power NOT BETWEEN 1000 AND 5000;