[오라클] 테이블 정렬 시키기 (ORDER BY)

심심이·2024년 2월 18일

oracle

목록 보기
4/40

테이블 정렬 ORDER BY

  • ASC : 오름차순으로 정렬(기본값), 작은 것부터 큰 것까지 (가나다, 123, ABC)
  • DESC : 내림차순으로 정렬, 큰 것부터 작은 것까지
------ employees 테이블에서 월급의 오름차순으로 사원번호, 사원명, 월급, 부서번호를 나타내세요. --------

    
SELECT
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
ORDER BY
    NVL(salary + (salary * commission_pct), salary); -- ASC 생략 가능
    
--- 또는

ORDER BY
    "월급";
 -- SELECT 절이 ORDER BY 절보다 먼저 처리가 된다.
 -- 그러므로 NVL(salary + (salary * commission_pct), salary) AS "월급" 
 -- 에서의 AS는 같다라는 뜻이므로 "월급" 으로 처리해도 된다.    


------ 월급의 내림차순으로 나타낼 때 --------
ORDER BY
    "월급" DESC; 
    -- DESC는 생략하기가 불가능하다. 
    --(오름차순인 ASC가 기본이기 때문에, ASC만 생략이 가능하다.) 


정렬(오름차순, 내림차순)할 때 null 은 존재하지 않는 것이므로
오라클에서는 정렬 시 null 을 가장 큰 것으로 간주하고,
마이크로소프트사의 MS-SQL 에서는 정렬 시 null 을 가장 작은 것으로 간주한다.


테이블 1차, 2차 정렬

ex. 쇼핑몰에서 물건이 가장 싼 것 중에서 별점이 가장 높은 것

-- employees 테이블에서 부서번호별 오름차순 정렬을 한 후에 동일한 부서번호내에서는 
-- 월급의 내림차순으로 정렬하여 사원번호, 사원명, 월급, 부서번호를 나타내세요.
    
SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
ORDER BY
    부서번호, 월급 DESC;
    
-- 또는 
ORDER BY 
	4, 
	3 DESC;
    -- 4(부서번호) ASC 는 1차 정렬, 3 DESC는 2차 정렬



-- employees 테이블에서 수당퍼센티지가 null 인 사원들만 
-- 사원번호, 사원명, 월급(기본급여+수당금액), 부서번호를 나타내되 
-- 부서번호의 오름차순으로 정렬한 후 동일한 부서번호내에서는 월급의 내림차순으로 나타내세요.

SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
WHERE 
    commission_pct IS NULL
ORDER BY
    부서번호, 월급 DESC;

-- employees 테이블에서 월급(기본급여+수당금액)이 10000보다 큰 사원들만 
-- 사원번호, 사원명, 월급(기본급여+수당금액), 부서번호를 나타내되 
-- 부서번호의 오름차순으로 정렬한 후 동일한 부서번호내에서는 월급의 내림차순으로 나타내세요.

SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
WHERE 
    NVL(salary + (salary * commission_pct), salary) > 10000
ORDER BY
    부서번호, 월급 DESC;
  


-- employees 테이블에서 부서번호가 50번 부서가 아닌 사원들만
-- 사원번호, 사원명, 월급(기본급여+수당금액), 부서번호를 나타내되 
-- 부서번호의 오름차순으로 정렬한 후 동일한 부서번호내에서는 월급의 내림차순으로 나타내세요.

DESC employees; -- 먼저 NULL 유형이 어떤지 파악한다.
    
SELECT 
    employee_id AS 사원번호,
    first_name || ' ' || last_name AS 사원명,
    NVL(salary + (salary * commission_pct), salary) AS 월급,
    department_id AS 부서번호
FROM 
    employees
WHERE 
     NVL(department_id, -9999) != 50 -- NULL 은 비교연산자 사용이 불가능하기 때문에 NVL로 처리해 준다. 
ORDER BY
    부서번호, 월급 DESC;

where절을 만족하는 행만 메모리에 퍼올린 다음에! select로 보여준다.
select 한 다음에 최종으로 order by 를 해준다.

profile
개발하는 심심이

0개의 댓글