SELECT *
FROM EMP
WHERE JOB = 'SALESMAN';
SELECT *
FROM EMP
WHERE JOB = 'salesman';
--==>> 위와 달리 조회결과 없음
--○ UPPER(), LOWER() , INITCAP()
------- -----------
SELECT 'OraCLe' "1" , UPPER('OraCLe') "2", LOWER('OraCLe') "3" , INITCAP('OraCLe') "4"
FROM DUAL;
--==>>>>OraCLe ORACLE oracle Oracle
-- UPPER() 모두 대문자로 변환하여 반환
-- LOWER() 모두 소문자로 변환하여 반환
-- INITCAP() 첫 글자만 대문자로 하고 나머지느 모두 소문다로 변환하여 반환
--'SalEsmAn'으로 조회하는 방법
SELECT *
FROM EMP
WHERE JOB = UPPER('SalEsmAn');
/*
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
*/
INSERT INTO TBL_EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(8000, '징징이', 'salseMAN', 7698, SYSDATE, 2000, 200, 30);
INSERT INTO TBL_EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(8001, '진주', 'salseMan', 7698, SYSDATE, 2000, 200, 30);
INSERT INTO TBL_EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES(8002, '뚱이', 'salseman', 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;
/*
:
7934 MILLER CLERK 7782 1982-01-23 1300 10
8000 징징이 salseMAN 7698 2021-03-26 2000 200 30
8001 진주 salseMan 7698 2021-03-26 2000 200 30
8002 뚱이 salseman 7698 2021-03-26 2000 200 30
8003 다람이 SALESman 7698 2021-03-26 2000 200 30
*/
-- ○ 커밋
COMMIT;
--==>>커밋 완료.
DELETE
FROM TBL_EMP
WHERE UPPER(JOB)='SALSEMAN'; --세일즈맨인데 살세맨이라고 저장해놔서 세 개 삭제하고 다시 넣음
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);
COMMIT;
-- ○TBL_EMP 테이블에서 대소문자를 구분하지 않고
-- SALESMAN 직종인 사원의 사원번호, 사원명, 직종, 입사일, 부서번호 항목을 조회한다.
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직 종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE UPPER(JOB) = 'SALESMAN';
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직 종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE JOB IN ('SALESMAN','SALESman','salesMan','saleSman','salesMAN');
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직 종", HIREDATE "입사일" , DEPTNO "부서번호"
FROM TBL_EMP
WHERE UPPER(JOB) = UPPER('salesman');
-- 또는 WHERE LOWER(JOB) = LOWER('salesman');
--○ TBL_EMP 테이블에서 입사일이 1981년 9월 28일 입사한 직원의
-- 사원명, 직종명, 입사일 항목을 조회한다.
SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE = '1981-09-28';
--==>> MARTIN SALESMAN 1981-09-28
--엄밀히 얘기하면 틀린 쿼리문이다. DATE 타입과 문자타입을 비교했기 때문이다.
-- 오라클에서는 믿을만한 형변환이 아니므로 명시적으로 형변환을 해줘야 한다.
DESC TBL_EMP;
--==>>HIREDATE DATE
--○ TO_DATE() 투데이트메소드 변환함수 대표적인 TODATE는
SELECT '2021-03-26' "1", TO_DATE('2021-03-26','YYYY-MM-DD') "2"
FROM DUAL;
--===>> 2021-03-26 2021-03-26
--[선생님풀이]
SELECT ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE HIREDATE = TO_DATE('1981-09-28','YYYY-MM-DD');
--==>>MARTIN SALESMAN 1981-09-28
-- ※ TO_DATE 함수는 자동으로 유효성 검사를 해준다.
SELECT TO_DATE('2021-02-30','YYYY-MM-DD')
FROM DUAL;
--==>> 오류남
-- 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 2021-03-26
징징이 salesMAN 2021-03-26
진주 salesMan 2021-03-26
뚱이 saleSman 2021-03-26
*/
--※ 오라클에서는 날짜 데이터의 크기 비교가 가능하다.
-- 날짜 데이터에 대한 크기 비교 시 과거보다 미래를 더 큰 값으로 간주하여 처리된다.
--1. 날짜도 크기 비교 가능하다
--○ TBL_EMP 테이블에서 입사일이 1981년 4월 2일 부터 1981년 9월 28일 사이에 입사한
-- 직원들의 사원번호, 사원명, 직종명, 입사일 항목을 조회한다. (해당일 포함)
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE TO_DATE('1981-04-02','YYYY-MM-DD')<= HIREDATE 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
*/
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명", HIREDATE "입사일"
FROM TBL_EMP
WHERE '1981-04-02'<= HIREDATE AND HIREDATE <= '1981-09-28' ;
/*
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
*/ -- 똑같이 나오기는 한다. TO_DATE() 사용안하더라도
--○ BETWEEN ⓐ AND ⓑ
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');
--○ BETWEEN ⓐ AND ⓑ → 숫자를 대상으로 적용
SELECT EMPNO, ENAME, SAL
FROM TBL_EMP
WHERE SAL BETWEEN 1600 AND 3000;
/*
7499 ALLEN 1600
7566 JONES 2975
7698 BLAKE 2850
7782 CLARK 2450
7788 SCOTT 3000
7902 FORD 3000
8003 다람이 2000
8000 징징이 2000
8001 진주 2000
8002 뚱이 2000*/
--○ BETWEEN ⓐ AND ⓑ → 문자를 대상으로 적용
SELECT EMPNO, ENAME, JOB
FROM TBL_EMP
WHERE ENAME BETWEEN 'C' AND 'S'; --★★이름이 S면 나온다.
/*
7566 JONES MANAGER
7654 MARTIN SALESMAN
7782 CLARK MANAGER
7839 KING PRESIDENT
7900 JAMES CLERK
7902 FORD ANALYST
7934 MILLER CLERK*/
/*
만약 WHERE ENAME BETWEEN 'C' AND 's'라고 했을 때
'ZOO' 라는 사람의 이름은 검색이 될 것이다, ABCDE......abcde....
와 같이 아스키코드의 순서로 검색을 하기 때문이다.
문자형일 경우 아스키코드 순서를 따르기 때문에 대문자가 앞쪽에 위치하고
소문자가 뒤쪽에 위치한다. 또한 BETWEEN A AND B 는 쿼리문이 수행되는 시점에서
오라클 내부적으로는 부등호 연산자의 형태로 바뀌어 연산이 처리된다.
*/
DELETE
FROM TBL_EMP
WHERE EMPNO BETWEEN 8000 AND 8003;
COMMIT;
--4개 행 이(가) 삭제되었습니다.
--커밋 완료. 아까 징징이 , 진주, 다람이, 뚱이 데이터 삭제
-- ○ ASCII()
SELECT ASCII('A') "1" , ASCII('B') "2"
FROM DUAL;
--==>>65 66
--TBL_EMP 테이블에서 직종이 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');
SELECT EMPNO "사원번호", ENAME "사원명", JOB "직종명", SAL"급여"
FROM TBL_EMP
WHERE JOB = ANY ('SALESMAN', 'CLERK'); --『=ALL』 이거랑도 같고 저거랑도 같을 때
-- ※ 위의 3가지 유형의 쿼리문은 모두 같은 결과를 반환한다.
-- 하지만, 맨 위의 쿼리문이 가장 빠르게 처리된다.
-- 물론, 메모리에 대한 내용이 아니라 CPU에 대한 내용이므로
-- 이 부분까지 감안하여 무머리문의 내용을 구분하여 구성하는 일은 많지 않다
-- → 『IN』 과 =ANY 는 같은 연산자 효과를 가진다.
-- 모두 내부적으로는 OR 구조로 변경되어 연산처리된다.
SELECT *
FROM TBL_EMP;
SELECT TABLE_NAME, TABLESPACE_NAME
FROM USER_TABLES;
/*
DEPT USERS
EMP USERS
BONUS USERS
SALGRAD E USERS
TBL_EXAMPLE1 USERS
TBL_EXAMPLE2 TBS_EDUA
EMPCOPY2 USERS
TBL_DEPT USERS
TBL_EMP USERS
*/
'📚Study Note > ORACLE' 카테고리의 다른 글
[ ORACLE ] LPAD() RPAD() LTRIM() RTRIM() TRANSLATE() REPLACE() (0) | 2021.03.29 |
---|---|
[ ORACLE ] 4일차 - LENGTH() LENGTHB(), INSTR(), REVERSE(), (0) | 2021.03.29 |
[ ORACLE ] 3일차ⓒ LIKE + 『%』『_』ESCAPE COMMIT ROLLBACK ORDER BY(ASC, DESC) CONCAT() (0) | 2021.03.27 |
[ ORACLE ] 3일차 ⓐ(시간반환함수, 데이터합치기 ||, 문자열 안에 ''_어퍼두개) NVL() NVL2() COALESCE() (0) | 2021.03.26 |
▒▒▒ 키보드 주요 특수문자 영문이름 ▒▒▒ (0) | 2021.03.26 |