1. 같다 =
2. 같지않다 != <> ^=
3. 크다. 작다 > <
4. 같거나크다. 같거나작다 >= <=
5. NULL 은 존재하지 않는 것이므로 비교대상이 될 수가 없다.!!!!!
그러므로 비교연산( = != <> ^= > < >= <= )을 할 수가 없다.
그래서 비교연산을 하려면 nvl()함수, nvl2()함수를 사용하여 처리한다.!!!!!
select '대한민국','서울시','1234', sysdate from dual;
-- sysdate : 현재 시각
select '대한민국'|| 서울시'|| 1234||sysdate from dual;
--대한민국서울시123424/02/16
`
-- employees 테이블에서 부서번호가 30번에 근무하는 사원들만
-- 사원번호, 사원명, 월급, 부서번호를 나타내세요 select employee_id AS "사원번호"
, first_name || ' ' || last_name AS "사원명"
, nvl ( salary + (salary * commission_pct), salary) AS "월급"
, department_id AS "부서번호"
from employees
where department_id = 30;
* employees 테이블에서 부서번호가 null인 사원들만
사원번호, 사원명, 월급, 부서번호를 나타내세요
select employee_id AS "사원번호"
, first_name || ' ' || last_name AS "사원명"
, nvl ( salary + (salary * commission_pct), salary) AS "월급"
, department_id AS "부서번호"
from employees
where department_id = null;
--데이터가 출력되지 않는다
-- 왜냐하면 null은 존재하지 않기 때문에 비교대상이 될 수 없음
* select employee_id AS "사원번호"
, first_name || ' ' || last_name AS "사원명"
, nvl ( salary + (salary * commission_pct), salary) AS "월급"
, department_id AS "부서번호"
, nvl(department_id, -9999) AS "부서번호" -- 부서번호가 null이 아닌 것은 잘 나옴 , null이면 -9999 이 렇게 나옴
from employees;
* from employees
where department_id = null
--> null은 존재하지 않기때문에 비교연산자를 안씀
where nvl(department_id, -9999) = -9999; -- null 대신 임의로 -9999를 쓴 것
select employee_id AS "사원번호"
, first_name || ' ' || last_name AS "사원명"
, nvl ( salary + (salary * commission_pct), salary) AS "월급"
, department_id AS "부서번호"
from employees
where department_id is null; -- ex) this is hendphone , this와 핸드폰 그 사이 is
-- null은 is 연산자를 사용하여 구한다
-- department_id 컬럼의 값이 null인 행들만 RAM(메모리)에 퍼올리는 것이다
* -- where department_id <> 30;
-- where department_id ^= 30;
✔️ select 구문을 작성하기 전 반드시 해당 테이블의 구조를 먼저 확인하자
-- salary 컬럼의 값을 기준으로 오름차순 정렬하여 보이세요
select employee_id, first_name, salary, department_id
from employees
order by salary asc;
▪️ order by 정렬
▪️ asc
: 오름차순
--> asc는 생략 가능
desc
: 내림차순 => 생략 불가능!!
※ 정렬(오름차순 정렬, 내림차순정렬)을 할 때 null은 존재하지 않는 것이므로 오라클 정렬 시 null을 가장 큰 것으로 간주를 해주고 마이크로소프트사의 ms-sql에서는 정렬 시 null을 가장 작은 것으로 간주한다
select employee_id AS "사원번호"
, first_name || ' ' || last_name AS "사원명"
, nvl ( salary + (salary * commission_pct), salary) AS "월급"
, department_id AS "부서번호"
from employees
order by 4, 3 desc;
--> asc 생략 가능함
<문제>
-- 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 4, 3 desc;