기본 구조
-- ORDER BY 컬럼명 OR 컬럼별칭 OR 컬럼나열순번 OR [ASC 생략가능] OR DESC
-- ORDER BY 컬럼명 정렬방식, 컬럼명 정렬방식, 컬럼명 정렬방식...
ORDER BY 컬럼명 [ASC]; --오름차순 정렬
ORDER BY 컬럼명 DESC; --내림차순 정렬
ORDER BY 컬럼명 DESC; -- NULL이 있다면 먼저 나옴
ORDER BY 컬럼명 NULLS FIRST; -- 오름차순으로 정렬하되 NULL을 가장 먼저
ORDER BY 컬럼명 NULLS LAST; -- 내림차순일 때 NULL을 아래로 보내고 싶을 때 사용
ORDER BY 2; -- SELECT 2번째의 오름차순 정렬
SELECT EMP_ID, EMP_NAME, SALARY 급여, DEPT_CODE
FROM EMPLOYEE
ORDER BY 2;
⭐흐름 순서 아주 중요⭐
⑤. SELECT 컬럼명 AS 별칭, 계산식, 함수식
①. FROM 참조할 테이블 명
②. WHERE 컬럼명 OR 함수식 비교연산자 비교값
③. GROUP BY 그룹을 묶을 컬럼명
④. HAVING 그룹함수식 비교연산자 비교값
⑥. ORDER BY 컬럼명 OR 별칭 OR 컬럼순번 정렬방식 [NULLS FIRST OR LAST]
💡그래서 ORDER BY 에 별칭이나 컬럼 순번을 적어도 되는 것임!
위에서 이미 정의 되었기 때문에!
EX) ORDER BY 2;
예제
그룹 별 급여 합계 조회
SELECT DEPT_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE; --DEPT 코드별 그룹 합계
SELECT SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE; -- ONLY 그룹 합계만 보여짐
--EMPLOYEE 테이블에서 부서코드별 그룹을 지정하여
--부서코드, 그룹별 급여 합계, 그룹별 급여 평균(정수처리), 인원수 조회하고
--부서코드 순으로 정렬
SELECT DEPT_CODE, SUM(SALARY), ROUND(AVG (SALARY)), COUNT(*)
FROM EMPLOYEE
GROUP BY DEPT_CODE
ORDER BY 1;
-- EMPLOYEE 테이블에서 부서코드와 보너스 받는 사원 수 조회하고 부서코드 순으로 정렬
SELECT DEPT_CODE, COUNT(BONUS)
FROM EMPLOYEE
GROUP BY DEPT_CODE
ORDER BY 1;
-- EMPLOYEE 테이블에서 직급코드, 보너스를 받는 사원수를 조회하여 직급코드 순으로 정렬
SELECT JOB_CODE, COUNT(BONUS)
FROM EMPLOYEE
WHERE BONUS IS NOT NULL -- 보너스가 0인 직급 제외
GROUP BY JOB_CODE
ORDER BY 1 ;
-- EMPLOYEE 테이블에서 성별과 성별 별 급여 평균 (정수처리), 급여 합계, 인원수 조회하고
-- 인원수로 내림차순 정렬
SELECT DECODE(SUBSTR(EMP_NO, INSTR(EMP_NO, '-')+1, 1), 1, '남' , '여') 성별 , FLOOR (AVG(SALARY)), SUM(SALARY), COUNT(*) 인원수
FROM EMPLOYEE
GROUP BY DECODE(SUBSTR(EMP_NO, INSTR(EMP_NO, '-')+1, 1), 1, '남' , '여')
ORDER BY 인원수 DESC;
-- EMPLOYEE 테이블에서 부서 코드 별로 같은 직급인 사원의 급여 합계 조회(부서코드 순 정렬)
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE, JOB_CODE
ORDER BY DEPT_CODE;
예제
-- 부서코드와 급여 펴균이 3000000이상인 그룹 조회
SELECT DEPT_CODE, AVG(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING AVG(SALARY) >= 3000000;
-- 부서별 그룹의 급여 합계 중 9백만을 초과하는 부서코드와 급여 합계
SELECT DEPT_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING SUM(SALARY) >= 9000000;
- UNION : 합집합, OR의 개념
- INTERSECT : 교집합
- UNION ALL : 합집합 + 교집합 (중복 2번 나옴)
- MINUS : 차집합 (공통된 부분 빼고 나만 가지고 있는 부분)
--UNION
--컬럼명 다른 것들 끼리 합치기 (열의 개수만 맞으면 됨)
SELECT EMP_NAME
FROM EMPLOYEE
WHERE EMP_ID = 200
UNION -- 위 컬럼명 EMP_NAME 기준
SELECT DEPT_TITLE
FROM DEPARTMENT
WHERE DEPT_ID = 'D9';
--UNION ALL
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
UNION ALL
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000;
--INTERSECT
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
INTERSECT
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000;
--MINUS
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
MINUS
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000000;