반응형
MSSQL을 사용할 때 중복 데이터는 성능 저하뿐만 아니라 데이터 분석의 신뢰성을 떨어뜨릴 수 있습니다. 이번 포스팅에서는 MSSQL에서 중복 데이터를 쉽고 빠르게 처리하는 방법을 소개하겠습니다. ✅
🎯 1. 중복 데이터 찾기
중복 데이터를 찾을 때는 GROUP BY
와 HAVING
절을 활용하면 쉽게 확인할 수 있습니다.
-- 중복 데이터 찾기 예시
SELECT column1, column2, COUNT(*) AS 중복횟수
FROM table_name
GROUP BY column1, column2
HAVING COUNT(*) > 1;
✅ 위 쿼리는 중복된 컬럼 값과 해당 값이 중복된 횟수를 표시합니다.
🎯 2. 중복 데이터 제거하기 (삭제 방법)
중복 데이터 삭제는 주로 CTE(Common Table Expression)
와 ROW_NUMBER()
를 결합하여 사용합니다.
📌 CTE와 ROW_NUMBER() 사용하여 중복 삭제
-- 중복 데이터 삭제 예시
WITH CTE AS (
SELECT *, ROW_NUMBER() OVER (
PARTITION BY column1, column2
ORDER BY (SELECT NULL)
) AS 중복순번
FROM table_name
)
DELETE FROM CTE WHERE 중복순번 > 1;
✅ 위 방법은 각 중복 데이터 중 첫 번째 행만 남기고 나머지는 삭제합니다.
🎯 3. 중복 데이터 방지하기
데이터를 입력할 때 중복 데이터를 방지하려면, 테이블에 UNIQUE
제약조건을 설정하면 효과적입니다.
-- 테이블 생성 시 중복 방지
CREATE TABLE table_name (
ID INT PRIMARY KEY,
column1 VARCHAR(50),
column2 VARCHAR(50),
CONSTRAINT unique_column1_column2 UNIQUE (column1, column2)
);
✅ 위와 같이 UNIQUE 제약조건을 설정하면 중복 데이터를 사전 방지할 수 있습니다.
🎯 4. 실전 예제 (중복 조회 및 삭제)
실무에서 자주 사용하는 중복 조회 및 삭제 예제를 보겠습니다.
-- 중복 조회
SELECT email, COUNT(*) AS DuplicateCount
FROM Users
GROUP BY email
HAVING COUNT(*) > 1;
-- 중복 삭제
WITH UserCTE AS (
SELECT *, ROW_NUMBER() OVER (
PARTITION BY email
ORDER BY created_at DESC
) AS RowNum
FROM Users
)
DELETE FROM UserCTE WHERE RowNum > 1;
✅ 위 예제는 이메일로 중복된 사용자 정보를 가장 최근 데이터만 유지하고 나머지는 삭제합니다.
🎯 마무리
MSSQL에서 중복 데이터를 잘 관리하면 데이터베이스 성능과 정확도를 높일 수 있습니다.
- 중복 조회에는
GROUP BY + HAVING
을 활용 - 중복 삭제는
CTE + ROW_NUMBER()
조합 사용 - 중복 방지는
UNIQUE
제약조건 설정
📌 중복 데이터 관리를 통해 더 효율적인 데이터베이스 환경을 구축하세요! 🚀
🔖 태그#MSSQL #중복데이터 #SQL성능최적화 #중복제거 #SQL팁 #데이터베이스관리 #중복데이터찾기
반응형
'Programming' 카테고리의 다른 글
📤 MERGE 문으로 MSSQL에서 UPSERT 처리하는 방법 완벽 정리 (0) | 2025.03.22 |
---|---|
🚀 MSSQL에서 레코드 가져오기 (TOP, OFFSET, LEAD 등) 완벽 정리 (0) | 2025.03.21 |
🚀 MSSQL에서 날짜 연산 쉽게 하기! (`DATEADD`, `DATEDIFF`, `GETDATE` 활용) (0) | 2025.03.19 |
🚀 MSSQL에서 문자열 합치기 & 분할하기 완벽 가이드 (0) | 2025.03.18 |
🎯 MSSQL에서 GROUP BY와 HAVING 차이점 쉽게 이해하기 (0) | 2025.03.17 |