상세 컨텐츠

본문 제목

Oracle - 기초실습

IT/DBMS

by TMI1 2025. 6. 30. 12:38

본문

SELECT USER
FROM DUAL;
--==>> SCOTT

--○ NVL2()
--> 첫 번째 파라미터 값이 NULL 이 아닌 경우, 두 번째 파라미터 값을 반환하고,
-- 첫 번째 파라미터 값이 NULL 인 경우, 세 번째 파라미터 값을 반환한다.

SELECT NVL2(NULL, '청기올려', '백기올려')"결과확인"
FROM DUAL;
--==>>백기올려

SELECT NVL2(20, '청기올려', '백기올려')"결과확인"
FROM DUAL;
--==>>청기올려

SELECT ENAME, COMM, NVL2(COMM, '청기올려','백기올려') "결과확인"
FROM TBL_EMP;
--==>>
/*
SMITH		백기올려
ALLEN	300	청기올려
WARD	500	청기올려
JONES		백기올려
MARTIN	1400	청기올려
BLAKE		백기올려
CLARK		백기올려
SCOTT		백기올려
KING		백기올려
TURNER	0	청기올려
ADAMS		백기올려
JAMES		백기올려
FORD		백기올려
MILLER		백기올려
*/

--○ TBL_EMP 테이블에서 모든 사원들의
--   사원명, 사원번호, 급여, 커미션, 연봉 항목을 조회한다.
--   단, 급여(SAL)는 매월 지급한다.
--   또한, 수당(COMM)은 매년 지급한다. 

SELECT ENAME "사원명", EMPNO "사원번호", SAL "급여", COMM "커미션"
        , NVL2(COMM, SAL * 12 + COMM, SAL*12) "연봉" -- 널인지 아닌지 확인하는 건 커미션 
FROM TBL_EMP;

--==>> 
/*
SMITH	7369	800		9600
ALLEN	7499	1600	300	19500
WARD	7521	1250	500	15500
JONES	7566	2975		35700
MARTIN	7654	1250	1400	16400
BLAKE	7698	2850		34200
CLARK	7782	2450		29400
SCOTT	7788	3000		36000
KING	7839	5000		60000
TURNER	7844	1500	0	18000
ADAMS	7876	1100		13200
JAMES	7900	950		11400
FORD	7902	3000		36000
MILLER	7934	1300		15600
*/

--○ COALESCE()
--> 맨 앞에 있는 매개변수부터 차례로 NULL 인지 아닌지 확인하여
--  NULL 이 아닐 경우 적용(반환, 처리)하고,
--  NULL 인 경우에는 그 다음 매개변수 값으로 적용(반환, 처리)한다.
--  NVL() 이나 NVL2() 와 비교하여...
--  모~~ 든 경우의 수를 고려할 수 있는 특징을 갖고 있다.

SELECT NULL "기본확인"
    , COALESCE(NULL, NULL, NULL, 10) "결과확인" -- 차례로 확인후 널이아니네를 반환하는거 
    , COALESCE(NULL, NULL, NULL, NULL, NULL, NULL, NULL, 150) "결과확인2"
    , COALESCE(NULL, NULL, NULL, NULL, 10, NULL, NULL, NULL, NULL, NULL, 150) "결과확인3"
FROM DUAL;
--==>> 10	150	10

--○ 실습 환경 조성을 위한 데이터 추가 입력
INSERT INTO TBL_EMP(EMPNO, ENAME, JOB, MGR, HIREDATE, DEPTNO)
VALUES(8000, '이동건', 'SALESMAN', 7839, SYSDATE, 10);

INSERT INTO TBL_EMP(EMPNO, ENAME, JOB, MGR, HIREDATE, COMM, DEPTNO)
VALUES(8001, '김주형', 'SALESMAN', 7839, SYSDATE, 100, 10);

--○확인
SELECT *
FROM TBL_EMP;
--==>> 
/*

8000	이동건	SALESMAN	7839	25/06/30			10 -- 급여, 커미션 O
8001	김주형	SALESMAN	7839	25/06/30		100	10 -- 커미션 100
*/

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

--○ TBL_EMP 테이블에서 모든 사원들의
--   사원명, 사원번호, 급여, 커미션, 연봉 항목을 조회한다.
--   단, 급여(SAL)는 매월 지급한다.
--   또한, 수당(COMM)은 매년 지급한다. 

SELECT ENAME "사원명", EMPNO "사원번호", SAL "급여", COMM "커미션"
      , SAL * 12 + NVL(COMM, 0) "연봉"
FROM TBL_EMP;

SELECT ENAME "사원명", EMPNO "사원번호", SAL "급여", COMM "커미션"
    , COALESCE((SAL * 12 + COMM), (SAL*12), COMM, 0) "연봉" 
    -- 급여+커미션 조건1(기본수식) / 급여*12 조건2(커미션없는 사람), 
    -- 커미션만 있는사람(조건3), 아무것도 없는사람(조건4=NULL)
FROM TBL_EMP;

/*
SMITH	7369	800		9600
ALLEN	7499	1600	300	19500
WARD	7521	1250	500	15500
JONES	7566	2975		35700
MARTIN	7654	1250	1400	16400
BLAKE	7698	2850		34200
CLARK	7782	2450		29400
SCOTT	7788	3000		36000
KING	7839	5000		60000
TURNER	7844	1500	0	18000
ADAMS	7876	1100		13200
JAMES	7900	950		11400
FORD	7902	3000		36000
MILLER	7934	1300		15600
이동건	8000			0
김주형	8001		100	100
*/
--------------------------------------------------------------------------------
--==>>
--○

