본문 바로가기

별걸다하는 IT/데이터베이스 Database

[데이터베이스 SQL 기초] 오라클, MySQL 결과 중복 제거 DISTINCT에 사용법

[데이터베이스 완전 정복 목차]

안녕하세요 양햄찌블로그 주인장입니다.

이번에도 저번 시간에 이어서 기초편이예요.

언넝 데이터베이스 카테고리 포스팅 수가 늘어나길 희망하며..

DISTINCT 결과 중복 없이 조회하기 

조회시 DISTINCT를 사용하면 중복을 제거한 결과를 보여줍니다.

넘나 간단한 문법

요렇게 쓰면 끝이야요 간단하죠?

물론 GROUP BY 명령어를 이용해서 중복제거 결과를 도출할 수도 있지만, DISTINCT절이 목적에 좀 더 부합한다생각해서 수행속도가 크리티컬하지 않으면 저는 왠만하면 distinct를 사용합니다.

 

참고로 'select distinct([컬럼명]) from [테이블명];' 이렇게 distinct 괄호 안에 컬럼명을 넣어주는건 문법 에러가 나니 주의~

DISTINCT 사용 연습

우리가 맨날 연습용으로 사용하는 EMPLOYEES 테이블에서 테스트를 진행해봤습니다.

EMPLOYEES 연습DB 까는 법은 블로그에 올려놨으니 궁금하신 분들은 보고 오기~

 

[기본 distinct와 count(distinct) ]

쿼리문: employees테이블에서 직무 리스트를 중복없이 조회해라

select distinct JOB_ID
from employees;

요렇게 되겠죠?ㅎㅎ

총 19개의 직무가 중복 없이 출력됨을 확인할 수 있어요. 

실제로 테이블에 등록된 가짓수를 count 집계함수로 뽑아봤을 때에는 널값 제외 107개였는데, 

distinct로 중복을 제거하니 19개로 확 줄은 것을 확인하실 수 있습니다.

 

[distinct 컬럼 여러개]

distinct 뒤에 컬럼을 다수를 붙이면 어떻게 될까 생각해보실 수 있어요.

select distinct job_id, salary
from employees
order by job_id;

요렇게~!

결과를 보시면 아시겠지만, job_id + salary 요 쌍이 중복되면 거르고 중복되지 않으면 출력시킵니다.

밑줄친 부분을 보고 distinct썼는데 FI_ACCOUNT가 여러개 뽑혔네? 생각하실 수 있지만, 오른쪽 SALARY값이 동일한게 하나도 없죠! 

이렇게 해서 (job_id, salary)의 중복되지 않는 쌍이 출력된다는 것은 알았어요. 그럼 이 결과의 총 개수를 구하려면? 

SQL Server에서는 count(distinct 컬럼1, 컬럼2, .., 컬럼n) 요게 되는데 오라클에서는 안됩니다.

오라클에서는 이너쿼리를 사용해 개수를 구하던가 다른 방법을 쓰던가 해야해요.

 

간단하게 distinct를 알아보는 시간을 가졌습니다. 이게 다랍니다! ㅎㅎ

오늘도 방문해주셔서 감사합니다. 다음 포스팅에서 봐요.