comm存在null值的情况下,计算前要进行非null判断,所以A错。
IFNULL(expression, value)
参数说明:
expression:要判断是否为NULL的表达式或字段。
value:在expression为NULL时要返回的替代值。
正确答案是:B 和 D。
**分析:**
1. **A: `SELECT *, sal+comm as 总工资 from emp;`**
- 这个查询在计算总工资时直接将 `sal` 和 `comm` 相加。如果 `comm` 字段存在 `null` 值,那么结果也会是 `null`。这种情况下,不能正确计算总工资。
2. **B: `SELECT *, sal + if(comm is null, 0, comm) as 总工资 from emp;`**
- 这个查询使用了 `if` 函数来检查 `comm` 是否为 `null`。如果 `comm` 是 `null`,则使用 0 来代替 `null`,否则使用 `comm` 的实际值。这样可以确保在 `comm` 为 `null` 的情况下,仍然能够正确计算总工资。
3. **C: `SELECT *, ifnull(sal+comm, sal) as 总工资 from emp;`**
- 这个查询使用了 `ifnull` 函数,但它是检查 `sal+comm` 的结果是否为 `null`。如果 `comm` 是 `null`,则 `sal+comm` 结果也会是 `null`,此时 `ifnull` 会返回 `sal`。这种情况下,虽然避免了 `null` 值,但并没有正确计算总工资,因为忽略了 `comm` 的值。
4. **D: `SELECT *, sal + ifnull(comm, 0) as总工资 from emp;`**
- 这个查询使用了 `ifnull` 函数来检查 `comm` 是否为 `null`。如果 `comm` 是 `null`,则使用 0 来代替 `null`,否则使用 `comm` 的实际值。这样可以确保在 `comm` 为 `null` 的情况下,仍然能够正确计算总工资。
综上所述,B 和 D 是正确的答案,因为它们都正确处理了 `comm` 字段可能存在的 `null` 值,并正确计算了总工资。