개발속이야기/Oracle

Number, Date에 관한 다양한 질의문 테스트

스토리지기 2017. 12. 28. 17:56

select * 

  From Student 

 Where studno  = 20101   -- studno : 숫자 , 조회할 때도 반드시 숫자형태로 맞추어 준다.   

 

select *                              -- 묵시적형변환에 의한 조회     

  From Student 

 Where studno  = TO_NUMBER('20101')    -- 데이터가 잘 조회된다.  그런데 이 동네에서는 절대로 이렇게 사용하지 말 것. 

 

Select * 

  From Student 

 Where grade = 2    -- grade : varchar2 Type     

 

Select /*+ INDEX (a Student_INX03 ) */  -- Hint 문을 주었지만 작동이 않되고 무시된다.  

       * 

  From Student a

 Where TO_NUMBER(grade) = 2      -- Index에 해당하는 항목을 변형하였기 때문에 Index를 타지 못한다. 


Select /*+ INDEX (a Student_INX03 ) */  -- Hint 문을 주었지만 작동이 않되고 무시된다.  

       * 

  From Student a

 Where grade = 2      -- Index에 해당하는 항목을 변형하였기 때문에 Index를 타지 못한다. 

 

Select profno, hiredate,   -- hiredate : date 

       hiredate + 30   입사_30일후, 

       hiredate + 60   입사_60일후, 

       hiredate - 90   입사_90일전, 

       TO_CHAR(hiredate,'YYYY-MM-DD HH24:MI:SS') 입사일자,    -- MI : 분의 의미, MM : 월의 의미

       TO_CHAR(Sysdate,'YYYY-MM-DD HH24:MI:SS') 현재일자,     -- 12시간 포맷 : HH12:MI:SS 이렇게 나타내는데 12는 생략가능하다.

       TO_CHAR(Sysdate,'Q') 일자_Querter,                     -- Q : Quater를 의미

       TO_CHAR(Sysdate,'WW') 연초_몇주,

       TO_CHAR(Sysdate,'W') 월초_몇주,

       TO_CHAR(Sysdate,'DDD') 연초_몇일,

       TO_CHAR(Sysdate,'D') 주초_무슨요일,  -- 1 : 일, 2 : 월, 3: 화, 4 : 수, 5 : 목, 6 : 금, 7 토, 1: 일요일부터 출발한다. 

       TO_CHAR(LAST_DAY(Sysdate),'YYYY-MM-DD')  금월_마지막일,

       TO_CHAR(NEXT_DAY(Sysdate,'일'),'YYYY-MM-DD') 돌아오는_일요일,

       TO_CHAR(NEXT_DAY(Sysdate,7),'YYYY-MM-DD') 돌아오는_토요일2,    -- 1: 일요일부터 출발한다. 

       TO_CHAR(Sysdate,'YYYY-MM-DD HH:MI:SS AM') 현재일자_5,

       TO_CHAR(Sysdate,'YYYY-MM-DD HH:MI:SS PM') 현재일자_6, 

       TO_CHAR(ROUND(Sysdate),'YYYY-MM-DD HH:MI:SS AM') 현재일자_반올림,

       TO_CHAR(TRUNC(Sysdate),'YYYY-MM-DD HH:MI:SS AM') 현재일자_절삭 

  From Professor  

  

Select hiredate 기준일자

     , '2014'||TO_CHAR(hiredate,'MMDD')                              비교일자_1  -- || : 결합연산자   

     , '2014'||TO_CHAR(hiredate,'MMDD')||TO_CHAR(SYSDATE,'HH24MISS')    비교일자_2 

     , TO_CHAR(TO_DATE ('2014'||TO_CHAR(hiredate,'MMDD')||TO_CHAR(SYSDATE,'HH24MISS'),'YYYY/MM/DD HH24:MI:SS'),'YYYY-MM-DD HH:MI:SS AM') 비교일자_3 

  From professor  

  

