Oracle 오라클 중복 데이터 찾는 방법
이번 포스팅에서는 중복된 데이터를 찾는 방법에 대해서 알아보도록 하겠습니다.
보통 실무에서 시스템이 없는 고객이 관리하고 있는 데이터는
엑셀이나 기타 스프레드시트로 관리하는 경우가 많습니다.
이렇게 관리된 데이터는 중복이나 Null값이 존재할 수 밖에 없기 때문에
데이터 베이스 설계 시 데이터의 무결성을 유지하기 위해
유니크(Unique)하고 Null 값을 포함하지 않는 Key 값을 설정해야 합니다.
(모든 데이터가 중복이 있다면 일련번호 같은 Key를 설정해야겠죠.)
이럴 때! 중복된 데이터를 찾는 방법이 아주 유용하게 사용됩니다.
그럼 실제로 중복된 데이터를 추출해보도록 하죠.
CM_KIK_B라는 테이블이 있습니다. 대한민국 법정동코드가 들어있는 테이블인데요.
굳이 구굴링까지 안하셔도 구할 수 있는 OpenAPI 입니다.
간단히 중복된 데이터를 찾는 방법은
중복된 데이터를 찾고자 하는 컬럼으로 GROUP BY 한 후에 HAVING 절로 COUNT 가 1 이상인 것을
SELECT 하면 됩니다.
(GROUP BY 와 HAVING 절의 사용의 아래의 Link 를 참조하세요.)
Link : 오라클 그룹함수 SUM, AVG, MAX, MIN, COUNT의 사용 GROUP BY HAVING
전국적으로 중복되는 '동(KIKB_DONG_NM)' 을 찾아보도록 합시다.
SELECT T1.KIKB_DONG_NM
, COUNT(*)
FROM CM_KIK_B T1
GROUP BY T1.KIKB_DONG_NM
HAVING COUNT(*) > 1 ;
[결과]
각 동에 대한 중복된 숫자가 나왔습니다. 교동은 전국적으로 18개나 있네요.
분석함수를 사용하여 중복된 데이터를 SELECT 할 수도 있습니다.
SELECT T1.*
FROM (
SELECT S1.KIKB_DO_NM
, S1.KIKB_DONG_NM
, COUNT(*) OVER(PARTITION BY S1.KIKB_DONG_NM) AS OVERLAP
FROM CM_KIK_B S1
) T1
WHERE T1.OVERLAP > 1 ;
[결과]
이번엔 시도 도 같이 SELECT 해왔습니다. 각 중복된 '동'에 대해서 그 동이 어느 '시도'에 있는지 확인 할 수 있죠.
(위에서 사용된 서브쿼리의 사용은 아래의 Link를 참조하세요.)
Link : Subquery 서브쿼리사용법, ALL, ANY, IN, EXISTS
중복되는 데이터를 찾았으니 찾은 데이터를 삭제 해야 하는 경우 아래를 Link를 참조하세요.
Link : Oracle 오라클 중복 데이터 제거, ROWID
출처: http://aljjabaegi.tistory.com/86 [알짜배기 프로그래머]
'SQL > ORACLE' 카테고리의 다른 글
[ORACLE 스킬] 오라클(Oracle) 날짜(DATE) 처리 (0) | 2017.10.30 |
---|---|
[ORACLE 에러] ORA-01858: a non-numeric character was found where a numeric was expected [출처] ORA-01858: a non-numeric character was found where a numeric was expected (0) | 2017.10.30 |
오라클 테이블, 컬럼 정보 보기 (0) | 2017.01.12 |
oracle 테스트 및 답안 (0) | 2016.05.20 |
오라클 테이블 복사하기 (0) | 2016.05.20 |
DataBase-SQLPLUS(oracle 9i에서 향상된 DML과 DDL(다중테이블 insert-무조건insert, insert all, insert first, Pivoting insert) (0) | 2016.05.17 |
이력 테이블에서 최종 데이터만 조회하기 (0) | 2016.03.18 |
오라클에서 개행문자 제거하기 (0) | 2016.03.18 |