MySQL 查找重复记录
一、MySQL 查找重复记录 介绍
MySQL 是一种数据库应用程序,它以行和列的形式将数据存储在表中。该数据库应用程序可以在表中存储重复记录,这会影响 MySQL 中数据库的性能。但是,由于各种原因会发生数据重复,在 MySQL 中使用数据库时,查找表中的重复值是一项重要任务。
通常,最好始终在表上使用唯一约束来存储防止重复行的数据。但是,有时在使用数据库时,由于人为错误、来自外部源的未清理数据或应用程序中的错误,我们会发现许多重复的行。在本文中,我们将学习如何在MySQL数据库中查找重复值。
让我们借助一个例子来理解它。首先,我们将使用以下语句创建一个名为“ student_contacts ”的表:
CREATE TABLE student_contacts (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
state VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL
);
接下来,我们将使用INSERT语句将记录填充到表中,如下所示:
INSERT INTO student_contacts (name, state, email)
VALUES ('Carine', 'Texas', 'carine@javatpoint.com'),
('Carine', 'Texas', 'carine@javatpoint.com'),
('Peter', 'New York', 'peter@javatpoint.com'),
('Janine ', 'Florida', 'janine@javatpoint.com'),
('Janine ', 'Florida', 'janine@javatpoint.com'),
('Jonas ', 'Atlanta', 'jonas@javatpoint.com'),
('Jean', 'California', 'jean@javatpoint.com'),
('Jean', 'California', 'jean@javatpoint.com'),
('Mark ', 'Florida', 'mark@javatpoint.com'),
('Roland', 'Alabama', 'roland@javatpoint.com'),
('Roland', 'Alabama', 'roland@javatpoint.com'),
('Julie', 'Texas', 'julie@javatpoint.com'),
('Shane', 'New York', 'shane@javatpoint.com'),
('Susan', 'Arizona', 'susan@javatpoint.com'),
('Susan', 'Arizona', 'susan@javatpoint.com');
执行SELECT语句来验证记录:
在此表中,我们可以看到有不同的行具有重复值。让我们学习如何使用SQL查询找到它们。
二、在单列中查找重复数据
我们可以使用以下步骤在表中找到重复的条目:
- 首先,我们将使用GROUP BY子句根据所需列对所有行进行分组。所需的列是我们检查重复记录所基于的列。
- 其次,我们将在HAVING子句中使用COUNT()函数来检查具有多个元素的组。
以下语法解释了上述步骤:
SELECT column, COUNT(column)
FROM table_name
GROUP BY column
HAVING COUNT(column) > 1;
借助上述语法,我们可以使用以下语句在 student_contacts 表中查找具有重复名称的行:
SELECT name, email, COUNT(name)
FROM student_contacts
GROUP BY name
HAVING COUNT(name) > 1;
执行上述语句后,我们将获得以下显示重复名称和电子邮件的输出:
三、在多列中查找重复数据
有时我们需要根据多列查找重复值。在这种情况下,我们可以使用如下语法:
SELECT
column1, COUNT(column1),
column2, COUNT(column2),……
FROM table_name
GROUP BY column1, column2, .......
HAVING
(COUNT(column1) > 1) AND
(COUNT(column2) > 1) AND …....
我们应该注意,虽然在多个列中查找重复项,但只有在列组合重复时才会重复行。因此,我们需要在HAVING子句中使用AND运算符。
例如,如果我们想在 student_contacts 表中查找name、state和email 列中包含重复值的行,可以使用以下SQL:
SELECT
name, COUNT(name),
state, COUNT(state),
email, COUNT(email)
FROM student_contacts
GROUP BY name, state, email
HAVING COUNT(name) > 1
AND COUNT(state) > 1
AND COUNT(email) > 1;
执行上述语句后,我们将获得以下输出,其中显示了重复的名称、状态和电子邮件列:
热门文章
优秀文章