riboooo
Daily Traveler 리보
riboooo
전체 방문자
오늘
어제
  • 분류 전체보기 (71)
    • 프로젝트,발표 (2)
    • IT (67)
      • HTML ,CSS (3)
      • JAVA (22)
      • SQL (37)
      • 자료구조,알고리즘 (0)
      • PYTHON (4)
      • 보안 (0)
      • 서버 구축 (0)
      • GITHUB (1)
    • About ribo (2)
      • 커리어 (1)
      • 회고록 (1)
      • 버킷리스트 (0)
      • 일기 (0)
      • 잡담 (0)
    • 책 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오라클
  • ORACLE CASE
  • inspectdb
  • java
  • ORACLE 조건문
  • Django
  • prewise
  • ORACLE NULL 함수
  • select
  • join
  • django설계
  • non-prewise
  • 네이버핵데이
  • ORACLE 숫자 함수
  • SQL
  • 시간 중복 활용
  • 자바코딩컨벤션
  • INSTALLED_APPS
  • oracle
  • ORACLE 날짜 관련 함수

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
riboooo

Daily Traveler 리보

IT/SQL

[ORACLE]SQL 조건문(Condition)

2020. 7. 1. 17:31

CASE 문

조건을 주고 진행할 때, 하나의 컬럼으로 인식된다.

CASE
WHEN
(조건 1) THEN 반환1
WHEN (조건 2) THEN 반환2
WHEN (조건 3) THEN 반환3
....
ELSE 모든 조건 반환 못할시 기본값
END

SELECT ename, job, sal
    ,CASE
        WHEN job = 'SALESMAN' THEN sal * 1.05     -- 세일즈맨 5%
        WHEN job = 'MANAGER' THEN sal * 1.10      -- 매니저 10%
        WHEN job = 'PRESIDENT' THEN sal * 1.20    -- 사장   20%
        ELSE sal * 1
    END bonus
FROM emp;
SELECT empno, ename, 
    CASE
        WHEN deptno = 10 THEN 'ACCOUNTING'
        WHEN deptno = 20 THEN 'RESEARCH'
        WHEN deptno = 30 THEN 'SALES'
        WHEN deptno = 40 THEN 'OPERATIONS'
        ELSE 'DDIT'
    END DNAME
FROM emp;

DECODE 문

조건에 따라 반환 값이 달라지는 함수
(단, 비교연산 (=)만 가능)

DECODE(기준값[col|expression]
, 비교값1, 반환1,
, 비교값2, 반환2,
, 비교값3, 반환3,
......
, 그외 반환[없을경우 NULL])

SELECT ename, job, sal,
                    **DECODE(job, 'SALESMAN', sal * 1.05
                     , 'MANAGER', sal * 1.10
                     , 'PRESIDENT', sal * 1.20
                     , sal * 1) bonus
FROM emp;**
  • 실습

      -- 중첩 case
      SELECT ename, job, sal,deptno
          ,CASE
              WHEN job = 'SALESMAN' THEN sal * 1.05     -- 세일즈맨 5%
              WHEN job = 'MANAGER' THEN 
                                          CASE WHEN deptno = 30 THEN sal * 1.5 ELSE sal * 1.10 END     -- 매니저 10%
              WHEN job = 'PRESIDENT' THEN sal * 1.20    -- 사장   20%
              ELSE sal * 1
          END bonus
        FROM emp;
      -- 중첩 DECODE
      SELECT ename, job, sal, DECODE(job, 'SALESMAN', sal *1.05,
                                           'MANAGER' , DECODE(deptno, 30 , sal * 1.5 , sal * 1.1 ),
                                           'PRESIDENT', sal*1.20,
                                           sal *1) bonus
       FROM emp;
      -- hiredate 기준 건강검진 대상자 찾기
      SELECT empno, ename, hiredate, DECODE( MOD(TO_CHAR(SYSDATE, 'YYYY'),2) , 0,
                                      CASE
                                          WHEN MOD(TO_CHAR(hiredate, 'YYYY'),2) = 0 THEN '건강검진 대상자'
                                          ELSE '건강검진 비대상자'
                                      END
                                      ,
                                      CASE
                                          WHEN MOD(TO_CHAR(hiredate, 'YYYY'),2) = 1 THEN '건강검진 대상자'
                                          ELSE '건강검진 비대상자'
                                      END
                                      ) contact
      FROM emp;
    
      --텍스트는 '' 로 묶기 ""아님
      --AS는 맨 마지막거에만 써주면된다. END 뒤에 여러번쓰는거아
      --MOD(제수, 피제수) 인자2개
    
      -- 간단
      SELECT empno, ename, hiredate, DECODE( MOD(TO_CHAR(SYSDATE, 'YYYY'),2) ,MOD(TO_CHAR(hiredate, 'YYYY'),2),
                                      '건강검진 대상자',
                                      '건강검진 비대상자') contact
      FROM emp;
    
      SELECT userid, usernm, ' '  alias , reg_dt, DECODE( MOD(TO_CHAR(SYSDATE, 'YYYY'),2) ,MOD(TO_CHAR(reg_dt, 'YYYY'),2),
                                                 '건강검진 대상자',
                                                 '건강검진 비대상자') contact_to_doctor
      FROM users;
반응형

'IT > SQL' 카테고리의 다른 글

[ORACLE / ANSI] JOIN  (0) 2020.07.02
[ORACLE] GROUP BY 함수  (0) 2020.07.01
[ORACLE] NULL 관련 함수  (0) 2020.06.30
[ORACLE] 형변환 / 실행계획 / 국제화 i18n  (0) 2020.06.30
[ORACLE] 문자열 함수, 숫자 관련 함수, 날짜 관련 함수  (0) 2020.06.30
    riboooo
    riboooo
    최준영 https://github.com/riboooo

    티스토리툴바