ORACLE

가지치기//날짜&시간 형식 바꾸기//계층쿼리//출력형식 맞추기

gold99 2024. 1. 16. 00:27

 

sqlplus "/as sysdba"  --dbopen
startup  -- 인스턴스 가동

---사용자 scott 로 이동
conn scott/tiger
select * from tab;
re:

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
EMP                            TABLE
SALGRADE                       TABLE

-- 컬럼 내용 확인
desc emp;
결과:

이름                                      널?      유형
----------------------------------------- -------- --------------------

EMPNO                                     NOT NULL NUMBER(4)
ENAME                                              VARCHAR2(10)
JOB                                                VARCHAR2(9)
MGR                                                NUMBER(4)
HIREDATE                                           DATE
SAL                                                NUMBER(7,2)
COMM                                               NUMBER(7,2)
DEPTNO                                             NUMBER(2)

-------------계층쿼리 표시(ex)
 select rownum,level,empno,ename,job, mgr from emp;
결과 :
  ROWNUM      LEVEL      EMPNO ENAME      JOB              MGR
------- ---------- ---------- ---------- --------- ----------
      1          0       7369 SMITH      CLERK           7902
      2          0       7499 ALLEN      SALESMAN        7698
      3          0       7521 WARD       SALESMAN        7698
      4          0       7566 JONES      MANAGER         7839
      5          0       7654 MARTIN     SALESMAN        7698
      6          0       7698 BLAKE      MANAGER         7839
      7          0       7782 CLARK      MANAGER         7839
      8          0       7788 SCOTT      ANALYST         7566
      9          0       7839 KING       PRESIDENT
     10          0       7844 TURNER     SALESMAN        7698
     11          0       7876 ADAMS      CLERK           7788

 ROWNUM      LEVEL      EMPNO ENAME      JOB              MGR
------- ---------- ---------- ---------- --------- ----------
     12          0       7900 JAMES      CLERK           7698
     13          0       7902 FORD       ANALYST         7566
     14          0       7934 MILLER     CLERK           7782

-- 레벨 표시 mgr(직급상사) empno(사원번호)  직급관계 표시
 select level,empno,ename,job,mgr from emp start with ename like 'KING'
 connect by prior empno=mgr;
결과:
 LEVEL      EMPNO ENAME      JOB              MGR
------ ---------- ---------- --------- ----------
     1       7839 KING       PRESIDENT
     2       7566 JONES      MANAGER         7839
     3       7788 SCOTT      ANALYST         7566
     4       7876 ADAMS      CLERK           7788
     3       7902 FORD       ANALYST         7566
     4       7369 SMITH      CLERK           7902
     2       7698 BLAKE      MANAGER         7839
     3       7499 ALLEN      SALESMAN        7698
     3       7521 WARD       SALESMAN        7698
     3       7654 MARTIN     SALESMAN        7698
     3       7844 TURNER     SALESMAN        7698

 LEVEL      EMPNO ENAME      JOB              MGR
------ ---------- ---------- --------- ----------
     3       7900 JAMES      CLERK           7698
     2       7782 CLARK      MANAGER         7839
     3       7934 MILLER     CLERK           7782


-- lpad(' ',level*3)|| ename
 select level,empno,ename as lvl ,job,mgr from emp start with ename like 'KING'
 connect by prior empno=mgr;
결과:

  LEVEL      EMPNO LVL                            JOB              MGR
------- ---------- ------------------------------ --------- ----------
      1       7839 KING                           PRESIDENT
      2       7566 JONES                          MANAGER         7839
      3       7788 SCOTT                          ANALYST         7566
      4       7876 ADAMS                          CLERK           7788
      3       7902 FORD                           ANALYST         7566
      4       7369 SMITH                          CLERK           7902
      2       7698 BLAKE                          MANAGER         7839
      3       7499 ALLEN                          SALESMAN        7698
      3       7521 WARD                           SALESMAN        7698
      3       7654 MARTIN                         SALESMAN        7698
      3       7844 TURNER                         SALESMAN        7698

  LEVEL      EMPNO LVL                            JOB              MGR
------- ---------- ------------------------------ --------- ----------
      3       7900 JAMES                          CLERK           7698
      2       7782 CLARK                          MANAGER         7839
      3       7934 MILLER                         CLERK           7782
--sql환경에 관한 명령어라 저장이 안됨(출력이 정렬되어서 나옴)
col lvl format a30
col job format a10
col mgr format a10
col mgr format 99999
--------------------
set linesize 100

-- lpad(' ',level*3) 3칸뛰우고 정렬들어감 lpad(' ',level*2) 2칸 뛰우고 정렬.
select lpad(' ',level*3)|| ename as lvl,job,mgr from emp start with ename like 'KING'
connect by prior empno=mgr;
결과 :
LVL                            JOB               MGR
------------------------------ ---------- ----------
   KING                        PRESIDENT
      JONES                    MANAGER    ##########
         SCOTT                 ANALYST    ##########
            ADAMS              CLERK      ##########
         FORD                  ANALYST    ##########
            SMITH              CLERK      ##########
      BLAKE                    MANAGER    ##########
         ALLEN                 SALESMAN   ##########
         WARD                  SALESMAN   ##########
         MARTIN                SALESMAN   ##########
         TURNER                SALESMAN   ##########

LVL                            JOB               MGR
------------------------------ ---------- ----------
         JAMES                 CLERK      ##########
      CLARK                    MANAGER    ##########
         MILLER                CLERK      ##########


