- SQL教程
- SQL - 主页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL数据库
- SQL-创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL-备份数据库
- SQL表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 更改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL查询
- SQL - 插入查询
- SQL - 选择查询
- SQL - 选择进入
- SQL - 插入选择
- SQL - 更新查询
- SQL - 删除查询
- SQL - 对结果进行排序
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL-Where 子句
- SQL - 顶部子句
- SQL - 不同子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL-Having 子句
- SQL - 与与或
- SQL - 布尔(位)运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY、ALL 运算符
- SQL - EXISTS 运算符
- SQL-案例
- SQL - NOT 运算符
- SQL - 不等于
- SQL - 为空
- SQL - 不为空
- SQL - 非空
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - 相交运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用联接
- SQL-内连接
- SQL-左连接
- SQL-右连接
- SQL-交叉连接
- SQL-全连接
- SQL-自连接
- SQL - 删除连接
- SQL - 更新连接
- SQL - 左连接与右连接
- SQL - 联合与连接
- SQL 键
- SQL - 唯一键
- SQL - 主键
- SQL-外键
- SQL - 复合键
- SQL - 备用键
- SQL索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL-唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级SQL
- SQL - 通配符
- SQL - 注释
- SQL-注入
- SQL-托管
- SQL - 最小值和最大值
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL-存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL-自动递增
- SQL - 日期和时间
- SQL-游标
- SQL - 公用表表达式
- SQL - 分组依据与排序依据
- SQL - IN 与 EXISTS
- SQL——数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数字函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL-JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问题与解答
- SQL - 快速指南
- SQL - 有用的函数
- SQL - 有用的资源
- SQL - 讨论
SQL - 处理重复项
有时,表或结果集包含重复记录。虽然在大多数情况下,允许重复,但在某些情况下,有必要防止重复记录并将其从数据库表中删除。
为什么需要在 SQL 中处理重复项?
为了防止出现以下后果,必须处理 SQL 数据库中的重复项 -
组织数据库中重复项的存在将导致逻辑错误。
重复数据占用存储空间,导致数据库使用效率下降。
由于资源使用量的增加,处理资源的总体成本上升。
随着重复数据的存在导致逻辑错误的增加,从数据库中的数据分析得出的结论也将是错误的。
本章将介绍如何防止表中出现重复记录以及如何删除已经存在的重复记录。
防止重复条目
为了防止在表中输入重复记录,我们可以在相关字段上定义主键或唯一索引。这些数据库约束确保指定列或列集中的每个条目都是唯一的。
例子
让我们使用以下查询创建一个 CUSTOMERS 表 -
CREATE TABLE CUSTOMERS ( FIRST_NAME CHAR(20), LAST_NAME CHAR(20), SEX CHAR(10) );
由于我们没有在表上定义任何约束,因此可以向其中插入重复记录。为了防止这种情况,请在相关字段上添加 PRIMARY KEY 约束(一起说 LAST_NAME 和 FIRST_NAME ) -
ALTER TABLE CUSTOMERS ADD PRIMARY KEY (LAST_NAME, FIRST_NAME);
使用 INSERT IGNORE 查询:
或者,我们可以使用 INSERT IGNORE 语句插入记录,而不会产生重复错误,如下所示 -
INSERT IGNORE INTO CUSTOMERS (LAST_NAME, FIRST_NAME) VALUES ( 'Jay', 'Thomas'), ( 'Jay', 'Thomas');
如下所示,该表仅包含一条记录(忽略重复值)。
名 | 姓 | 性别 |
---|---|---|
托马斯 | 杰伊 | 无效的 |
使用替换查询:
或者,使用 REPLACE 语句替换重复项,如以下查询所示 -
REPLACE INTO CUSTOMERS (LAST_NAME, FIRST_NAME) VALUES ( 'Ajay', 'Kumar'), ( 'Ajay', 'Kumar');
该表将包含以下记录 -
名 | 姓 | 性别 |
---|---|---|
库马尔 | 阿杰 | 无效的 |
托马斯 | 杰伊 | 无效的 |
应根据所需的重复处理Behave来选择 INSERT IGNORE 和 REPLACE 语句。INSERT IGNORE 语句保留第一组重复记录并丢弃任何后续重复记录。相反,REPLACE 语句保留最后一组重复项并删除所有较早的重复项。
使用唯一约束:
在表中强制唯一性的另一种方法是添加 UNIQUE 约束而不是 PRIMARY KEY 约束 -
CREATE TABLE BUYERS ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20) NOT NULL, SEX CHAR(10), UNIQUE (LAST_NAME, FIRST_NAME) );
计数和识别重复项
要根据特定列计算和识别重复记录,我们可以使用 COUNT 函数和 GROUP BY 子句。
例子
以下是计算 BUYERS 中 FIRST_NAME 和 LAST_NAME 重复记录的查询 -
SELECT COUNT(*) as repetitions, LAST_NAME, FIRST_NAME FROM BUYERS GROUP BY LAST_NAME, FIRST_NAME HAVING repetitions > 1;
此查询将返回 PERSON_TABLE 表中所有重复记录的列表。要识别重复的值集,请按照以下步骤操作 -
确定哪些列包含可能重复的值。
在列选择列表中列出这些列以及 COUNT(*)。
还列出 GROUP BY 子句中的列。
添加 HAVING 子句,通过要求组计数大于 1 来消除唯一值。
消除表中的重复项
我们可以使用 DISTINCT 关键字和 SELECT 语句来从表中检索唯一记录。
SELECT DISTINCT LAST_NAME, FIRST_NAME FROM BUYERS ORDER BY LAST_NAME;
或者,您可以包含一个 GROUP BY 子句,指定您选择的列以消除重复项 -
SELECT LAST_NAME, FIRST_NAME FROM BUYERS GROUP BY LAST_NAME, FIRST_NAME;