05/23_Oracle_Where

정희운·2023년 5월 23일
0
5. (심화) EMPLOYEES 테이블에는 DEPARTMENT_ID 컬럼이 존재합니다. (직원이 어느 부서에 있는지를 표현합니다.) 
         이번 회사의 영업이익을 확인해보니 DEPARTMENT_ID 가 50인 부서가 눈에 띄는 활약을 해주어 보너스를 지급하려고 합니다.
         즉, DEPARTMEMT_ID 가 50 이면 기존 SALARY에 +1000을 추가해 실지급액으로 주고, 그 외에는 기존의 SALARY만큼만 실지급액을 주면 됩니다. 

         아래와 같이 출력을 해주세요.  
         @힌트1 : 보너스여부 와 실지급액 컬럼은 AS 로 만든 컬럼입니다. 
         @힌트2: DECODE 함수와 산술연산을 적절히 조합하여 문제를 풀어볼 수 있습니다.


[출력결과] (총 107행 출력) 
EMPLOYEE_ID   DEPARTMENT_ID   SALARY   보너스여부   실지급액    <-- 여긴 컬럼 이름 
    100  	        90	       24000	   N	   24000
    101	            90	       17000	   N	   17000
    ...            ...          ...       ...       ... 
    123         	50	       6500	       Y	   7500
    124	            50	       5800	       Y	   6800    
    ...            ...          ...       ...       ... 
    205	           110	      12008	       N	   12008
    206	           110	      8300	       N	   8300
*/
select employee_id
     , department_id
     , salary
     , decode(department_id, 50, 'Y','N') as 보너스여부
     , salary + decode(department_id, 50, 1000 , 0) as 실지급액
     
     , decode (department_id, 50, salary+1000, salary)
from employees;

DECODE 함수 사용

WHERE 문법

테이블에서 원하는 행(튜플) 만 뽑아 올 수 있다.

FORM 다음에 WHERE절 실행 다음 SELECT

논리조건 and / or

select *
  from ~
 where ~
   and ~

and 가 or 보다 우선순위가 높아 먼저 실행된단말이지

SELECT *
  FROM TB_MEMBER
 WHERE GRADE_CD = 3
    OR AGE = 30
   AND GENDER ='남' ; 

부정연산 NOT / != / <>

WHERE NOT PRD_TYPE = '가전'
WHERE PRED_TYPE != '가전'

실무에선 != 자주 사용

NULL

NULL 값을 출력하는 문법
IS NULL = 연산자
IS NOT NULL = 널이 아닌 자료를 불러온다

IN 연산자

OR 을 계속 쓰는 번거로움을 없애기 위해 사용

NOT IN

IN 앞에 NOT을 붙여서 부정 가능
NOT IN 뒤에 NULL이 들어가면 아무것도 안나옴!!

BEETWEEN

WHERE AGE(컬럼) BETWEEN 20 AND 35 ;
20 이상 35 이하

10>= 20<= [10 이상 쭈욱 찾고 20이하 쭈욱 찾아 공통점을 찾는다]
열린조건

10이상 20이하 를 딱 잡아놓고 찾아온다
닫힌조건

BETWEEN 과 AND 는 셋트

LIKE 조건

매칭 연산을 할 수 있다.

SELECT *
  FROM TB_PRD
  WHERE PRD_NAME LIKE '수%'; --수로 시작하는 문자를 매칭한다
  
SELECT *
  FROM TB_PRD
 WHERE PRD_TYPE LIKE '%용%'; --용을 포함한 상품이름을 가져온다.

SELECT *
  FROM TB_PRD
 WHERE PRD_NAME LIKE '%기'; --기로 끝나는 상품이름을 가져온다.


SELECT * FROM TB_PRD WHERE PRD_NAME LIKE '__기';
__기 (언더바) 수만큼 단어의 기로 끝나는 자료 찾기


20230501 날 자료를 불러온다.
(야매)


(정석)

WHERE REG_DATE >= TO_DATE('20230524000000' , 'YYYYMMDDHH24MISS')
	  REG_DATE <= TO_DATE('20230525235959' , 'YYYYMMDDHH24MISS')

뒤에 'YYYMMDDHH24MISS' 양식을 지켜줘야함

0개의 댓글