update professor 

   set hiredate =  TO_DATE('2016'||TO_CHAR(hiredate,'MMDD')||TO_CHAR(SYSDATE,'HH24MISS'),'YYYY/MM/DD HH24MISS') 

   

commit;


Select * 

  From Professor 

  

-- 기존 테이블에 컬럼을 추가하고자 할 때에 

alter table professor   -- alter : DDL(데이터정의어) ,  

  add ( Create_Date   DATE   Default Sysdate NOT NULL

      , Audit_Date   DATE   Default Sysdate NOT NULL  )  

      

-- 기존 테이블에 컬럼의 속성을 변경하고자 할 때에 

alter table professor 

modify ( NAME   VARCHAR2(20))  -- 작은 것 -> 큰 것으로 변형시     

  

-- 기존 테이블에 컬럼을 삭제하고자 할 때에 

alter table professor 

drop column audit_date         -- 한 컬럼을 삭제할 때  


alter table professor 

drop column Create_date         -- 한 컬럼을 삭제할 때  


alter table professor 

 drop (age, sex)              -- 여러개의 컬럼을 동시에 삭제하고자 할 때에  


alter table professor 

 drop (Create_Date, Audit_Date)  -- 여러개의 컬럼을 동시에 삭제하고자 할 때에  


-- Professor(교수)테이블의 기존컬럼 SAL : Number(12) -> Number(8)로 변경하는 과정을 질의문으로 작성해 보세요. 

alter table professor 

modify (sal  NUMBER(8))        -- 열(Column)이 비어있지 않아서 오류가 걸린다는 메세지가 나왔다. 


Create Table Professor_TEMP2 AS -- Professor -> Professor_Temp2로 자료복제   

  Select * 

    From Professor   

    

Select * 

  From Professor_Temp2     


CREATE UNIQUE INDEX PROFESSOR_TMP2_PK ON Professor_Temp2

(PROFNO)

LOGGING

TABLESPACE DW_TSI

PCTFREE    10

INITRANS   2

MAXTRANS   255

STORAGE    (

            INITIAL          64K

            NEXT             1M

            MAXSIZE          UNLIMITED

            MINEXTENTS       1

            MAXEXTENTS       UNLIMITED

            PCTINCREASE      0

            BUFFER_POOL      DEFAULT

            FLASH_CACHE      DEFAULT

            CELL_FLASH_CACHE DEFAULT

           )

NOPARALLEL;


alter table professor 

modify (sal  NULL)  


Update Professor 

   Set sal         = ''     -- '' : Null값으로 Update , 기본값으로 0이 설정되어 있어서 오류 

     , Audit_Date  = sysdate 

;     

        

COMMIT; 


Select * 

  From Professor          -- 기존 sal 컬럼이 Null로 바뀐 것을 반드시 확인한 후에  

  

alter table professor 

modify ( sal  NUMBER(8))  -- 12자리 -> 8자리로 변경  


-- 상호연관 SubQuery를 활용하여 기존 데이터를 수정  

Update Professor a    -- a : alias (별명지정)  

   set sal = (       -- SubQuery : 부속질의문      

       Select sal 

         From Professor_TEMP2 b 

        Where b.profno  = a.profno 

          And rownum    = 1 

       )

     , Audit_Date  = Sysdate   

     

COMMIT;              -- 이렇게 문장으로 넣을 수도 있고 상단의 버튼으로 해결할 수도 있다.    


select * 

  From Professor                  


--

Select FUN_GET_SYSDATE     -- 함수 테스트시는 이렇게 한다.  

  From dual


Select studno  학번 -- * 

     , name    성명 

     , idnum   주민등록번호 

     , userid  사용자_ID 

     , FUN_GET_SEX(userid) SEX     -- 사용자 함수테스트 

     , FUN_GET_AGE(idnum)  AGE

     , FUN_GET_AGE2(idnum) 연령대  

  From student 


