연산자

kxsxh·2024년 2월 19일
0

DataBase

목록 보기
2/5

비교연산자

 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 구문을 작성하기 전 반드시 해당 테이블의 구조를 먼저 확인하자


오름차순, 내림차순

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

  • 1,2차 정렬
 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; 

  • where "월급" > 10000
  • where 3 > 10000
    -> 순서때문에 이렇게 적으면 안됌
    단, 이런 걸로 생각해야함

AND OR IN() NOT 연산자

0개의 댓글