--※ 날짜와 시간에 대한 세션 설정 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
--==>> Session이(가) 변경되었습니다.

SELECT *
FROM TBL_EMP;

DESC TBL_EMP;

SELECT SYSDATE
FROM DUAL;
--==>> 25/06/30
--==>> 2025-06-30 09:49:42

--○ 현재 날짜 및 시간을 반환하는 함수
SELECT SYSDATE, CURRENT_DATE, LOCALTIMESTAMP
FROM DUAL;
--==>
/*
2025-06-30 10:02:49	
2025-06-30 10:02:49	
25/06/30 10:02:49.000000000
*/

--※ 날짜와 시간에 대한 세션 설정 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
--==>Session이(가) 변경되었습니다.

-- 변경 이후 다시 조회
SELECT SYSDATE, CURRENT_DATE, LOCALTIMESTAMP
FROM DUAL; 
--==>
/*
2025-06-30	
2025-06-30	
25/06/30 10:04:55.000000000
*/

--○ 컬럼과 컬럼의 연결(결합)
--   문자 타앱과 문자 타입의 연결
--   [+] 연산자를 통한 결합 수행은 불가능~!!! [||]
SELECT 1 + 1
FROM DUAL;
--==> 2

/*SELECT '김주형', '이동건'
FORM DAUL;*/

SELECT '김주형' + '이동건'
FORM DAUL;
--==> 에러 발생 
/*
ORA-00923: FROM keyword not found where expected
00923. 00000 -  "FROM keyword not found where expected"
*Cause:    
*Action:
184행, 30열에서 오류 발생
*/

SELECT "김주형"||"이동건"
FORM DAUL;

SELECT ENAME, JOB
FROM TBL_EMP;
--==>
/*
SMITH	CLERK
ALLEN	SALESMAN
WARD	SALESMAN
JONES	MANAGER
MARTIN	SALESMAN
BLAKE	MANAGER
CLARK	MANAGER
SCOTT	ANALYST
KING	PRESIDENT
TURNER	SALESMAN
ADAMS	CLERK
JAMES	CLERK
FORD	ANALYST
MILLER	CLERK
이동건	SALESMAN
김주형	SALESMAN
*/

SELECT ENAME || JOB "결과확인"
FROM TBL_EMP;

--==>>
/*
SMITHCLERK
ALLENSALESMAN
WARDSALESMAN
JONESMANAGER
MARTINSALESMAN
BLAKEMANAGER
CLARKMANAGER
SCOTTANALYST
KINGPRESIDENT
TURNERSALESMAN
ADAMSCLERK
JAMESCLERK
FORDANALYST
MILLERCLERK
이동건SALESMAN
김주형SALESMAN
*/

DESC TBL_EMP;
--==>>
/*
이름       널? 유형           
-------- -- ------------ 
EMPNO       NUMBER(4)       -- 숫자 타입
ENAME       VARCHAR2(10)    -- 문자 타입
JOB         VARCHAR2(9)  
MGR         NUMBER(4)    
HIREDATE    DATE         
SAL         NUMBER(7,2)  
COMM        NUMBER(7,2)  
DEPTNO      NUMBER(2)    
*/

SELECT EMPNO || ENAME "결과확인"
FROM TBL_EMP;
--==>>
/*
7369SMITH
7499ALLEN
7521WARD
7566JONES
7654MARTIN
7698BLAKE
7782CLARK
7788SCOTT
7839KING
7844TURNER
7876ADAMS
7900JAMES
7902FORD
7934MILLER
8000이동건
8001김주형
*/
--     문자타입   날짜타입  문자타입   숫자타입  문자타입
--     ---------  -------   -------   ---  ------------
SELECT '규석이는', SYSDATE, '에 연봉', 500, '억을 원한다.'
FROM DUAL;
--==>>규석이는	2025-06-30	에 연봉	500	억을 원한다.

--     문자타입   날짜타입  문자타입   숫자타입  문자타입
--     ---------  -------   -------   ---  ------------
SELECT '규석이는'|| SYSDATE || '에 연봉' || 500 || '억을 원한다.' "결과확인"
FROM DUAL;
--==>> 규석이는2025-06-30에 연봉500억을 원한다.

--※ 오라클에서는 문자 타입의 형태로 타입을 변환하는 별도의 과정 없이
--   위에서 처리한 내용처럼 [||] 만 삽입해주면 간단히 컬럼과 컬럼을
--   (서로 다른 종류의 데이터) 결합하는 것이 가능하다.
--   이와 비교하여 MS-SQL에서는 모든 데이터를 문자타입으로 CONVERT 해야 한다.

SELECT *
FROM TBL_EMP;

-- 실습 진행 전에 이동건 사원과 김주형 사원 제거
SELECT *
FROM TBL_EMP
WHERE EMPNO=8000 OR EMPNO=8001;
--==>>
/*
8000	이동건	SALESMAN	7839	2025-06-30			10
8001	김주형	SALESMAN	7839	2025-06-30		100	10
*/

DELETE
FROM TBL_EMP
WHERE EMPNO=8000 OR EMPNO=8001;
/*
2개 행 이(가) 삭제되었습니다.
*/

SELECT *
FROM TBL_EMP;
--==>> 원하는 데이터가 제데로 제거되었음을 확인

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

