-
MySQL 기본 문법 - 데이터베이스 선택시 중복제거데이터베이스/MySQL 2020. 9. 28. 10:52
데이터 베이스를 선택할 때 중복을 제외하고 싶다면 다음 두 가지 방법을 이용할 수 있다.
하나는 'group by'이고 다른 하나는 'distinct'다.
distinct
영어로 구분되는, 뚜렷한 등의 뜻을 가진 'distinct'을 sql에서 명령어로 써주면 데이터베이스에서 중복 없이 데이터 선택이 가능하다.
use testdb; -- 데이터 베이스 사용 create table Web( -- 테이블 생성 Name varchar(20) not null, addr varchar(20) not null, country varchar(20) not null ); INSERT INTO Web(Name, addr, country) values -- 테이블에 value 입력 ('구글', 'google.com', '미국'), ('네이버', 'naver.com', '한국'), ('바이두', 'baidu.com', '중국'), ('야후재팬', 'yahoo.co.jp', '일본'), ('다음', 'daum.net', '한국'); select * from web; -- web 테이블의 모든 데이터 선택
일반적인 상황에서 테이블을 생성한 뒤 전체를 선택하면 위 그림과 같이 모든 데이터가 선택되어 나온다.
이때 'distinct' 명령어를 써주면 원하는 필드값만 중복을 걸러서 선택이 가능하다
select distinct country, name from web;
위와 같이 코드를 입력하면 아래 사진과 같이 원하는 필드값만 중복없이 추려서 볼 수 있다.
하지만 이때 문제가 있다.
select distinct country, name from web;
이런식으로 한 개 이상의 필드를 부를 경우 중복되지 않은 상태로 필드를 선택하게 되는 것이다.
group by
'group by'는 해당 테이블 내 특정 필드에서 중복되는 값을 그룹화하여 선택할 수 있게 돕는다.
위와 같이 이러한 테이블을 똑같이 만들었다고 생각해보자.
이때 'group by'를 쓰면 'distinct'처럼 특정 필드에서 중복되는 값을 그룹화하여 선택할 수 있다.
select * from web group by country;
다만 차이점이라면 'group by'는 'distinct'와 달리 다른 필드값을 가져오더라도 중복되는 특정 필드값을 걸러낼 수 있다는 점이다.
단, 이때 중복이 걸러졌을 때 나타나는 하나의 열값을 해당 필드 내에서 같은 중복값을 가진 맨 위의 열값을 불러온다.
무슨 이야기냐하면 위 예시에서 'county'라는 필드값에 '한국'이란 밸류를 가진 사이트는 '네이버', '다음'이다.
이때 'county'를 기준으로 그룹화를 하면 이 그룹의 대표로 '다음'보다 위에 위치한 '네이버'가 선택된다는 것이다.
그래서 그룹화했을 때 해당 그룹 내에서 선택되는 열은 테이블 상 가장 위에 위치한 열이다.
'데이터베이스 > MySQL' 카테고리의 다른 글
MySQL 기본 문법 - 필터링하기 (0) 2020.09.29 MySQL 기본 문법 - 데이터베이스 정렬하기 (0) 2020.09.28 MySQL 제약 조건 (0) 2020.09.25 MySQL 자료형 - 숫자, 문자, 날짜, 시간 (0) 2020.09.25 MySQL 기본 문법 - 레코드 선택하기 (0) 2020.09.25