SQL에서 중복 항목을 찾고 삭제하는 방법

SQL에서 중복 항목을 찾고 삭제하는 방법

데이터베이스 설계 모범 사례에서는 UNIQUE 제약 조건을 사용하여 데이터베이스에서 중복을 방지할 것을 권장합니다. 그러나 잘못 설계된 데이터베이스나 깨끗하지 않은 데이터로 작업할 때 중복 항목을 직접 찾아 수동으로 삭제해야 할 수 있습니다.

SQL 데이터베이스에서 중복 항목을 찾는 방법과 중복 항목을 삭제하는 방법을 알아보려면 계속 읽어보세요.

샘플 데이터베이스 생성

데모용으로 이 SQL 쿼리를 실행하여 이름 및 점수 열이 있는 Users라는 테이블을 만듭니다.

DROP TABLE IF EXISTS Users;

CREATE TABLE Users (
    pk_id int PRIMARY KEY,
    name VARCHAR (16),
    score INT,
);

다음 쿼리를 실행하여 일부 샘플 값을 삽입합니다.

INSERT INTO
    Users(pk_id, name, score)
VALUES
    (1, 'Jane', 20),
    (2, 'John', 13),
    (3, 'Alex', 32),
    (4, 'John', 46),
    (5, 'Jane', 20),
    (6, 'Mary', 34),
    (7, 'Jane', 20),
    (8, 'John', 13)

이러한 행 중 일부는 이름 열에 대한 중복 값을 포함합니다.

SQL을 사용하여 데이터베이스를 조작하는 방법에 대한 자세한 설명이 필요한 경우 이 SQL 명령 및 쿼리를 자유롭게 확인하십시오.

GROUP BY를 사용하여 중복 값 찾기

GROUP BY 문을 사용하여 동일한 그룹에서 특정 조건을 충족하는 값을 정렬할 수 있습니다.

샘플 테이블의 이름이 고유해야 한다고 가정해 보겠습니다. GROUP BY를 사용하여 동일한 이름을 공유하는 행을 그룹화할 수 있습니다.

SELECT name, COUNT(name)
FROM Users
GROUP BY name
HAVING COUNT(name) > 1

COUNT를 사용하면 이름이 같은 사용자가 두 명 이상 있는 행을 선택할 수 있습니다.

이 쿼리를 실행하면 데이터베이스는 John과 Jane이 포함된 행을 중복으로 반환합니다.

데이터베이스에서 중복 삭제

중복을 찾은 후 DELETE 문을 사용하여 삭제할 수 있습니다.

이 예에서는 다음 쿼리를 실행합니다.

WITH cte AS (
    SELECT *
        ROW_NUMBER() OVER (
            PARTITION BY
                name, score
            ORDER BY
                name, score
        ) R
     FROM
        Users
)

DELETE FROM cte
WHERE R > 1;

이 쿼리는 CTE 표현식을 사용하여 중복 항목을 찾은 다음 하나만 제외하고 모두 삭제합니다.

중복 데이터를 삭제해야 하는 이유

중복 데이터 삭제는 필수가 아닙니다. 그러나 중복 행이 사용하는 공간을 확보할 수 있습니다.

행 수가 적을수록 쿼리가 훨씬 빠르게 실행되어 성능이 향상될 수 있습니다. 이 자습서의 쿼리를 사용하면 SQL 데이터베이스에서 중복 항목을 찾고 제거하는 데 도움이 됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다