SQL Server 중복 행 제거

SQL Server 중복 행 제거

2022-06-03 last update

6 minutes reading MySQL MariaDB
고정밀 작업을 수행할 때 데이터베이스에 중복된 값이 있습니다.그것들은 단일 값이 여러 번 처리되어 결과에 영향을 미칠 수 있다.중복 기록도 더 많은 공간을 차지하여 성능을 떨어뜨릴 수 있다.
이 설명서에서는 SQL Server 데이터베이스에서 반복 행을 찾아 제거하는 방법을 설명합니다.

기초 지식


계속하기 전에 중복행이 무엇입니까?만약 한 줄에 표의 다른 줄과 비슷한 이름과 값이 포함되어 있다면, 우리는 그것을 중복 줄로 분류할 수 있다.
데이터베이스의 중복 행을 찾고 삭제하는 방법을 설명하기 위해 예시 데이터를 만드는 것부터 시작합니다.
USE duplicatedb;
CREATE TABLE users(
id INT IDENTITY(1,1) NOT NULL,
username VARCHAR(20),
email VARCHAR(55),
phone BIGINT,
states VARCHAR(20)
);
INSERT INTO users(username, email, phone, states)
VALUES ('zero', '[email protected]', 6819693895, 'New York'),
('Gr33n', '[email protected]', 9247563872, 'Colorado'),
('Shell', '[email protected]', 702465588, 'Texas'),
('dwell', '[email protected]', 1452745985, 'New Mexico'),
('Gr33n', '[email protected]', 9247563872, 'Colorado'),
('zero', '[email protected]', 6819693895, 'New York');
위의 예시 조회에서, 우리는 사용자 정보를 포함하는 표를 만들었다.다음 서브문장 블록에서, 우리는 insert 문장을 사용하여 사용자 테이블에 중복된 값을 추가합니다.

반복 행 찾기


일단 우리가 필요한 견본 데이터를 얻게 되면, 사용자 표의 중복값을 검사합시다.다음과 같이 count 함수를 사용하여 이 작업을 수행할 수 있습니다.
SELECT username, email, phone, states, COUNT(*) AS count_value FROM users GROUP BY username, email, phone, states HAVING COUNT(*) > 1;
위의 코드 세션은 데이터베이스에 있는 중복 줄과 테이블에 나타나는 횟수를 되돌려야 합니다.
출력 예는 다음과 같습니다.

다음으로, 우리는 중복된 줄을 삭제합니다.

반복 행 삭제


다음 단계는 중복된 줄을 삭제하는 것이다.다음 예제 코드 세그먼트와 같이 질의 삭제를 사용하여 이 작업을 수행할 수 있습니다.
id가 없는 사용자에서 삭제 (사용자, 전자메일, 전화, 상태에 따라 사용자 그룹에서 max (id) 선택)
조회는 중복된 줄에 영향을 주고 테이블에 유일한 줄을 보존해야 한다.
다음과 같은 방법으로 테이블을 볼 수 있습니다.
SELECT * FROM users;
결과 값은 다음과 같습니다.

반복 행 삭제(연결)


JOIN 문구를 사용하여 테이블에서 반복된 행을 제거할 수도 있습니다.예제 쿼리 코드는 다음과 같습니다.
DELETE a FROM users an INNER JOIN
(SELECT id, rank() OVER(partition BY username ORDER BY id) AS rank_ FROM users)
b ON a.id=b.id WHERE b.rank_>1;
광범위한 데이터베이스에서 내부 연결을 사용하여 중복 항목을 삭제하는 데 다른 연결보다 더 오랜 시간이 걸릴 수 있다는 것을 기억하십시오.

반복 행 삭제(Row\u number()


함수의 역할은 표의 줄에 번호를 지정하는 것이다.우리는 이 기능을 사용하여 표에서 중복 항목을 삭제할 수 있다.
다음 예제 질의를 고려하십시오.
USE duplicatedb
DELETE T
FROM
(
SELECT *
, duplicate_rank = ROW_NUMBER() OVER (
PARTITION BY id
ORDER BY (SELECT NULL)
)
FROM users
) AS T
WHERE duplicate_rank > 1
위의 검색은row\unumber () 함수로 되돌아오는 값을 사용하여 중복 항목을 삭제해야 합니다.반복된 줄은row\unumber () 함수에서 1보다 큰 값을 생성합니다.

결론


표에서 중복된 줄을 삭제함으로써 데이터베이스를 깨끗하게 유지하는 것이 좋다.이것은 성능과 저장 공간을 향상시키는 데 도움이 된다.이 강좌의 방법을 사용하면 데이터베이스를 안전하게 정리할 수 있습니다.