--○ TBL_EMP 테이블의 데이터를 활용하여
--   모든 직원들의 데이터에 대해
--   다음과 같은 결과를 얻을 수 있도록 쿼리문을 구성한다.

--  SMITH 의 현재 연봉은 9600인데, 희망 연봉은 19200이다.
--  ALLEN 의 현재 연봉은 19500인데, 희망 연봉은 39000이다. 

-- 현재연봉은 앞에 수식으로 얻어낸 결과 

DESC TBL_EMP;

-- 방식1
SELECT ENAME || '의 현재 연봉은' || NVL(SAL * 12 + COMM, SAL *12) -- 커미션이 NULL도 있으므로 
    ||  '인데 희망 연봉은' || NVL(SAL * 12 + COMM, SAL *12) *2 || '이다.'
FROM TBL_EMP;
--==>>
/*
SMITH의 현재 연봉은9600인데 희망 연봉은19200이다.
ALLEN의 현재 연봉은19500인데 희망 연봉은39000이다.
WARD의 현재 연봉은15500인데 희망 연봉은31000이다.
JONES의 현재 연봉은35700인데 희망 연봉은71400이다.
MARTIN의 현재 연봉은16400인데 희망 연봉은32800이다.
BLAKE의 현재 연봉은34200인데 희망 연봉은68400이다.
CLARK의 현재 연봉은29400인데 희망 연봉은58800이다.
SCOTT의 현재 연봉은36000인데 희망 연봉은72000이다.
KING의 현재 연봉은60000인데 희망 연봉은120000이다.
TURNER의 현재 연봉은18000인데 희망 연봉은36000이다.
ADAMS의 현재 연봉은13200인데 희망 연봉은26400이다.
JAMES의 현재 연봉은11400인데 희망 연봉은22800이다.
FORD의 현재 연봉은36000인데 희망 연봉은72000이다.
MILLER의 현재 연봉은15600인데 희망 연봉은31200이다.
*/

-- 방식 2
SELECT ENAME || '의 현재 연봉은' || NVL2(COMM, SAL * 12 + COMM, SAL*12)
 ||  '인데 희망 연봉은' || NVL2(COMM, SAL * 12 + COMM, SAL*12)*2 || '이다'
FROM TBL_EMP;

-- 방식 3 
SELECT ENAME || '의 현재 연봉은' || COALESCE(SAL * 12 + COMM, SAL *12, COMM, 0) -- 커미션이 NULL도 있으므로 
    ||  '인데 희망 연봉은' || COALESCE(SAL * 12 + COMM, SAL *12, COMM, 0) *2 || '이다.'
FROM TBL_EMP;
--==>>
/*
SMITH의 현재 연봉은9600인데 희망 연봉은19200이다.
ALLEN의 현재 연봉은19500인데 희망 연봉은39000이다.
WARD의 현재 연봉은15500인데 희망 연봉은31000이다.
JONES의 현재 연봉은35700인데 희망 연봉은71400이다.
MARTIN의 현재 연봉은16400인데 희망 연봉은32800이다.
BLAKE의 현재 연봉은34200인데 희망 연봉은68400이다.
CLARK의 현재 연봉은29400인데 희망 연봉은58800이다.
SCOTT의 현재 연봉은36000인데 희망 연봉은72000이다.
KING의 현재 연봉은60000인데 희망 연봉은120000이다.
TURNER의 현재 연봉은18000인데 희망 연봉은36000이다.
ADAMS의 현재 연봉은13200인데 희망 연봉은26400이다.
JAMES의 현재 연봉은11400인데 희망 연봉은22800이다.
FORD의 현재 연봉은36000인데 희망 연봉은72000이다.
MILLER의 현재 연봉은15600인데 희망 연봉은31200이다.
*/

SELECT *
FROM TBL_EMP;

-- SMITH's 입사일은 1980-12-17 이다. 그리고 급여는 800 이다.
-- ALLEN's 입사일은 1982-02-20 이다. 그리고 급여는 1600 이다.
-- DATE sal

DESC TBL_EMP;

