COMMIT,ROLLBACK , ORDER BY , CONCAT, SUBSTR, INSTR, REVERSE, LENGTH

유동현·2022년 10월 9일
0

오라클

목록 보기
5/18

🧐 COMMIT & ROLLBACK

사용자가 오라클의 테이블에 데이터를 넣었다해도
하드디스크상에 물리적으로 적용되어 저장된 것이 아니다.
메모리(RAM)상에 입력된 것이다. 데이터를 실제 하드디스크상에 물리적으로 저장하기 위해서는 COMMIT을 수행해야 한다.

ROLLBACK은 COMMIT이 수행되지 않았을때, 이전에 COMMIT이 수행되어 해당 지점에 세이브포인트가 존재한다면 거기까지 현재 입력된 데이터들의 상태를 되돌린다. 만약 COMMIT를 수행한적이 없다면 데이터는 모두 삭제된다.

COMMIT을 실행한 이후로 DML 구문(INSERT, UPDATE,DELETE)을 통해
변경된 데이터를 취소할 수 있는 것일뿐..
DML 명령을 사용한후 COMMIT을 수행하고 나서 ROLLBACK을 실행해도
아무것도 변하지 않는다.

단,
데이터의 구조를 정의 하기 위한 테이블 생성,삭제 같은 명령어
CREATE : 테이블 생성
DROP : 테이블 삭제
ALTER : 테이블 수정
TRUNCATE : 테이블에 있는 모든 데이터 삭제
이들과 같은 DDL(Data Definition Language) 를 실행할시 자동으로 COMMIT이 된다는것은 기억해야한다.


🧐 ORDER BY

SELECT 구문들중(FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY) 제일 마지막에 실행되는 구문으로써 SELECT 에서 설정한 컬럼들의 별칭을 이용할수도, 혹은 컬럼번호로도 출력결과를 정렬할 수 있다.

SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종", SAL "급여"
      ,SAL*12+NVL(COMM,0) "연봉"
FROM EMP
ORDER BY DEPTNO; --ASC(오름차순) 생략가능

SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종", SAL "급여"
      ,SAL*12+NVL(COMM,0) "연봉"
FROM EMP
ORDER BY DEPTNO DESC; --(내림차순)


SELECT ENAME "사원명", DEPTNO "부서번호", JOB "직종", SAL "급여"
      ,SAL*12+NVL(COMM,0) "연봉"
FROM EMP
ORDER BY 2; --SELECT에서 처리한 2번째 컬럼을 의미한다.
         --즉 부서번호를 기준으로 오름차순 정렬을 해라는 의미가 된다.
-->EMP테이블이 가지고 있는 테이블의 고유한 컬럼의 순서가 아니다
-->SELECT에서 처리한 두번째 컬럼인 DEPTNO를 의미하는 것
-->EMP테이블의 2번째 컬럼은 ENAME로 사원이름이다. 
--ORDER BY DEPTNO ASC와 같다.

정렬을 좀더 자세하게 하고싶다면

SELECT ENAME, DEPTNO, JOB , SAL
FROM EMP
ORDER BY 2, 4;
--부서번호를 기준으로 1차정렬 급여를 기준으로 2차정렬을 수행한다.


SELECT ENAME, DEPTNO, JOB , SAL
FROM EMP
ORDER BY 2,3,4 DESC;
--부서번호를 기준으로 1차 오름차순 정렬 
--직종을 기준으로 2차 오름차순 정렬을 
--급여를 기준으로 내림차순 정렬
--DESC는 급여에만 해당된다.

함수들

😽 CONCAT

  • 내부적인 형 변환이 일어나며 결합을 수행하게 된다.
  • CONCAT()은 문자열과 문자열을 결합시켜주는 함수이지만
  • 내부적으로 숫자나 날짜를 문자로 바꾸어주는 과정이 포함되어 있다.
SELECT ENAME || JOB "첫번째 컬럼"
      , CONCAT(ENAME, JOB) "두번째 컬럼"
FROM EMP;
--문자열 기반으로 데이터 결합을 수행하는 함수 CONCAT()
--오로지 2개의 문자열만 결합시킬 수 있다.

SELECT ENAME||JOB||DEPTNO "첫번쨰컬럼"
,     CONCAT(CONCAT(ENAME,JOB), DEPTNO) "두번째칼럼"
FROM EMP;
--하지만 중첩으로 극복!


