[Oracle] 2020.12.16. day_38 select _ 조회되는 레코드의 중복 값 제거 1. distinct 2. group by

2020. 12. 16. 17:04Web_Back-end/Oracle

◎ select _ 조회되는 레코드의 중복 값 제거 

○ 1. distinct

  distinct
  중복값을 가지고 있는 컬럼 앞에 정의
Error를 발생시키지 않는다
여러 컬럼을 함께 조회하면 중복배제가 되지 않는다
문법 select distinct 컬럼명 
from 테이블명;

요청조건 결과
사원테이블에서 직무를 조회
단, 중복되는 직무는 조회하지 않는다
select distinct job
from emp;

○ null값이 포함된 경우

요청조건 결과
사원테이블에서 매니저번호를 조회
단, 중복되는 매니저번호는 조회하지 않는다

null 도 값으로 해당하여 나온다
select distinct mgr
from emp;

 

※ 중복배제를 하지 않는 경우

요청조건   중복값이 없는 컬럼과 같이 조회
distinct는 
중복값을 가진 컬럼과 
중복값을 가지지 않은 컬럼
레코드로 조회되면 중복배제를 하지 않는다

중복값 있는 컬럼

select distinct deptno, ename
from emp;

 


 

○ 2. group by

  group by
  group by 절을 정의하여 그룹화할 컬럼선택
Error를 발생시킨다
Error 그룹으로 묶이지 않은 컬럼이 조회컬럼에 직접 정의되면 Error발생
  집계함수와 함께 사용되면 그룹별 집계를 얻을 수 있다
having절과 함께 사용하면 그룹으로 묶을 조건을 설정할 수 있다
rollup, cube를 사용하여 중간집계를 얻을 수 있다
문법 group by 그룹으로묶일 컬럼명,,,
요청조건 결과
사원테이블에서 직무를 조회 
단, 중복되는 직무는 조회하지 않는다
select		deptno
from		emp
group by	deptno;

 

※ 그룹으로 묶여지지 않은 컬럼이 조회컬럼에 정의되면 Error

Error 발생 결과
그룹으로 묶여지지 않은 컬럼이 조회컬럼에 정의되면 Error

Error
ename은 그룹으로 묶이지 않은 컬럼이기 때문에 Error발생

select    	deptno, ename
from		emp
group by	deptno;

 

잘못된 사용방법 결과
여러 행이 조회되는 컬럼과 
같이 사용되면 group으로 묶여지지 않는다
select    	deptno, ename
from		emp
group by	deptno, ename;
  • 알고 넘어가야할 내용
    • group by에 정의된 컬럼만 select에 쓸 수 있다
    • 중복되는 값이 없는 컬럼을 group by 하는 것은 잘못된 사용이다