MySQL COALESCE函数使用方法示例详解
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">前言</a></li><li><a href="#_label1">基本语法</a></li><li><a href="#_label2">功能说明</a></li><li><a href="#_label3">使用场景</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_0">1. 处理 NULL 值替代</a></li><li><a href="#_lab2_3_1">2. 多列优先选择</a></li><li><a href="#_lab2_3_2">3. 计算中使用</a></li></ul><li><a href="#_label4">实际示例</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_3">示例1:基本使用</a></li><li><a href="#_lab2_4_4">示例2:表数据应用</a></li><li><a href="#_lab2_4_5">示例3:与 CASE 表达式等效</a></li></ul><li><a href="#_label5">注意事项</a></li><ul class="second_class_ul"></ul><li><a href="#_label6">与相关函数比较</a></li><ul class="second_class_ul"></ul><li><a href="#_label7">总结</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>前言</h2><p><code>COALESCE</code> 是 MySQL 中一个非常有用的函数,用于返回参数列表中的第一个非 NULL 值。下面详细介绍它的用法和示例。</p>
<p class="maodian"><a name="_label1"></a></p><h2>基本语法</h2>
<div class="jb51code"><pre class="brush:sql;">COALESCE(value1, value2, ..., valueN)
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>功能说明</h2>
<ul><li>函数从左到右依次检查每个参数</li><li>返回第一个不为 NULL 的参数值</li><li>如果所有参数都为 NULL,则返回 NULL</li></ul>
<p class="maodian"><a name="_label3"></a></p><h2>使用场景</h2>
<p class="maodian"><a name="_lab2_3_0"></a></p><h3>1. 处理 NULL 值替代</h3>
<div class="jb51code"><pre class="brush:sql;">SELECT COALESCE(column_name, '默认值') FROM table_name;
</pre></div>
<p>当 column_name 为 NULL 时,返回 ‘默认值’</p>
<p class="maodian"><a name="_lab2_3_1"></a></p><h3>2. 多列优先选择</h3>
<div class="jb51code"><pre class="brush:sql;">SELECT COALESCE(phone, mobile, email, '无联系方式') AS contact_info FROM customers;
</pre></div>
<p>按优先级选择第一个不为 NULL 的联系方式</p>
<p class="maodian"><a name="_lab2_3_2"></a></p><h3>3. 计算中使用</h3>
<div class="jb51code"><pre class="brush:sql;">SELECT product_name, price * COALESCE(discount, 1) AS final_price FROM products;
</pre></div>
<p>当 discount 为 NULL 时使用 1 作为默认折扣</p>
<p class="maodian"><a name="_label4"></a></p><h2>实际示例</h2>
<p class="maodian"><a name="_lab2_4_3"></a></p><h3>示例1:基本使用</h3>
<div class="jb51code"><pre class="brush:sql;">SELECT COALESCE(NULL, 'A', 'B');-- 返回 'A'
SELECT COALESCE(NULL, NULL, 'B'); -- 返回 'B'
SELECT COALESCE(NULL, NULL, NULL); -- 返回 NULL
</pre></div>
<p class="maodian"><a name="_lab2_4_4"></a></p><h3>示例2:表数据应用</h3>
<div class="jb51code"><pre class="brush:sql;">-- 假设有员工表 employees,其中 commission 列可能为 NULL
SELECT
employee_name,
COALESCE(commission, 0) AS commission
FROM
employees;
</pre></div>
<p class="maodian"><a name="_lab2_4_5"></a></p><h3>示例3:与 CASE 表达式等效</h3>
<p><code>COALESCE</code> 可以看作是以下 CASE 表达式的简写:</p>
<div class="jb51code"><pre class="brush:sql;">CASE
WHEN value1 IS NOT NULL THEN value1
WHEN value2 IS NOT NULL THEN value2
...
ELSE NULL
END
</pre></div>
<p class="maodian"><a name="_label5"></a></p><h2>注意事项</h2>
<ol><li><code>COALESCE</code> 是 ANSI SQL 标准函数,在大多数数据库中可用</li><li>与 <code>IFNULL</code> 函数不同,<code>COALESCE</code> 可以接受多个参数</li><li>性能考虑:参数越多,评估成本越高</li><li>所有参数应该是相同或兼容的数据类型</li></ol>
<p class="maodian"><a name="_label6"></a></p><h2>与相关函数比较</h2>
<ul><li><code>IFNULL(expr1, expr2)</code>:只有两个参数,相当于 <code>COALESCE(expr1, expr2)</code></li><li><code>ISNULL(expr)</code>:只检查是否为 NULL,返回 1 或 0</li><li><code>NULLIF(expr1, expr2)</code>:当 expr1 = expr2 时返回 NULL,否则返回 expr1</li></ul>
<p><code>COALESCE</code> 因其灵活性和标准性,通常是处理 NULL 值的最佳选择。</p>
<p class="maodian"><a name="_label7"></a></p><h2>总结</h2>
頁:
[1]