🔪SUBSTR

  • 문자열을 추출하는 기능을 가진 함수
  • 첫번째 파라미터 값은 대상 문자열(추출의 대상, TARGET)
  • 두번째 파라미터 값은 추출을 시작하는 위치(인덱스,START) 인덱스는 1부터시작
  • 세번째 파라미터 값은 추출할 문자열의 개수(갯수,COUNT) -> 생략시 문자열의 길이 끝까지
--○성별이 남성인 사원만  조회한다.

 SELECT SANO,SANAME,JUBUN AS '주민번호' ,SAL
 FROM TBL_SAWON
 WHERE SUBSTR(JUBUN,7,1) IN ('1','3'); 
 --주민번호 7번째자리 1글자가 1 or 3이면 남자
 
  SELECT SANO,SANAME,JUBUN,SAL
 FROM TBL_SAWON
 WHERE SUBSTR(JUBUN,7,1) =ANY ('1','3');
 --위와 같다.

LENGTH

LENGTH() 글자수 반환 / LENGTHB() 바이트 수를 반환

 SELECT ENAME "COL1"
       ,LENGTH(ENAME) "COL2"
       ,LENGTHB(ENAME) "COL3"

INSTR()

문자열 안에서 사용자가 찾으려는 문자열을 사용자가 넣은 (시작위치 몇번째 값인지와 같은 )조건에 따라 찾고 해당 위치를 반환하는 함수

 --○INSTR()
 
 SELECT 'ORACLE ORAHOME BIORA' "COL1"
        , INSTR('ORACLE ORAHOME BIORA','ORA',1,1)"COL2"
        , INSTR('ORACLE ORAHOME BIORA','ORA',1,2)"COL3"
        , INSTR('ORACLE ORAHOME BIORA','ORA',2,1)"COL4"
        , INSTR('ORACLE ORAHOME BIORA','ORA',2)"COL5"
        , INSTR('ORACLE ORAHOME BIORA','ORA',2,3)"COL6" --3번째는 없으니까 0을 반환한다.
FROM DUAL;
-->첫 번째 파라미터 값에 해당하는 문자열에서..(대상 문자열, TARGET)
--두 번째 파라미터 값을 통해 넘겨준 문자열이 등장하는 위치를 찾아라~!!!
--세번째 파라미터 값은 찾기 시작하는 위치
--네 번째 파라미터 값은 몇 번째 등장하는 값을 찾을것인지에 대한 설정(->1은 생략 가능)
--이후 찾은 인덱스 값을 반환한다.

SELECT '나의오라클 집으로오라 합니다.' "COL1"
       ,INSTR('나의오라클 집으로오라 합니다.','오라',1)"COL2"
       ,INSTR('나의오라클 집으로오라 합니다.','오라',2)"COL3"
       ,INSTR('나의오라클 집으로오라 합니다.','오라',10)"COL4"
       ,INSTR('나의오라클 집으로오라 합니다.','오라',11)"COL5"
FROM DUAL;
--3	 3	10	0

REVERSE()

--○REVERSE()

SELECT 'ORACLE' "COL1"
       ,REVERSE('ORACLE') "COL2"
FROM DUAL;
--단 한글은 뒤집을 수 없다. 한글은 한문자가 1바이트가 아니기에
--ORACLE	ELCARO

함수들 사용법

/*
1	C:\AAA\BBB\CCC\SALES.DOC
2	C:\AAA\PANMAE.XXLS
3	D:\RESEARCH.PPT
4	C:\DOCUMENTS\STUDY.HWP
5	C:\DOCUMENTS\TEMP\HOMEWORK\SQL.TXT
6	C:\SHARE\F\TEST\FLOWER.PNG
7	E:\STUDY\ORACLE\20220816_01_SCOTT.SQL
*/

위의 데이터에서 파일명만 찾을수있게

SELECT FILENO "파일번호"
      ,REVERSE(SUBSTR(REVERSE(FILENAME),1,INSTR(REVERSE(FILENAME),'\',1)-1)) "파일명"
FROM TBL_FILES;

SELECT FILENO "파일번호"
      ,SUBSTR(FILENAME,INSTR(FILENAME,'\',-1)+1) "파일명" --Index값은 양수가 나온다.
FROM TBL_FILES;
/*
1	SALES.DOC
2	PANMAE.XXLS
3	RESEARCH.PPT
4	STUDY.HWP
5	SQL.TXT
6	FLOWER.PNG
7	20220816_01_SCOTT.SQL

0개의 댓글