ifnull 和 isnull 的用法 以及其平替方法

这篇具有很好参考价值的文章主要介绍了ifnull 和 isnull 的用法 以及其平替方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ifnull 和 isnull 的用法

ifnull 和 isnull 都是 MySQL 的函数,用于对 NULL 值进行处理。在 SQL 查询中,遇到 NULL 值会导致计算错误或者返回空值,因此需要使用 ifnull 和 isnull 对 NULL 值进行检测和替换。ifnull 函数可以用于替换空值,isnull 函数则用于判断给定的表达式是否为 NULL 值。ifnull 和 isnull 的语法如下:

IFNULL(expr1, expr2); ISNULL(expr);

其中,expr1 是需要检测的表达式,expr2 是用于替换 NULL 值的值。使用 ifnull 和 isnull 时需要注意以下几点:

  • ifnull 函数返回第一个非 NULL 值,如果都是 NULL,则返回 expr2。
  • isnull 函数返回一个布尔值,如果表达式为 NULL,则返回 1,否则返回 0。
  • ifnull 和 isnull 都可以在 SELECT、INSERT、UPDATE 和 REPLACE 语句中使用。

假设我们有一个存储用户信息的表 users,其中包含了用户 ID、用户名和手机号三个字段。但是有些用户可能没有手机号,因此手机号列可能会出现 NULL 值。我们现在需要查询所有用户的 ID 和手机号,如果手机号为空,则使用默认值 000-0000-0000。可以使用 ifnull 函数如下:

SELECT user_id, IFNULL(phone_number, '000-0000-0000') AS phone_number FROM users;

在上面的示例中,我们使用了 IFNULL 函数检测手机号列是否为 NULL 值,并根据检测结果用默认值替换了 NULL 值。

如果不需要替换 NULL 值,而只是需要判断表达式是否为 NULL,则可以使用 isnull 函数。例如,我们现在需要查询所有手机号为空的用户信息,可以使用 isnull 函数如下:

SELECT user_id, phone_number FROM users WHERE ISNULL(phone_number);

在上面的示例中,我们使用了 ISNULL 函数判断手机号列是否为 NULL 值,并在 WHERE 子句中过滤了为空的结果。

其他与 ifnull 和 isnull 类似的函数

除了 ifnull 和 isnull,还有一些与这两个函数类似的函数可以用于对 NULL 值进行处理。其中比较常见的包括以下几种:

coalesce

coalesce 函数是一个通用的函数,可以用于检测多个表达式是否为 NULL 值,并返回第一个非 NULL 值。其语法如下:

COALESCE(expr1, expr2, ..., expr_n);

在上面的语法中,expr1 是需要检测的第一个表达式,expr2expr_n 是需要检测的其他表达式。如果所有表达式都为 NULL,则返回 NULL 值。

假设我们有一个存储用户信息的表 users,其中包含了用户 ID、用户名和手机号三个字段。但是有些用户可能没有手机号或者用户名,因此这些列可能会出现 NULL 值。我们现在需要查询所有用户的 ID、用户名和手机号,如果这些列为空,则使用默认值。可以使用 coalesce 函数如下:

SELECT user_id, COALESCE(username, 'Unknown') AS username, COALESCE(phone_number, '000-0000-0000') AS phone_number FROM users;

在上面的示例中,我们使用了 COALESCE 函数检测用户名和手机号列是否为 NULL 值,并根据检测结果用默认值替换了 NULL 值。

nullif

nullif 函数用于比较两个表达式,如果这两个表达式相等,则返回 NULL 值。主要用于在避免除以零或其他无效操作时使用。其语法如下:

NULLIF(expr1, expr2);

在上面的语法中,expr1expr2 是需要比较的表达式。如果这两个表达式相等,则返回 NULL 值。

假设我们有一个存储商品信息的表 products,其中包含了商品名称、价格和数量三个字段。我们现在需要计算每个商品的单价,但是有些商品数量为 0,因此需要使用 nullif 函数避免除以零。可以使用 nullif 函数如下:

SELECT product_name, price / NULLIF(quantity, 0) AS unit_price FROM products; 文章来源地址https://www.toymoban.com/news/detail-794694.html

在上面的示例中,我们使用了 NULLIF 函数比较数量列是否为 0,如果是则返回 NULL 值,避免了除以零的错误。

结论

ifnull 和 isnull 是 MySQL 中常用的函数,用于处理 NULL 值。ifnull 用于替换 NULL 值,isnull 用于判断表达式是否为 NULL 值。除了这两个函数之外,还有一些与 ifnull 和 isnull 类似的函数可用于对 NULL 值进行处理,包括 coalesce 和 nullif 等。在使用这些函数时,需要根据实际需求选择合适的语句,以达到最佳的查询效果。

示例代码

以下是用于演示 ifnull、isnull、coalesce 和 nullif 的 SQL 语句以及相应的结果:

ifnull 示例

SELECT user_id, IFNULL(phone_number, '000-0000-0000') AS phone_number FROM users;

user_id phone_number
1 111-1111-1111
2 222-2222-2222
3 000-0000-0000
4 NULL

isnull 示例

SELECT user_id, phone_number FROM users WHERE ISNULL(phone_number);

user_id phone_number
3 NULL
4 NULL

coalesce 示例

SELECT user_id, COALESCE(username, 'Unknown') AS username, COALESCE(phone_number, '000-0000-0000') AS phone_number FROM users;

user_id username phone_number
1 Alice 111-1111-1111
2 Bob 222-2222-2222
3 Unknown 000-0000-0000
4 Unknown 000-0000-0000

nullif 示例

SELECT product_name, price / NULLIF(quantity, 0) AS unit_price FROM products;

product_name unit_price
Apple 1.00
Banana 0.50
Orange NULL
Mango 2.00

到了这里,关于ifnull 和 isnull 的用法 以及其平替方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地之openai接口平替

    ------------恢复内容开始------------ 在上一篇文章中我们大致讲述了一下如何通过词嵌入向量的方式为大语言模型增加长期记忆,用于落地在私域场景的问题。其中涉及到使用openai的接口进行词嵌入向量的生成以及chat模型的调用 由于众所周知的原因,国内调用openai接口并不友好

    2024年02月06日
    浏览(39)
  • 数据库分片及其挑战

    ​数据库分片可以通过优化数据分布来提高可扩展性和性能,从而提高效率。数据库分片是一种有效管理大型数据库的强大技术。它将一个大型数据库分割成更小、更易管理的部分,称为分片。\\\"分片\\\"一词恰如其分地描述了将大型数据库分解为更小、更易管理的片段的方法。

    2024年02月12日
    浏览(39)
  • 近日遇到数据库及其他问题

    使用 以下语句,在上亿数据的表中执行速度较慢 可使用下面两种方式 或者 在编译完class文件,替换war包里面对应class文件后,报Could not reload resource bundles java.lang.NoSuchFieldException: cacheList,找不到对应action,在网上查找资料,发现可能是JDK版本问题,原来使用JDK8 编译有问题,

    2024年02月01日
    浏览(38)
  • 数据库:mysqldump用法详解

    目录 一、命令格式详解 1.1 语法格式 1.2 常用参数 1.3 完整参数

    2024年02月09日
    浏览(36)
  • MySQL查询数据库所有表名及其注释

    1 查询 数据库 所有表 select table_name  from  information_schema.tables  where  table_schema=\\\'sdam\\\' 2 查询数据库所有表 和表的 注释 SELECT TABLE_NAME, TABLE_COMMENT from  information_schema.tables  WHERE TABLE_SCHEMA = \\\'dam\\\'  ORDER BY TABLE_NAME; 3 查询数据库 单个表名所有表 注释 SELECT COLUMN_NAME 字段,column_com

    2024年02月10日
    浏览(39)
  • 了解您的数据库管理系统及其优化器

    模式 物品具有唯一标识符、唯一图像标识符、名称和价格。 仓库具有唯一标识符、名称以及由街道、城市和国家定义的位置。 对于每个可用的物品,我们记录每个仓库中的库存数量。如果某个物品在仓库中不可用,则这对没有记录。数量总是等于或大于1。 PostgreSQL 内部 在

    2024年02月21日
    浏览(30)
  • 华为openGauss高斯数据库 - gsql用法

    目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1  最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 l命令 1.3.2 du命令和dg命令 1.3.3 db命令 1.3.4 dn命令 1.3.5 d命令 1.3.6 dt命令 1.3.7 di命令 1.3.8 dv命令 1.

    2024年02月12日
    浏览(29)
  • 华为openGauss数据库入门 - gsql用法

    目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1  最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 l命令 1.3.2 du命令和dg命令 1.3.3 db命令 1.3.4 dn命令 1.3.5 d命令 1.3.6 dt命令 1.3.7 di命令 1.3.8 dv命令 1.

    2024年02月15日
    浏览(27)
  • mysql数据库limit的四种用法

    mysql数据库中limit子句可以被用于强制select语句返回指定的记录数。limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目;若果给定一个参数,则表示回记录行的最大

    2024年02月08日
    浏览(39)
  • Sql Server中查询数据库所有表及其数据总条数和占用空间

    1、查询某数据库中的所有数据表 SELECT name 数据表 FROM sysobjects WHERE xtype=\\\'u\\\' ORDER BY name 2、查询某数据库中的所有数据表及其数据总条数 SELECT a.name 数据表, b.rows 数据总条数 FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE ( a.type = \\\'u\\\' ) AND ( b.indid IN ( 0, 1 ) ) ORDER BY a.name,b.row

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包