728x90
NULL
- null 의미는 어떠한 값인지 알 수 없음
- 연산 수행 불가
- true and null ⇒ null
- false and null ⇒ false
- 오름차순정렬: null → 작은값 → 큰값
- ifnull(값1, 값2) → 값1이 null이면 값2로 대체
- nullif(값1, 값2)
- 값1 = 값2 null 반환
- 값1 ≠ 값2 면 값1 반환
ORDER BY
- 정렬 방법
- 오름차순: asc(생략 기본)
- 내림차순: desc(명시적 표기)
- 정렬데이터 순서
- abc, 가나다
- 숫자, 날짜: 작은것 ~ 큰것
- 정렬대상
- 컬럼명
- 컬럼에 대한 별명
- select 항목에 대한 index번호: index 시작 1번
- 수식
실습:
-- 직원 부서번호, 사번, 직무, 입사일 정보 조회
select department_id, employee_id, job_id, hire_date from employees
order by department_id desc;
-- 부서번호 오름 정렬: asc 생략
-- 부서번호 내림 정렬: desc
select department_id, employee_id, job_id, hire_date, salary*12 from employees
order by department_id desc;
-- 연봉 높은 순서대로 정렬: 연봉을 가장 많이 받은 사람에게 한턱쏘라고 하기 위함
select department_id, employee_id, job_id, hire_date, salary*12 연봉 from employees
order by 연봉 desc;
GROUP BY
- select 절에 제약
- group by 사용칼럼, 그룹함수
- group by 그룹핑컬럼명1, 그룹핑컬럼명X having 그룹핑조건
- having 절만 사용은 할 수 없음 - 그룹핑 결과에 대한 조건이기 때문에
- 부서별 부서번호, 인원수, 최대 급여 정보 조회
- having 절에 alias 사용 가능
실습:
-- 부서별 부서번호, 인원수, 최대 급여 정보 조회
select department_id, count(*) 인원수, max(salary) 최대급여
from employees
group by department_id;
-- 부서별 부서번호, 인원수, 최대급여 정보 조회
-- 최대급여가 10000 이상인 부서만 조회
-- 최대급여 내림차순, 부서번호 오름차순 정렬 조회
select department_id 부서번호, count(*) 인원수, max(salary) 부서최대급여
from employees
group by department_id
having 부서최대급여 >= 10000
order by 부서최대급여 desc, 부서번호;
-- 직원에게 특별상여금 = 급여 + 급여*수당율
-- 부서번호, 사번, 급여, 특별상여금 정보 조회
-- 부서번호 오름차순, 특별상여금(내림)이 톺은 순서대로 정렬 조회
-- 수당율이 0이면 급여만큼의 특별상여금 지급
-- 수당율이 null이면 연산수행되지 않음, 특별상여금도 null -> ifnull() 쓰면 됨
select department_id 부서번호, employee_id 사번, salary 급여, (salary+(1+ifnull(commission_pct, 0))) 특별상여금
from employees
order by 부서번호, 특별상여금 desc;
(salary+(1+ifnull(commission_pct, 0))) -> commission_pct가 null 이면 연산할 때 연산 결과가 null이 되므로 null일 경우 0을 대신 대입해서 연산을 한다
728x90