1. 중복된 갯수가 n 개 이상인
SELECT 필드명, count(*) as 변수명 FROM 테이블명 GROUP BY 필드명 HAVING 변수명 > n;
또는
SELECT 필드명, count(*) FROM 테이블명 GROUP BY 필드명 HAVING count(*) > n;
// 중복된 값을 찾고자 하는 필드명을 지정한다.
// 가령 mp3rand 라고 지정하면 GROUP BY mp3rand
칼럼에 INDEX 를 걸기 전과 건 후의 속도 차이를 보면 엄청난 차이가 발생한 걸 알 수 있다.
2. 중복된 데이터 추출
SELECT column1, column2, column3, ...
FROM tableA
WHERE column1 IN (
SELECT column1
FROM tableA
GROUP BY column1
HAVING COUNT(*) > 1
);
로 하면 중복된 게시물을 보여준다.
select a.uid, a.no, a.eng from data a, (select eng from data group by eng having count(*) > 1) b where a.eng = b.eng;
select uid, no, eng from data where eng IN (select eng from data group by eng having count(*) > 1) order by eng;
이 두개는 동일한 결과를 화면에 뿌려준다.
하지만 Query 속도는 JOIN 으로 가져온 첫번째 방법이 훨씬 더 빠르다.
동명이인 자료 추출
select m.* from member m, (select userNM from member group by userNM having count(*) > 1) b where m.userNM=b.userNM;
그런데 가져올 기존 테이블명을 손대지 않고 처리를 하려면 별칭으로 이름을 변경해주면 중복이 발생하지 않기 때문에 자료를 조회하는데 문제가 생기지 않는다.
select * from member , (select userNM as userNM1 from member group by userNM having count(*) > 1) b where member.userNM=b.userNM1;
3. 중복된 것 모두 찾기
SELECT 필드명, count(*) FROM 테이블명 GROUP BY 필드명
영문, 한글자까지 문자의 정확한 길이를 알려면 CHAR_LENGTH() 함수를 사용한다.
SELECT eng, CHAR_LENGTH(eng) FROM data WHERE uid =번호;
'SQL' 카테고리의 다른 글
[MySQL] 최근 게시물 10개 출력 (0) | 2015.07.29 |
---|---|
[MySQL] InStr 함수 (0) | 2015.07.26 |
[MySQL] 등가 조인(INNER JOIN) SELECT, UPDATE (0) | 2015.07.17 |
[MySQL] 중복자료를 Load data local infile 할 경우 (0) | 2015.07.15 |
[MySQL] INDEX 확인, 추가, 삭제 (0) | 2015.07.14 |