SELECT ENAME || '''s 입사일은 ' || HIREDATE  
|| ' 이다. 그리고 급여는 ' || SAL || ' 이다.'
FROM TBL_EMP;

--※ 문자열을 나타내는 홑따옴표 사이에서(시작과 끝)
--   홑따옴표 두 개가 홑따옴표 하나(어서프스토피)를 의미한다. 
--   홑따옴표['] 하나는 문자열의 시작을 나타내고
--   홑따옴표[''] 두개는 문자열 영역 안에서 어퍼스트로피를 나타내며
--   다시 등장하는 홑따옴표['] 하나가 문자열 영역의 종료를 의미하게 되는 것이다.
--==>>
/*
SMITH's 입사일은 1980-12-17 이다. 그리고 급여는 800 이다
ALLEN's 입사일은 1981-02-20 이다. 그리고 급여는 1600 이다
WARD's 입사일은 1981-02-22 이다. 그리고 급여는 1250 이다
JONES's 입사일은 1981-04-02 이다. 그리고 급여는 2975 이다
MARTIN's 입사일은 1981-09-28 이다. 그리고 급여는 1250 이다
BLAKE's 입사일은 1981-05-01 이다. 그리고 급여는 2850 이다
CLARK's 입사일은 1981-06-09 이다. 그리고 급여는 2450 이다
SCOTT's 입사일은 1987-07-13 이다. 그리고 급여는 3000 이다
KING's 입사일은 1981-11-17 이다. 그리고 급여는 5000 이다
TURNER's 입사일은 1981-09-08 이다. 그리고 급여는 1500 이다
ADAMS's 입사일은 1987-07-13 이다. 그리고 급여는 1100 이다
JAMES's 입사일은 1981-12-03 이다. 그리고 급여는 950 이다
FORD's 입사일은 1981-12-03 이다. 그리고 급여는 3000 이다
MILLER's 입사일은 1982-01-23 이다. 그리고 급여는 1300 이다
*/

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

SELECT *
FROM TBL_EMP
WHERE JOB = 'saleman';
--==>> 조회결과없음

--※ 실습 환경 구성을 위한 추가 데이터 입력
INSERT INTO TBL_EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(8000, '최규석', 'saLesMAN', 7698 , SYSDATE, 2000 , 200, 30);

INSERT INTO TBL_EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(8001, '조경진', 'SaLesMan', 7698 , SYSDATE, 2000 , 200, 30);

INSERT INTO TBL_EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(8002, '이채원', 'salesman', 7698 , SYSDATE, 2000 , 200, 30);

INSERT INTO TBL_EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(8003, '이유빈', 'SALESMan', 7698 , SYSDATE, 2000 , 200, 30);
--==>> 1 행이(가) 삽입되었습니다. * 4

--○ 확인
SELECT *
FROM TBL_EMP;
--==>>
/*
7369	SMITH	CLERK	7902	1980-12-17	800		20
7499	ALLEN	SALESMAN	7698	1981-02-20	1600	300	30
7521	WARD	SALESMAN	7698	1981-02-22	1250	500	30
7566	JONES	MANAGER	7839	1981-04-02	2975		20
7654	MARTIN	SALESMAN	7698	1981-09-28	1250	1400	30
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
7839	KING	PRESIDENT		1981-11-17	5000		10
7844	TURNER	SALESMAN	7698	1981-09-08	1500	0	30
7876	ADAMS	CLERK	7788	1987-07-13	1100		20
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
8000	최규석	saLesMAN	7698	2025-06-30	2000	200	30
8001	조경진	SaLesMan	7698	2025-06-30	2000	200	30
8002	이채원	salesman	7698	2025-06-30	2000	200	30
8003	이유빈	SALESMan	7698	2025-06-30	2000	200	30
*/

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

--○TBL_EMP 테이블에서 대소문자 구분없이 세일즈맨 직종인 사원의
--  사원번호, 사원명, 직종, 입사일, 부서번호 항목을 조회한다.
--  (※ 세일즈맨 : SALESMAN, saLesMAN , SaLesMan, salesman , SALESMan) 

INSERT INTO TBL_EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(8001, '조경진', 'SaLesMan', 7698 , SYSDATE, 2000 , 200, 30);


SELECT *
FROM TBL_EMP;

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE JOB = 세일즈맨 ;
-- SALESMAN, saLesMAN , SaLesMan, salesman , SALESMan

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE JOB = 'SALESMAN' OR JOB = 'saLesMAN' OR JOB = 'SaLesMan' OR JOB = 'salesman' OR JOB = 'SALESMan';

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE JOB IN('SALESMAN', 'saLesMAN','SaLesMan','salesman','SALESMan');
/*
7499	ALLEN	SALESMAN	1981-02-20	30
7521	WARD	SALESMAN	1981-02-22	30
7654	MARTIN	SALESMAN	1981-09-28	30
7844	TURNER	SALESMAN	1981-09-08	30
8000	최규석	saLesMAN	2025-06-30	30
8001	조경진	SaLesMan	2025-06-30	30
8002	이채원	salesman	2025-06-30	30
8003	이유빈	SALESMan	2025-06-30	30
*/

-- 관찰
SELECT JOB "직종", UPPER(JOB) "직종확인1", LOWER(JOB) "직종확인2"
, INITCAP(JOB) "직종확인3"
FROM TBL_EMP;

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE UPPER(JOB) = 'SALESMAN';
--==>>
/*
7499	ALLEN	SALESMAN	1981-02-20	30
7521	WARD	SALESMAN	1981-02-22	30
7654	MARTIN	SALESMAN	1981-09-28	30
7844	TURNER	SALESMAN	1981-09-08	30
8000	최규석	saLesMAN	2025-06-30	30
8001	조경진	SaLesMan	2025-06-30	30
8002	이채원	salesman	2025-06-30	30
8003	이유빈	SALESMan	2025-06-30	30
*/

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE LOWER(JOB) = 'salesman';
/*
7499	ALLEN	SALESMAN	1981-02-20	30
7521	WARD	SALESMAN	1981-02-22	30
7654	MARTIN	SALESMAN	1981-09-28	30
7844	TURNER	SALESMAN	1981-09-08	30
8000	최규석	saLesMAN	2025-06-30	30
8001	조경진	SaLesMan	2025-06-30	30
8002	이채원	salesman	2025-06-30	30
8003	이유빈	SALESMan	2025-06-30	30
*/

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE INITCAP(JOB) = 'Salesman';
/*
7499	ALLEN	SALESMAN	1981-02-20	30
7521	WARD	SALESMAN	1981-02-22	30
7654	MARTIN	SALESMAN	1981-09-28	30
7844	TURNER	SALESMAN	1981-09-08	30
8000	최규석	saLesMAN	2025-06-30	30
8001	조경진	SaLesMan	2025-06-30	30
8002	이채원	salesman	2025-06-30	30
8003	이유빈	SALESMan	2025-06-30	30
*/

--○ TBL_EMP 테이블에서 입사일이 1981년 9월 28일 입사한 직원읜
-- 사원명, 직종명, 입사일 항목을 조회한다.

SELECT 사원명, 직종명, 입사일
FROM TBL_EMP
WHERE 입사일이 1981년 9월 28일;

SELECT ENAME "사원명", JOB "직종", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE ='1981-09-28';
-- 날짜타입 - 문자타입이라 잘못됐으나 오라클이 자동변환해준것으로 믿으면 안됨 
--==> MARTIN	SALESMAN	1981-09-28 

DESC TBL_EMP;
--==>>
/*
이름       널? 유형           
-------- -- ------------ 
EMPNO       NUMBER(4)    
ENAME       VARCHAR2(10) 
JOB         VARCHAR2(9)  
MGR         NUMBER(4)    
HIREDATE    DATE         
SAL         NUMBER(7,2)  
COMM        NUMBER(7,2)  
DEPTNO      NUMBER(2) 
*/

--○ TO_DATE()
SELECT 2025-06-30 "COL1"
      ,'2025-06-30' "COL2"
      ,TO_DATE('2025-06-30' ,'YYYY-MM-DD') "COL3"
FROM DUAL;
--==> 1989	2025-06-30	2025-06-30

SELECT TO_DATE('2025-06-31', 'YYYY-MM-DD') "RESULT"
FROM DUAL;
--==>> 에러발생 
/*
ORA-01839: date not valid for month specified
01839. 00000 -  "date not valid for month specified"
*Cause:    
*Action:
*/

SELECT TO_DATE('2025-13-05', 'YYYY-MM-DD') "RESULT"
FROM DUAL;
--==>> 에러발생 
/*
ORA-01843: not a valid month
01843. 00000 -  "not a valid month"
*Cause:    
*Action:
*/

SELECT TO_DATE('2025-02-29', 'YYYY-MM-DD') "RESULT"
FROM DUAL;
/*
ORA-01839: date not valid for month specified
01839. 00000 -  "date not valid for month specified"
*Cause:    
*Action:
*/

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 입사일이 1981년 9월 28일 이후(해당일 포함); 

SELECT ENAME "사원명", JOB "직종", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE이 입사일이 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	2025-06-30
조경진	SaLesMan	2025-06-30
이채원	salesman	2025-06-30
이유빈	SALESMan	2025-06-30
*/

--○ TBL_EMP 테이블에서 입사일이 1981년 4월 2일 부터
--   1981년 9월 28일 사이에 입사한 직원들의
--   입사한 직원의 사원번호 사원명, 직종명, 입사일 항목을 조회한다.(해당일 포함)

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", HIREDATE "입사일" 
FROM TBL_EMP
WHERE 입사일이 1981년 4월 2일 부터  
--1981년 9월 28일 사이;


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

SELECT EMPNO "사원번호" ENAME "사원명", JOB "직종", HIREDATE "입사일" 
FROM TBL_EMP
WHERE   입사일 >=1981년 4월 2일  
        입사일<= 1981년 9월 28일;

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명", HIREDATE "입사일" 
FROM TBL_EMP
WHERE HIREDATE >= TO_DATE('1981-04-02','YYYY-MM-DD')
    AND   HIREDATE <= TO_DATE('1981-09-28','YYYY-MM-DD');
/*
7566	JONES	MANAGER	1981-04-02
7654	MARTIN	SALESMAN	1981-09-28
7698	BLAKE	MANAGER	1981-05-01
7782	CLARK	MANAGER	1981-06-09
7844	TURNER	SALESMAN	1981-09-08
*/
--○ BETWEEN A) AND B)

SELECT EMPNO "사원번호", 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');

/*
7566	JONES	MANAGER	1981-04-02
7654	MARTIN	SALESMAN	1981-09-28
7698	BLAKE	MANAGER	1981-05-01
7782	CLARK	MANAGER	1981-06-09
7844	TURNER	SALESMAN	1981-09-08
*/
--○ BETWEEN A) AND B) 숫자를 대상으로 적용
SELECT EMPNO , ENAME , JOB, SAL
FROM TBL_EMP
WHERE SAL BETWEEN 1600 AND 3000;
/*
7499	ALLEN	SALESMAN	1600
7566	JONES	MANAGER	2975
7698	BLAKE	MANAGER	2850
7782	CLARK	MANAGER	2450
7788	SCOTT	ANALYST	3000
7902	FORD	ANALYST	3000
8000	최규석	saLesMAN	2000
8001	조경진	SaLesMan	2000
8002	이채원	salesman	2000
8003	이유빈	SALESMan	2000
*/

--○ BETWEEN A) AND B) 문자를 대상으로 적용
SELECT EMPNO , ENAME , JOB, SAL
FROM TBL_EMP
WHERE ENAME BETWEEN 'C' AND 'S';

--A       AND     B
--●--------------●

--==>> 
/*
7566	JONES	MANAGER	2975
7654	MARTIN	SALESMAN	1250
7782	CLARK	MANAGER	2450
7839	KING	PRESIDENT	5000
7900	JAMES	CLERK	950
7902	FORD	ANALYST	3000
7934	MILLER	CLERK	1300
*/

--※ BETWEEN A) AND B) 는 날짜형, 숫자형, 문자형 데이터 무두를 대상으로 사용할 수 있다.
--   단, 문자형일 경우 아스키코드 순서를 따르기 때문에(사전식 배열)
--   대문자가 앞쪽에 위치하고, 소문자가 뒤쪽에 위치하며
--   BETWEEN A) AND B)는 쿼리문이 수행되는 시점에서
--   오라클 내부적으로 부등호 연산자의 형태로 바뀌어 처리된다. 
--   사원명 s가 있다면 s는 나옴. 

SELECT EMPNO , ENAME , JOB, SAL
FROM TBL_EMP
WHERE ENAME BETWEEN 'C' AND 's';
/*
7369	SMITH	CLERK	800
7521	WARD	SALESMAN	1250
7566	JONES	MANAGER	2975
7654	MARTIN	SALESMAN	1250
7782	CLARK	MANAGER	2450
7788	SCOTT	ANALYST	3000
7839	KING	PRESIDENT	5000
7844	TURNER	SALESMAN	1500
7900	JAMES	CLERK	950
7902	FORD	ANALYST	3000
7934	MILLER	CLERK	1300
*/

--○ ASCII()
SELECT ASCII('A') "RESULT1", ASCII('B') "RESULT2"
      ,ASCII('a') "RESULT3", ASCII('b') "RESULT4"
FROM DUAL;       
--==>>65	66	97	98
--○
--※

SELECT *
FROM TBL_EMP
WHERE EMPNO BETWEEN 8000 AND 8003;
/*
8000	최규석	saLesMAN	7698	2025-06-30	2000	200	30
8001	조경진	SaLesMan	7698	2025-06-30	2000	200	30
8002	이채원	salesman	7698	2025-06-30	2000	200	30
8003	이유빈	SALESMan	7698	2025-06-30	2000	200	30
*/

DELETE 
FROM TBL_EMP
WHERE EMPNO BETWEEN 8000 AND 8003;
--==>> 4개 행 이(가) 삭제되었습니다.

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

--○ TBL_EMP 테이블에서 직종이 SALESMAN 과 CLERK 인 사원의
--   사원번호, 사원명, 직종명, 급여 항목을 조회한다.

SELECT EMPNO "사원번호" ENAME "사원명", JOB "직종", SAL "급여"
FROM TBL_EMP
WHERE 직종이 SALESMAN 과 CLERK 인 사원 ;

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", SAL "급여"
FROM TBL_EMP
WHERE JOB = 'SALESMAN'
OR   JOB='CLERK' ; --이거나 
         
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", SAL "급여"
FROM TBL_EMP
WHERE JOB IN('SALESMAN', 'CLERK');            
/*
7369	SMITH	CLERK	800
7499	ALLEN	SALESMAN	1600
7521	WARD	SALESMAN	1250
7654	MARTIN	SALESMAN	1250
7844	TURNER	SALESMAN	1500
7876	ADAMS	CLERK	1100
7900	JAMES	CLERK	950
7934	MILLER	CLERK	1300
*/

SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종", SAL "급여"
FROM TBL_EMP
WHERE JOB = ANY('SALESMAN', 'CLERK');     -- cf.[=ALL]
/*
7369	SMITH	CLERK	800
7499	ALLEN	SALESMAN	1600
7521	WARD	SALESMAN	1250
7654	MARTIN	SALESMAN	1250
7844	TURNER	SALESMAN	1500
7876	ADAMS	CLERK	1100
7900	JAMES	CLERK	950
7934	MILLER	CLERK	1300
*/

--※ 위의 3가지 유형의 쿼리문은 모두 같은 결과를 반환한다.
--   하지만, 맨 위의 쿼리문이 가장 빠르게 처리된다.
--   물론, 메모리에 대한 내용이 아니라 CPU 에 대한 내용이므로
--   이 부분까지 감안하여 쿼리문의 내용을 구분하여 구성하는 일은 많지 않다. 
--   → [IN] 과 [=ANY] 는 같은 연산자 효과를 가진다.
--      모두 내부적으로는 [OR] 구조로 변경되어 연산 처리된다.

--------------------------------------------------------------------------------
--※ 추가 실습 환경 구성을 위한 테이블 생성
-- 테이블명 : TBL_SAWON
CREATE TABLE TBL_SAWON
(   SANO      NUMBER(4)
,   SANAME    VARCHAR2(30)
,   JUBUN     CHAR(13)
,   HIREDATE  DATE      DEFAULT SYSDATE
,   SAL       NUMBER(10)
);

--==>>Table TBL_SAWON이(가) 생성되었습니다.

SELECT *
FROM TBL_SAWON; 

DESC TBL_SAWON;
--==>>
/*
이름       널? 유형           
-------- -- ------------ 
SANO        NUMBER(4)    
SANAME      VARCHAR2(30) 
JUBUN       CHAR(13)     
HIREDATE    DATE         
SAL         NUMBER(10)
*/

--○ 데이터 입력
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1001, '김주형', '0004183234567', TO_DATE('2011-01-03', 'YYYY-MM-DD'), 3000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1002, '이유빈', '0406274234567', TO_DATE('2017-11-05', 'YYYY-MM-DD'), 2000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1003, '유한', '0004173234567', TO_DATE('2011-01-03', 'YYYY-MM-DD'), 3000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1004, '이상이', '8512161234567', TO_DATE('1998-08-16', 'YYYY-MM-DD'), 2000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1005, '아이유', '9302022234567', TO_DATE('2010-07-13', 'YYYY-MM-DD'), 3000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1006, '이이경', '7506171234567', TO_DATE('1997-03-10', 'YYYY-MM-DD'), 4000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1007, '미노이', '9704252234567', TO_DATE('2007-12-10', 'YYYY-MM-DD'), 2000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1008, '선우선', '7905082234567', TO_DATE('1998-08-16', 'YYYY-MM-DD'), 2000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1009, '선동열', '7012181234567', TO_DATE('1990-10-10', 'YYYY-MM-DD'), 3000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1010, '남희석', '7502201234567', TO_DATE('1998-08-16', 'YYYY-MM-DD'), 1000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1011, '선우용녀', '7005132234567', TO_DATE('1998-08-16', 'YYYY-MM-DD'), 1000); 

INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1012, '남궁선', '0502204234567', TO_DATE('2015-08-14', 'YYYY-MM-DD'), 1000); 
--==>> 1 행 이(가) 삽입되었습니다. * 12 

--○확인
SELECT *
FROM TBL_SAWON;
--==>> 
/*
1001	김주형	0004183234567	2011-01-03	3000
1002	이유빈	0406274234567	2017-11-05	2000
1003	유한	    0004173234567	2011-01-03	3000
1004	이상이	8512161234567	1998-08-16	2000
1005	아이유	9302022234567	2010-07-13	3000
1006	이이경	7506171234567	1997-03-10	4000
1007	미노이	9704252234567	2007-12-10	2000
1008	선우선	7905082234567	1998-08-16	2000
1009	선동열	7012181234567	1990-10-10	3000
1010	남희석	7502201234567	1998-08-16	1000
1011	선우용녀	7005132234567	1998-08-16	1000
1012	남궁선	0502204234567	2015-08-14	1000
*/

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

--○ TBL_SAWON 테이블에서 김주형 사원의 정보를 모두 조회한다.
SELECT *
FROM TBL_SAWON 
WHERE SANAME= '김주형';
--==>> 1001	김주형	0004183234567	11/01/03	3000

SELECT *
FROM TBL_SAWON 
WHERE SANAME LIKE '김주형';
--==>> 1001	김주형	0004183234567	11/01/03	3000

--※ LIKE : 동사 → 좋아하다.
--          부사 → ~와 같이, ~ 처럼  CHECK~!! 
            
--※ WILD CARD(CHARACTER) → [%]
--   [LIKE] 와 함께 사용되는 [%]는 모든 글자를 의미한다.
--   [LIKE] 와 함께 사용되는 [_]는 아무 글자 한 개를 의미한다.

--○ TBL_SAWON 테이블에서 성씨가 [김] 씨인 사원의
--   사원명, 주민번호, 급여 항목을 조회한다.

SELECT 사원명, 주민번호, 급여
FROM TBL_SAWON
WHERE 성씨가 [김] 씨;

SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME = '김';
--==>> 조회 결과 없음.

SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '김__';
--==>> 김주형	0004183234567	3000 

--○ 데이터 추가 입력 
INSERT INTO TBL_SAWON(SANO, SANAME, JUBUN, HIREDATE, SAL)
VALUES(1013, '김훈', '8502071234557', TO_DATE('1999-10-10', 'YYYY-MM-DD'), 2000); 
--==>> 1 행 이(가) 삽입되었습니다.

SELECT * 
FROM TBL_SAWON;
/*
1013	김훈	8502071234557	99/10/10	2000
1001	김주형	0004183234567	11/01/03	3000
1002	이유빈	0406274234567	17/11/05	2000
1003	유한	0004173234567	11/01/03	3000
1004	이상이	8512161234567	98/08/16	2000
1005	아이유	9302022234567	10/07/13	3000
1006	이이경	7506171234567	97/03/10	4000
1007	미노이	9704252234567	07/12/10	2000
1008	선우선	7905082234567	98/08/16	2000
1009	선동열	7012181234567	90/10/10	3000
1010	남희석	7502201234567	98/08/16	1000
1011	선우용녀	7005132234567	98/08/16	1000
1012	남궁선	0502204234567	15/08/14	1000
*/

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

SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME LIKE'김__';
--==>> 김주형	0004183234567	3000

SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME LIKE'김_';
--==>> 김훈	8502071234557	2000

SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SANAME LIKE'김%';
--==>>
/*
김훈	8502071234557	2000
김주형	0004183234567	3000
*/

--○ TBL_SAWON 테이블에서 이름의 마지막 글자가 [이]로
--   끝나는 사원의  사원명, 주민번호 ,입사일, 급여 항목을 조회한다. 

SELECT *
FROM TBL_SAWON;

SELECT 사원명, 주민번호 ,입사일, 급여
FROM TBL_SAWON
WHERE 이름의 마지막 글자가 [이];

SELECT SANAME, JUBUN, HIREDATE, SAL
FROM TBL_SAWON
WHERE SANAME LIKE'__이';
--==>>
/*
이상이	8512161234567	98/08/16	2000
미노이	9704252234567	07/12/10	2000
*/

SELECT SANAME, JUBUN, HIREDATE, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '%이';
--==>>
/*
이상이	8512161234567	98/08/16	2000
미노이	9704252234567	07/12/10	2000
*/

--○ TBL_SAWON 테이블에서 이름의 두 번째 글자가 [이]인 사원의
--  사원명, 주민번호 ,입사일, 급여 항목을 조회한다. 

SELECT *
FROM TBL_SAWON;

SELECT 사원명, 주민번호 ,입사일, 급여
FROM TBL_SAWON
WHERE 이름의 두 번째 글자가 [이];

SELECT SANAME, JUBUN, HIREDATE, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '_이';
--==>> 조회 결과 없음 

SELECT SANAME, JUBUN, HIREDATE, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '_이%';
--==>>
/*
아이유	9302022234567	10/07/13	3000
이이경	7506171234567	97/03/10	4000
*/

--○ TBL_SAWON 테이블에서 이름의 [이]라는 글자가
--   하나라도 포함되어 있으면 그 사원의
--   사원명, 주민번호, 입사일, 급여 항목을 조회한다.

SELECT *
FROM TBL_SAWON;

SELECT 사원명, 주민번호, 입사일, 급여
FROM TBL_SAWON
WHERE 이름의 [이]라는 글자가 하나라도 포함;

SELECT SANAME, JUBUN, HIREDATE, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '이%';
--==>>
/*
이유빈	0406274234567	17/11/05	2000
이상이	8512161234567	98/08/16	2000
아이유	9302022234567	10/07/13	3000
이이경	7506171234567	97/03/10	4000
미노이	9704252234567	07/12/10	2000
*/

--○ TBL_SAWON 테이블에서 이름의 [이]라는 글자가
--   연속으로 두 번 포함되어 있으면 그 사원의
--   사원명, 주민번호, 입사일, 급여 항목을 조회한다.

SELECT SANAME, JUBUN, HIREDATE, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '%이이%';
--==>> 이이경	7506171234567	97/03/10	4000

--○ TBL_SAWON 테이블에서 이름의 [이]라는 글자가
--   연속적이지 않더라도 두 번 포함되어 있으면 그 사원의
--   사원명, 주민번호, 입사일, 급여 항목을 조회한다.
SELECT SANAME, JUBUN, HIREDATE, SAL
FROM TBL_SAWON
WHERE SANAME LIKE '%이%이%';
--==>>
/*
이상이	8512161234567	98/08/16	2000
이이경	7506171234567	97/03/10	4000
*/

--○ TBL_SAWON 테이블에서 성씨가 [선]씨인 사원의
--○ TBL_SAWON 테이블에서 성씨가 [남]씨인 사원의
--   사원명, 주민번호, 입사일, 급여 항목을 조회한다. >> 이건 안됨. 

--※ 테이터베이스 설계 시 성과 이름을 분리해서 처리해야 함.
--   업무 계획이 있다면(지금 당장은 아니더라도...)
--   테이블에서 성 컬럼과 이름 컬럼을 분리하여 구성해야 한다. 

--○ TBL_SAWON 테이블에서 남자직원들의 사원명, 주민번호, 급여 항목을 조회한다.
SELECT 사원명, 주민번호, 급여
FROM TBL_SAWON;
WHERE 남자직원들; 

SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON;
WHERE 성별이 남성; 

SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON;
WHERE 주민번호7번째 자리1개가 1; 
      주민번호7번째 자리1개가 3;


SELECT SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE JUBUN LIKE '______1%' 
   OR JUBUN LIKE '______3%';      -- 앞 자리 확인되면 뒷자리 확인은 필요없으므로 
--==>>
/*
김훈	    8502071234557	2000
김주형	0004183234567	3000
유한  	0004173234567	3000
이상이	8512161234567	2000
이이경	7506171234567	4000
선동열	7012181234567	3000
남희석	7502201234567	1000
*/

--○ 실습 테이블 생성
-- 테이블명 : TBL_WATCH
CREATE TABLE TBL_WATCH
(   WATCH_NAME VARCHAR2(20)
,   BIGO    VARCHAR2(100)
);

-- 컴마를 앞에 찍는 습관을 들여야 함. 

--○ 데이터 입력
INSERT INTO TBL_WATCH(WATCH_NAME, BIGO)
VALUES('금시계','순금 99.99% 함유된 최고급 시계');
INSERT INTO TBL_WATCH(WATCH_NAME, BIGO)
VALUES('은시계','고객 만족도 99.99점을 획득한 시계');
--==>> 1 행 이(가) 삽입되었습니다.

--○확인
SELECT *
FROM TBL_WATCH;

/*
금시계	순금 99.99% 함유된 최고급 시계
은시계	고객 만족도 99.99점을 획득한 시계
*/

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

--○ TBL_WATCH 테이블의 BIGO(비고) 컬럼에
--   [99.99%] 라는 글자가 들어있는 행(레코드)을 조회한다.

-- WHERE SANAME LIKE '이%';

SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '99.99%';
--==>> 조회 결과 없음. 

SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99%';
--==>>
/*
은시계	고객 만족도 99.99점을 획득한 시계
금시계	순금 99.99% 함유된 최고급 시계
*/

SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99%%';
--==>>
/*
은시계	고객 만족도 99.99점을 획득한 시계
금시계	순금 99.99% 함유된 최고급 시계
*/


SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99\%%' ESCAPE '\';
--==>>
/*
금시계	순금 99.99% 함유된 최고급 시계
*/

SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99$%%' ESCAPE '$';
--==>>
/*
금시계	순금 99.99% 함유된 최고급 시계
*/
--※ ESCAPE 로 정한 문자의 다음 한 글자는 와일드카드에서 탈출시키도록 처리하는 구문
--   [ESCAPE '\']
--   일반적으로 키워드 아닌, 연산자 아닌, 사용 빈도가 낮은 특수문자(특수기호)를 사용

--------------------------------------------------------------------------------

관련글 더보기

댓글 영역