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 데이터베이스에서 중복 항목을 찾고 제거하는 데 도움이 됩니다.
답글 남기기