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 함수 사용
테이블에서 원하는 행(튜플) 만 뽑아 올 수 있다.
FORM 다음에 WHERE절 실행 다음 SELECT
select *
from ~
where ~
and ~
and 가 or 보다 우선순위가 높아 먼저 실행된단말이지
SELECT *
FROM TB_MEMBER
WHERE GRADE_CD = 3
OR AGE = 30
AND GENDER ='남' ;

WHERE NOT PRD_TYPE = '가전'
WHERE PRED_TYPE != '가전'
실무에선 != 자주 사용
NULL 값을 출력하는 문법
IS NULL = 연산자
IS NOT NULL = 널이 아닌 자료를 불러온다

OR 을 계속 쓰는 번거로움을 없애기 위해 사용
IN 앞에 NOT을 붙여서 부정 가능
NOT IN 뒤에 NULL이 들어가면 아무것도 안나옴!!

WHERE AGE(컬럼) BETWEEN 20 AND 35 ;
20 이상 35 이하
10>= 20<= [10 이상 쭈욱 찾고 20이하 쭈욱 찾아 공통점을 찾는다]
열린조건
10이상 20이하 를 딱 잡아놓고 찾아온다
닫힌조건
BETWEEN 과 AND 는 셋트
매칭 연산을 할 수 있다.
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' 양식을 지켜줘야함