SELECT BookName,Writer,ISNULL(newbook,0) AS newbook FROM bookinfo_zerobasis;
不会把newbook一列的值全部转成了0了吧?
你问到了关键点。
先说结论:是的,如果 newbook 这一列本身是 NULL,就会变成 0;如果原本有非 NULL 值(比如 5、-3),则保持原值,不会被转成 0。
拆解你的 SQL
sql
SELECT BookName, Writer, ISNULL(newbook, 0) AS newbookFROM bookinfo_zerobasis;
ISNULL(newbook, 0)
意思是:如果
newbook列的值 是 NULL → 返回0如果
newbook列的值 不是 NULL → 返回该值本身AS newbook
只是把这一列查询结果的列名命名为newbook(可能覆盖原列名)
举例说明
假设 bookinfo_zerobasis 表的数据是:
| BookName | Writer | newbook |
|---|---|---|
| 红楼梦 | 曹雪芹 | NULL |
| 西游记 | 吴承恩 | 3 |
| 水浒传 | 施耐庵 | NULL |
| 三国演义 | 罗贯中 | 0 |
执行你的 SQL 后,结果变成:
| BookName | Writer | newbook |
|---|---|---|
| 红楼梦 | 曹雪芹 | 0 |
| 西游记 | 吴承恩 | 3 |
| 水浒传 | 施耐庵 | 0 |
| 三国演义 | 罗贯中 | 0 |
注意:原本就是
0的那一行,仍然保持0,不会变。
你担心的“全部转成0”不会发生
不会把所有行的值都变成 0,只有原本是
NULL的才会变。原本非
NULL的数字、字符串(如果是可转换类型)都会保留原值。
常见混淆点
ISNULL 和 COALESCE 在 SQL Server / 其他数据库中行为类似:
sql
-- 你的写法(SQL Server)ISNULL(newbook, 0)-- 等价于标准 SQL 写法COALESCE(newbook, 0)
两者都不会“强制全列变0”,只是处理 NULL。
如果你真的想把整列都改成 0(不管原来是什么)
那需要用 UPDATE:
sql
UPDATE bookinfo_zerobasisSET newbook = 0;
但你的 SELECT 语句只是查询显示,不会修改表里的原始数据。
一句话总结
ISNULL(newbook, 0)只把newbook列中原本是NULL的行显示为0,原本有值的保持不变,不是整列都变成 0