---- 숫자형식은 고쳐줌
col mgr format 99999  -- 숫자 형식 표현
/         -- 이전 명령어 다시 수행

결과:
LVL                            JOB           MGR
------------------------------ ---------- ------
   KING                        PRESIDENT
      JONES                    MANAGER      7839
         SCOTT                 ANALYST      7566
            ADAMS              CLERK        7788
         FORD                  ANALYST      7566
            SMITH              CLERK        7902
      BLAKE                    MANAGER      7839
         ALLEN                 SALESMAN     7698
         WARD                  SALESMAN     7698
         MARTIN                SALESMAN     7698
         TURNER                SALESMAN     7698

LVL                            JOB           MGR
------------------------------ ---------- ------
         JAMES                 CLERK        7698
      CLARK                    MANAGER      7839
         MILLER                CLERK        7782
----BLAKE 사람으로 시작 검색
 select lpad(' ',level*3)|| ename as lvl,job,mgr from emp start with ename like 'BLAKE'
re:
LVL                            JOB           MGR
------------------------------ ---------- ------
   BLAKE                       MANAGER      7839
      ALLEN                    SALESMAN     7698
      WARD                     SALESMAN     7698
      MARTIN                   SALESMAN     7698
      TURNER                   SALESMAN     7698
      JAMES                    CLERK        7698

------
 select lpad(' ',level*3)|| ename as lvl,job,empno,mgr from emp start with ename like 'KING'
 connect by prior empno=mgr;
re:
LVL                            JOB             EMPNO    MGR
------------------------------ ---------- ---------- ------
   KING                        PRESIDENT        7839
      JONES                    MANAGER          7566   7839
         SCOTT                 ANALYST          7788   7566
            ADAMS              CLERK            7876   7788
         FORD                  ANALYST          7902   7566
            SMITH              CLERK            7369   7902
      BLAKE                    MANAGER          7698   7839
         ALLEN                 SALESMAN         7499   7698
         WARD                  SALESMAN         7521   7698
         MARTIN                SALESMAN         7654   7698
         TURNER                SALESMAN         7844   7698

LVL                            JOB             EMPNO    MGR
------------------------------ ---------- ---------- ------
         JAMES                 CLERK            7900   7698
      CLARK                    MANAGER          7782   7839
         MILLER                CLERK            7934   7782
---
 select lpad(' ',level*3)|| ename as lvl,job,empno,mgr from emp start with ename
 like 'KING'
 connect by prior mgr=empno;
re:

LVL                            JOB             EMPNO    MGR
------------------------------ ---------- ---------- ------
   KING                        PRESIDENT        7839

------
select lpad(' ',level*3)|| ename as lvl,job,empno,mgr from emp start with ename like 'BLAKE'
 connect by prior mgr=empno;
re:
LVL                            JOB             EMPNO    MGR
------------------------------ ---------- ---------- ------
   BLAKE                       MANAGER          7698   7839
      KING                     PRESIDENT        7839

---가지치기
--ford 가 아닌 사람 검색
select lpad(' ',level*3)|| ename as lvl,job,empno,mgr from emp start with enme like 'KING'
 connect by prior empno=mgr and ename <>'FORD';
re:
LVL                            JOB             EMPNO    MGR
------------------------------ ---------- ---------- ------
   KING                        PRESIDENT        7839
      JONES                    MANAGER          7566   7839
         SCOTT                 ANALYST          7788   7566
            ADAMS              CLERK            7876   7788
      BLAKE                    MANAGER          7698   7839
         ALLEN                 SALESMAN         7499   7698
         WARD                  SALESMAN         7521   7698
         MARTIN                SALESMAN         7654   7698
         TURNER                SALESMAN         7844   7698
         JAMES                 CLERK            7900   7698
      CLARK                    MANAGER          7782   7839

LVL                            JOB             EMPNO    MGR
------------------------------ ---------- ---------- ------
         MILLER                CLERK            7934   7782

================
conn ejb/ejb
select * from personnel;

---
select sysdate from dual;
결과:
SYSDATE
--------
05/03/24

--행의 갯수만큼 나옴
select sysdate from personnel;
결과:
SYSDATE
--------
05/03/24
05/03/24
05/03/24
05/03/24
05/03/24
05/03/24
05/03/24
05/03/24
05/03/24
05/03/24
-------
 select startdate from personnel;
결과:
STARTDAT
--------
90/12/17
91/02/20
92/02/24
90/04/12
89/01/10
91/05/01
91/09/09
90/12/08
91/09/23
90/01/03

-- 시간 형식 바꾸기
alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';
select sysdate from dual;
결과:
SYSDATE
-------------------
2005-03-24 05:51:04

----
alter session set nls_date_format='yyyy-mm-dd hh:mi:ss bc';
select sysdate from dual;
결과:
SYSDATE
--------------------------
2005-03-24 05:52:18 서기
-------------------------
alter session set nls_date_format='yyyy-mm-dd hh:mi:ss am';
select sysdate from dual;

결과:
SYSDATE
------------------------
2005-03-24 05:52:56 오후

----------
alter session set nls_date_format='month "of" day';
select sysdate from dual;
결과:

SYSDATE
-------------------
march     of 목요일

---------------------
alter session set nls_date_format='rr-mm-dd';
select sysdate from dual;

결과:
SYSDATE
--------
05-03-24