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表中找到包含 姓名、州 和 电子邮件列 重复值的行,则可以使用以下查询:
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;
执行完上面的语句后,我们将得到下面的输出,显示了重复的姓名、州和电子邮件列: