DATABASE

[오라클] UPPER(), LOWER(), INITCAP() / TO_DATE() / BETWEEN ⓐ AND ⓑ

온풀 2022. 3. 11. 00:26
20220218_01_scott.sql / 오라클 4일 차

UPPER(), LOWER(), INITCAP()

SELECT 'oRaCLe' "COL1"
    , UPPER('oRaCLe') "COL2"     --> 대문자
    , LOWER('oRaCLe') "COL3"     --> 소문자
    , INITCAP('oRaCLe') "COL4"   --> 앞글자만 대문자
FROM DUAL;
--==>> oRaCLe    ORACLE    oracle    Oracle
--> UPPER() 는 모두 대문자로 변환
--  LOWER() 는 모두 소문자로 변환
--  INITCAP() 은 첫 글자만 대문자로 하고 나머지는 모두 소문자로 변환하여 반환

--○ TBL_EMP 테이블을 대상으로 검색값이 'sALeSmAN' 인 조건으로
--   해당 직종 사원의 사원번호, 사원명, 직종명을 조회한다.
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명"
FROM TBL_EMP
WHERE JOB = 'sALeSmAN';
--==>> 조회 결과 없음.

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명"
FROM TBL_EMP
WHERE JOB = UPPER('sALeSmAN');
--==>>
/*
7499    ALLEN    SALESMAN
7521    WARD    SALESMAN
7654    MARTIN    SALESMAN
7844    TURNER    SALESMAN
8000    호석이    SALESMAN
8001    문정이    SALESMAN
*/

--○ 실습을 위한 추가 데이터 입력
INSERT INTO TBL_EMP(EMPNO, ENAME, JOB, MGR, HIREDATE, DEPTNO, COMM)
VALUES(8002, '태형이', 'salesman', 7369, SYSDATE, 20, 100);
--==>> 1 행 이(가) 삽입되었습니다.

SELECT *
FROM TBL_EMP;

COMMIT;
--==>> 커밋 완료.

--○ TBL_EMP 테이블에서 직종이 영업사원(세일즈맨)인 사원들의
--   사원번호, 사원명, 직종명을 조회한다.
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명"
FROM TBL_EMP
WHERE UPPER(JOB) = UPPER('sALeSmAN');

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명"
FROM TBL_EMP
WHERE LOWER(JOB) = LOWER('sALeSmAN');

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명"
FROM TBL_EMP
WHERE INITCAP(JOB) = INITCAP('sALeSmAN');
--==>>
/*
7499    ALLEN    SALESMAN
7521    WARD    SALESMAN
7654    MARTIN    SALESMAN
7844    TURNER    SALESMAN
8000    호석이    SALESMAN
8001    문정이    SALESMAN
8002    태형이    salesman
*/

TO_DATE()

  • 오라클의 날짜 변환 함수
SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE = TO_DATE('1981-09-28', 'YYYY-MM-DD');    -- 매개변수 두 개
--==>> MARTIN    SALESMAN    1981-09-28

TBL_EMP 테이블에서 입사일이 1981년 9월 28일 이후(해당일 포함) 입사한 직원들의 사원명, 직종명, 입사일 항목을 조회한다.

SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE >= TO_DATE('1981-09-28', 'YYYY-MM-DD');   
--==>>
/*
MARTIN    SALESMAN    1981-09-28
SCOTT    ANALYST     1987-07-13
KING    PRESIDENT    1981-11-17
ADAMS    CLERK        1987-07-13
JAMES    CLERK        1981-12-03
FORD    ANALYST        1981-12-03
MILLER    CLERK        1982-01-23
호석이    SALESMAN    2022-02-18
문정이    SALESMAN    2022-02-18
태형이    salesman    2022-02-18
*/

--※ 오라클에서는 날짜 데이터에 대한 크기 비교가 가능하다.
--   오라클에서는 날짜 데이터에 대한 크기 비교 시 
--   과거보다 미래를 더 큰 값으로 간주한다.

--○ TBL_EMP 테이블에서 입사일이 1981년 4월 2일 부터 
--   1981년 9월 28일 사이에 입사한 직원들의
--   사원명, 직종명, 입사일 항목을 조회한다.
SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE 1981년 4월 2일 <= 입사일 <= 1981년 9월 28일; -- (X)

SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE >= TO_DATE('1981-04-02', 'YYYY-MM-DD')     -- 이후(이상) → 해당일 포함  cf) 초과
  AND HIREDATE <= TO_DATE('1981-09-28', 'YYYY-MM-DD');    -- 이전(이하) → 해당일 포함  cf) 미만
--==>
/*
JONES    MANAGER        1981-04-02
MARTIN    SALESMAN    1981-09-28
BLAKE    MANAGER        1981-05-01
CLARK    MANAGER     1981-06-09
TURNER    SALESMAN    1981-09-08
*/

BETWEEN ⓐ AND ⓑ (숫자 문자 다 사용 가능)

SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE 이 1981년 4월 2일과 1981년 9월 28일 사이;

SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE BETWEEN TO_DATE('1981-04-02', 'YYYY-MM-DD')    
                   AND TO_DATE('1981-09-28', 'YYYY-MM-DD');
--==>
/*
JONES    MANAGER        1981-04-02
MARTIN    SALESMAN    1981-09-28
BLAKE    MANAGER        1981-05-01
CLARK    MANAGER     1981-06-09
TURNER    SALESMAN    1981-09-08
*/

--○ TBL_EMP 테이블에서 급여(SAL)가 2450에서 3000 사이의 직원들을 모두 조회한다.
SELECT *
FROM TBL_EMP
WHERE SAL BETWEEN 2450 AND 3000;
--==>>
/*
7566    JONES    MANAGER    7839    1981-04-02    2975        20
7698    BLAKE    MANAGER    7839    1981-05-01    2850        30
7782    CLARK    MANAGER    7839    1981-06-09    2450        10
7788    SCOTT    ANALYST    7566    1987-07-13    3000        20
7902    FORD    ANALYST    7566    1981-12-03    3000        20
*/

SELECT *
FROM TBL_EMP
WHERE ENAME BETWEEN 'C' AND 'S';    -- 사전식 배열
--==>>
/*
7566    JONES    MANAGER        7839    1981-04-02    2975            20
7654    MARTIN    SALESMAN    7698    1981-09-28    1250    1400    30
7782    CLARK    MANAGER        7839    1981-06-09    2450            10
7839    KING    PRESIDENT            1981-11-17    5000            10
7900    JAMES    CLERK        7698    1981-12-03     950            30
7902    FORD    ANALYST     7566    1981-12-03    3000            20
7934    MILLER    CLERK        7782    1982-01-23    1300            10
*/


SELECT *
FROM TBL_EMP
WHERE ENAME BETWEEN 'C' AND 's';


--※ BETWEEN ⓐ AND ⓑ 는 날짜형, 숫자형, 문자형 데이터 모두에 적용된다.
--   단, 문자형일 경우 아스키코드 순서를 따르기 때문에 (사전식 배열)
--   대문자가 앞쪽에 위치하고 소문자가 뒤쪽에 위치한다.
--   또한, BETWEEN ⓐ AND ⓑ는 해당 구문이 수행되는 시점에서
--   오라클 내부적으로는 부등호 연산자의 형태로 바뀌어 연산 처리된다.

SELECT ASCII('A') "COL1", ASCII('B') "COL2", ASCII('a') "COL3", ASCII('b') "COL4"
FROM DUAL;
--==>> 65    66    97    98