Back-End/Oracle

Oracle ■ DML SELECT(2)-그룹쿼리

SIKIDA 2024. 7. 15. 18:43
728x90

 

◈ DML 

 

• ORDER BY

SELECT에 의해서 조회된 데이터를 정려해주는 구문으로써, 데이터의 조회 후 실행되기

때문에 SELECT문의 가장 마지막에 실행됨

아래의 옵션은 생략 가능함

 

• ORDER BY

EMPLOYEE_ID 컬럼을 내림차순으로 정렬

 

 

• 그룹함수

여러 개의 행을 묶어 연산하여 결과를 반환하며 자주 쓰이는 그룹 함수는 아래와 같음

* Oracle의 내장함수 중 한가지 분류임. 그룹함수 외에도 문자함수, 수치 함수, 날짜 함수 등의 내장 함수들이 존재함

 

 

• 그룹함수 - MAX

EMPLOYEES 테이블에 있는 SALARY 컬럼의 최대 값을 반환

 

 

• 그룹함수 - MIN

EMPLOYEES 테이블에 있는 SALARY 컬럼의 최대 값을 반환

 

 

• 그룹함수 - AVG

EMPLOYEES 테이블에 있는 SALARY 컬럼의 평균 값을 반환

 

 

• 그룹함수 - SUM

EMPLOYEES 테이블에 있는 SALARY 컬럼의 합계 값을 반환

 

 

• 그룹함수 - COUNT

EMPLOYEES 테이블에 있는 SALARY 컬럼의 데이터가 조회된 행의 개수를 반환

 

 

• GROUP BY

조회된 데이터의 여러 개 행을 특정 컬럼을 기준으로 묶어 그룹화 시키며 일반적으로 그룹 함수와 함께 사용됨

특정 컬럼을 기준으로 그룹화 하여 값을 조회할 수 있음

• WHERE을 사용한다면 GROUP BY 작성 이전에 사용 해야 함

• GROUP BY 이후 조건을 주고 싶다면 이후에 나오는 다른 방식으로 가능

 

• GROUP BY

EMPLOYEES 테이블에서 DEPARTMENT_ID를 기준으로 그룹화 한 뒤 각 부서별 합계 월급을 조회

 

 

• GROUP BY

EMPLOYEES 테이블에서 DEPARTMENT_ID를 기준으로 그룹화 한 뒤 각 부서별 존재하는 데이터의 행의 개수를 조회(즉, 부서별 직원 수 조회)

 

 

• GROUP BY

JOB_ID가 일치하는 직원들의 평균 월급 조회

 

 

• HAVING

GROUP BY에서 조건을 제시할 때 사용되는 구문

 

• HAVING(예)

JOB_ID를 기준으로 평균 월급을 구하되 10,000달러 이상인 직원들만 조회

 

 

• HAVING(예)

JOB_ID를 기준으로 가장 높은 월급을 조회

 

 

• HAVING(예)

보너스를 받지 않는 JOB_ID 조회

 

 

 

• SELECT 쿼리의 실행 순서

1. FORM 2. WHERE 3. GROUP BY 4. HAVING 5. SELECT 6. ORDER BY

 

• 실행 순서 예시 쿼리

 

 

1. FORM

2. WHERE

 

3. GROUP BY

-> GROUP BY에 작성한 컬럼을 기준으로 각각 그룹화하여 묶음

 

4. HAVING

참고 : 위와 같이 HAVING은 연산이 수행되기 전 이미 GROUP BY와 HAVING 단계를 거치기 때문에 조건을 줄 때 WHERE에서 처리할 수 있는 조건은 WHERE에서 주게되면 불필요한 단계를 거치지 않을 수 있기 때문에 퍼포먼스를 좋게 만들 수 있음

 

5. SELECT

-> 조건에 충족된 그룹들 묶어 출력할 준비를 하는 단계

 

6. ORDER BY

->출력할 데이터들을 정렬