杰克姆兹 發表於 2025-5-30 09:57:02

SQL中的DISTINCT简介、SQL DISTINCT详解 附DISTINCT的用法、DISTINCT注意事项

<h2>DISTINCT简介:</h2>
<p>DISTINCT 是 SQL 中用来返回唯一不重复结果集的关键字。它通常用于 SELECT 语句中,可以指定一个或多个列进行去重,并返回唯一的结果。当你在使用 SELECT 查询数据时,可能会得到包含重复行的结果集。为了去除这些重复行,你可以使用 DISTINCT 关键字来获取唯一的记录。</p>
<p>表中插入的原始数据:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202505/2025053009534110.png" /></p>
<p>1、单列去重:单列去重:使用 DISTINCT 去重查询结果中的单个列,返回唯一的值。</p>
<div class="jb51code"><pre class="brush:sql;">SELECT        DISTINCT age FROM students</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202505/2025053009534111.png" /></p>
<p>2、多列去重:使用 DISTINCT 去重查询结果中的多个列,返回满足多列组合唯一的结果。</p>
<div class="jb51code"><pre class="brush:sql;">SELECTDISTINCT NAME,age,score FROM students</pre></div>
<p><img alt="" src="https://img.jbzj.com/file_images/article/202505/2025053009534112.png" /></p>
<p>3、结合其他关键字:DISTINCT 可以与其他 SQL 关键字结合使用,如 ORDER BY、WHERE 和 GROUP BY 等</p>
<div class="jb51code"><pre class="brush:sql;">SELECT        DISTINCT NAME,age,score FROM students ORDER BY score DESC
SELECT        DISTINCT NAME ,age,score FROM students GROUP BY NAME</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202505/2025053009534213.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202505/2025053009534214.png" /></p>
<p>4、对表达式进行去重:DISTINCT 还可以用于对表达式进行去重,而不仅仅是列名。这允许你根据某些计算得到的结果进行去重。</p>
<div class="jb51code"><pre class="brush:sql;">SELECT DISTINCT ( `name` + age) result FROM students</pre></div>
<p>5、COUNT()统计</p>
<div class="jb51code"><pre class="brush:sql;">SELECT COUNT(DISTINCT NAME) num FROM students</pre></div>
<p>注意事项:</p>
<p>1、distinct 必须放在字段的开头,即放在第一个参数的位置。</p>
<p>2、只能在select语句中使用,不能在insert、delete、update中使用。</p>
<p>3、distinct表示对后面的所有参数的拼接 取 不重复的记录。</p>
<p>4、distinct 忽略 NULL 值:distinct 关键字默认会忽略 NULL 值,即将 NULL 视为相同的值。如果你希望包括 NULL 值在去重结果中,可以使用 IS NULL 或 IS NOT NULL 进行过滤。</p>
<p>5、DISTINCT 基于所有选择的列:DISTINCT 关键字基于选择的所有列来进行去重。如果你只想根据部分列进行去重,可以使用子查询或者窗口函数等技术来实现。</p>
<p>6、DISTINCT 的性能消耗:DISTINCT 操作可能会对查询的性能产生一定的影响,特别是在处理大量数据时。因为它需要对结果集进行排序和比较以去除重复行。如果性能是一个关键问题,可以考虑其他优化方法,例如使用索引或者合理设计查询。</p>
<p>7、结果集顺序不保证:使用 DISTINCT 关键字后,结果集的顺序可能会发生变化,因为数据库系统通常会对结果进行重新排列以去除重复行。如果需要特定的结果排序,可以使用 ORDER BY 子句进行排序。</p>
<p>完整版代码</p>
<div class="jb51code"><pre class="brush:sql;">CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(50),
    age INT,
    score DECIMAL(5, 2)
);
INSERT INTO students (NAME, age, score) VALUES
('Alice', 20, 85.5),
('Bob', 22, 76.3),
('Charlie', 21, 92.0),
('Alice', 20, 85.5),
('David', 23, 68.9);
# 原始数据
SELECT        * FROM students
# 单列去重:使用 DISTINCT 去重查询结果中的单个列,返回唯一的值。
SELECT        DISTINCT age FROM students
# 多列去重:使用 DISTINCT 去重查询结果中的多个列,返回满足多列组合唯一的结果。
SELECT        DISTINCT NAME,age,score FROM students
# 结合其他关键字:DISTINCT 可以与其他 SQL 关键字结合使用,如 ORDER BY、WHERE 和 GROUP BY 等
SELECT        DISTINCT NAME,age,score FROM students ORDER BY score DESC
SELECT        DISTINCT NAME ,age,score FROM students GROUP BY NAME
# 对表达式进行去重:DISTINCT 还可以用于对表达式进行去重,而不仅仅是列名。这允许你根据某些计算得到的结果进行去重。
SELECT DISTINCT ( `name` + age) result FROM students
# COUNT()统计
SELECT COUNT(DISTINCT NAME) num FROM students</pre></div>
頁: [1]
查看完整版本: SQL中的DISTINCT简介、SQL DISTINCT详解 附DISTINCT的用法、DISTINCT注意事项