------ 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 을 가장 작은 것으로 간주한다.
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 를 해준다.