Oracleラーニング4

28101 ワード

Oracleラーニング4
  • データベース・オブジェクト-インデックス
  • 2データベース・オブジェクト-ビュー
  • 3 ROWNUM詳細
  • 4データベース・オブジェクト-同義語
  • 5データベース・オブジェクト-シーケンス
  •   
    1データベース・オブジェクト-索引
    データベースで最も多く使用されているのはテーブルです.次に、インデックスとは何ですか.1、スキーマの1つのデータベース・オブジェクト2、Oracleデータベースでテーブルに対するクエリーを高速化するために使用される3、高速パス・アクセス・メソッドを使用してデータを迅速に位置決めすることで、ディスクを削減するI/O 4、インデックスは独立したデータベース・オブジェクトであり、テーブルに格納されるのではなく、テーブルと独立して格納される5、インデックスは、テーブルのインデックス・フィールドの値、つまりキーワードを記録します.キーワードは常にテーブルのインデックス・フィールドの値と同じです.この6、同期はOracleデータベースによって自動的に維持されます.
    --          
    --1.    :Oracle              
    --                .         ,        ,            .
    --    ,              UNIQUE
    ALTER TABLE EMP  ADD CONSTRAINTS ENAME_UNI  UNIQUE (ENAME);
       
    
    ALTER TABLE EMP DROP CONSTRAINTS  ENAME_UNI;
      
    SELECT * FROM EMP;  
    
    -- 2.         ,              ,     NOMAL
    --      ,              ,      
    CREATE INDEX ENAME_INDEX  ON EMP (ENAME);
    
    --     
    DROP INDEX ENAME_INDEX;
    
    SELECT * FROM EMP WHERE ENAME = 'SMITH';
    

    2データベース・オブジェクト-表示
    -- ================================    =============================================
    --  ,      ,             
    
    
    --           
    CREATE VIEW HR_VIEWAS SELECT * FROM EMP;
    
    --             
    CREATE VIEW HR_MGR	AS SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,DEPTNO FROM EMP ;
    
    --                    ,          
    DESC EMP;
    DESC  HR_VIEW;
    SELECT * FROM HR_VIEW WHERE EMPNO = 7369;
    
    
    CREATE OR REPLACE  VIEW HR_MGR
    AS
    SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,DEPTNO,COMM
    FROM EMP ;
    
    
    --     ,         !
    DROP VIEW HR_MGR;
    SELECT * FROM HR_MGR;
    SELECT * FROM EMP;
    
    -- 
    CREATE OR REPLACE  VIEW VIEW_EMPINFO
    AS
    SELECT E.EMPNO,E.ENAME,E.JOB,E.MGR,E.HIREDATE,E.SAL, (E.SAL*12) AS "  " ,E.COMM ,(E.SAL*12 + NVL(E.COMM,0))"   " ,E.DEPTNO,D.DNAME,D.LOC_ID,L.LOCNAME
    FROM EMP E,DEPT D,LOCATIONS L
    WHERE E.DEPTNO = D.DEPTNO AND D.LOC_ID= L.LOCID;
    
    SELECT * FROM VIEW_EMPINFO WHERE     < 20000;
    
    
    CREATE OR REPLACE VIEW VIEW_EMP
    (     ,    ,  ,   )
    AS
    SELECT EMPNO,ENAME,SAL,COMM FROM EMP;
    
    SELECT * FROM VIEW_EMP WHERE      = 7369;
    
    SELECT * FROM VIEW_EMP WHERE      = 'SMITH';
    
    --               
    CREATE OR REPLACE VIEW  V_EMP_SAL
    AS
    SELECT DEPTNO,MAX(SAL) MAXSAL ,MIN(SAL) MINSAL,SUM(SAL) SUMSAL,AVG(SAL) AVGSAL
    FROM EMP
    WHERE DEPTNO IS NOT NULL
    GROUP BY DEPTNO
    ORDER BY DEPTNO;
    
    SELECT  * FROM V_EMP_SAL  WHERE MAXSAL > 2000;
    
    --       ( ) ,          ,          
    CREATE OR REPLACE VIEW V_EMPINFO
    AS
    SELECT * FROM EMP WHERE SAL  > 2000;
    
    
    --        ,          !
    INSERT INTO V_EMPINFO VALUES (8000,' 1','   ',7902,'12-8 -1987',1900,500,20);
    
    SELECT * FROM EMP;
    
    
    --        ,    DML  
    CREATE OR REPLACE VIEW V_EMPINFO AS SELECT * FROM EMP WITH READ ONLY
    

    行内ビュー
    
    --     ,     FROM      ,       ,         ,         
    --               ,       TOP-N   
    -- ROWNUM      <=    
    SELECT ROWNUM,E.*
    FROM (SELECT * FROM EMP ORDER BY SAL DESC) E
    WHERE ROWNUM <= 3;
    
    --       >=    
    SELECT ROWNUM,E.*
    FROM (SELECT * FROM EMP ORDER BY SAL DESC) E
    WHERE ROWNUM >= 12;
    

    3 ROWNUM詳細
    --      ,     
    DROP TABLE STUDENT;
    CREATE TABLE STUDENT(
      ID     NUMBER (4) primary key,
      NAME   VARCHAR2(20)
    );
    
    
    insert into Student values (1000,'  ');
    insert into Student values (1001,'  ');
    insert into Student values (1002,'  ');
    insert into Student values (1003,'  ');
    insert into Student values (1004,'  ');
    insert into Student values (1005,'  ');
    insert into Student values (1006,'  ');
    
    SELECT * FROM STUDENT for update;
    
    /*
    (1) rownum            
                          ,    rownum=1    。            
             ,  rownum=2       。  rownum   1  ,  1       rownum
                   false  ,      rownum = n(n>1    )。
    */
    select rownum ,T.* FROM student T where rownum = 1;    --       
    select rownum,id,name from student where rownum = 2;    --       
    
    /*
    2)rownum           
                       ,   rownum>2       ,     rownum     
        1     ,Oracle   rownum> n(n>1    )         ,         
    */
    select rownum,id,name from student where rownum >=2;
    
    /*
                 ,               。       rownum  
           ,           ,    rownum       ,        ,    
       rownum             。
    */
    select * from(select rownum no ,id,name from student) where no>=2 and no <=5;
    
    
    /*
    3)rownum           
                      ,   rownum<3         。
         rownum  rownum1    )         ,        。
    */   
    select rownum ,id name from student where rownum <3;
    
    /*
    (4)         rownum       ,      rownum           
         true ,rownum                false ,              
       true 。         。     rownum             ,         
         ,           ,              ,           rownum 
                   。                  。
    */
    select * from (select rownum no,id,name from student where rownum<=5 ) where no >=3;
    select * from (select rownum no ,id,name from student) where no>=3 and no <=5;
    
    
    /*
    (4)rownum   
         Oracle  rownum              ,               rowmun         。
    */
    select rownum ,id,name from student order by name;
    
    /*
            ,rownum     name       。                   ,
        rowid       。        ,       
    */
    select rownum ,id,name from (select * from student order by name);
    
    --rowid     ,    oracle            
    select rowid ,e.* from emp e
    
    

    4データベース・オブジェクト-シノニム
    1、同義語はデータベースオブジェクトの別名である2、同義語はオブジェクトへのアクセスを簡略化できる3、同義語を用いることにより、別のユーザオブジェクトを参照する方法(ユーザ名.オブジェクト名)を簡略化する4、オブジェクト名の長さを短縮する5、同時に対象の名前を遮断し、ユーザが最終的なデータがそのオブジェクトに由来することを知らないようにする
    --   ,            ,                
    SELECT SYSDATE FROM SYS.DUAL;
    
    create or replace synonym DUAL1 for SYS.DUAL;
      
    SELECT SYSDATE FROM DUAL1;  
    
    --     
    DROP SYNONYM DUAL1;
    

    5データベース・オブジェクト-シーケンス
    NEXTVAL、CURRVALの使用SELECT*.CURRVAL FROM SYS.DUAL;
    --    ,            
    DROP TABLE STUDENT;
    
    CREATE TABLE STUDENT(
       SID       NUMBER(4) PRIMARY KEY,
       SNAME     VARCHAR2(10)
    );
    
    
    create sequence SEQ_STU
    minvalue 1
    maxvalue 9999
    start with 1
    increment by 1;
    
    --     
    INSERT INTO STUDENT VALUES (SEQ_STU.NEXTVAL,' 1');
    
    SELECT * FROM STUDENT;
    
    SELECT SEQ_STU.CURRVAL FROM SYS.DUAL;
    
    
    DELETE FROM STUDENT WHERE SID >= 10;