Select profno 교수코드, hiredate 입사일자,  

       MONTHS_BETWEEN(Sysdate, hiredate) 근속기간,   -- 주어진 두 날짜 사이의 기간 계산  

       ADD_MONTHS(hiredate, 6) 입사_6개월후,         -- 주어진 날짜에서 몇 개월을 더한 날짜를 추출    

       ADD_MONTHS(sysdate, 6)  일자_6개월후, 

       FUN_GET_SYSDATE         현재날자_시간         -- 사용자 함수를 호출   

  From Professor 

 Where MONTHS_BETWEEN(Sysdate, hiredate) <= 120      

 

 Select count(*) 

   From Ab_Zip_Mast_FULL 

   

 Select POST_NO 신우편번호, sido, mkt_cd, FUN_GET_AB_MKT_CD(mkt_cd) 지역구분, 

        road_name 도로명, BDNO_MNG_NO 상세주소, old_post_no 구우편번호, audit_date  

   From AB_ZIP_MAST PARTITION (P_MKT_200)

   

 Select sido, mkt_cd, SIGUNGU, FUN_GET_AB_MKT_CD(mkt_cd) 지역구분, 

        road_name 도로명, BDNO_MNG_NO 상세주소, audit_date 

   From Ab_Zip_Mast_FULL PARTITION (P_MKT_100) 

   

alter table ab_zip_mast          -- Table안에서 컬럼을 추가하는 명령 

  add (NEW_MKT_CD   VARCHAR2 (3))  

  

alter table ab_zip_mast          -- 컬럼을 삭제   

 drop column NEW_MKT_CD  ;    

 

alter table professor            -- 컬럼의 길이 및 타입을 변경     

modify (sal  number(10)   default 0 not null, 

       comm  number(10)   default 0 not null) 

       

alter table professor -- EMP

modify ( 

  PROFNO     NOT NULL,

  NAME       NOT NULL,

  USERID     NOT NULL,

  POSITION   NOT NULL,

  SAL       NUMBER(12)    DEFAULT 0 NOT NULL,

  HIREDATE  DATE          DEFAULT SYSDATE NOT NULL,

  COMM      NUMBER(12)    DEFAULT 0 NOT NULL,

  DEPTNO    NUMBER(4)     DEFAULT 101 NOT NULL

  )       

  

Select sido, mkt_cd, SIGUNGU, count(*) 

  From ab_zip_mast PARTITION (P_MKT_100)    

 GROUP BY sido, mkt_cd, SIGUNGU 

 ORDER BY 1,2,3

   

Select sal 급여 

     , TO_CHAR(sal,'$999,990')  SAL_1  

     , '\'||TRIM(TO_CHAR(sal,'999,990')) SAL 

  From emp            

   

 select deptno, count(comm), SUM(COMM), COUNT(*), AVG(COMM) 

   From Professor 

  Group By deptno 

  

Select * 

  From Professor 

 Where deptno = 101      

    

create table Cal_co_Mast_Tmp as  -- Cal_Co_Mast -> Cal-co_Mast_Tmp 를 생성 

   Select *                      -- Table의 구조만 복사하는 명령    

     From cal_Co_Mast 

    Where 0 = 1  

    

Select deptno, grade, count(*)  

     , Grouping(deptno)  Grp_deptno 

     , Grouping(Grade)   Gtp_Grade  

  From Student 

 Group by rollup(deptno, grade)    

 Order By 4 Desc, 5 Desc, 1      

    

Select rowid, s.*  

  From student s  

  

select *          -- 오라클이 레코드를 찾아가는 방식 , 가장 빠름 

  From Student 

 Where rowid = 'AAAdICAAMAABEvTAAD' 

 

Select *         -- 현행 사람이 레코드를 검색하는 가장 빠른 방식    

  From Student 

 Where studno = 10102    

  

select sido, mkt_cd, count(*) 

  From ab_zip_mast_full 

 Group By sido, mkt_cd             

 

Select * 

  From tabs 

--  From USER_TABLES