有些弟子刚入门,还没发法宝,那一栏是空的。我用 = 0 却查不到他们,为什么?
因为 NULL 不是 0,也不是空格。它是“无”,是虚无,是未知。你不能用“等于”去衡量“无”。
要判断一个值是否为 NULL,必须用 IS NULL 或 IS NOT NULL。
SELECT Name FROM Disciples
WHERE Weapon_ID IS NULL;
我们在计算法宝总攻击力时,如果遇到 NULL,想把它当成 0 来算,该怎么办?
MySQL: IFNULL() 或 COALESCE()
SELECT Name, Attack + IFNULL(Bonus, 0)
FROM Disciples;
SQL Server: ISNULL()
SELECT Name, Attack + ISNULL(Bonus, 0)
FROM Disciples;
Oracle: NVL()
SELECT Name, Attack + NVL(Bonus, 0)
FROM Disciples;
有没有一种咒语是所有门派通用的?有!那就是 COALESCE()。它会返回参数列表中的第一个非空值。
-- 通用写法 (MySQL, SQL Server, Oracle, PostgreSQL)
SELECT Name, COALESCE(Bonus, 0)
FROM Disciples;
原来“无”也可以变成“有”,只要心中(函数)有数。