selectuserenv('language')fromdual;USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.AL32UTF8SQL>我們可以看到查到的字符集為“AMERICAN_AMERICA.AL32UTF8" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle Database 11g Express Edition學習筆記

系統 2415 0

修改字符集

使用用戶system,通過sqlplus程序連接到Oracle數據庫,輸入以下命令,查看字符集:

      SQL
      
        >
      
      
        select userenv('language') from
      
      
        
           dual;
        
        
          USERENV(
        
      
      
        'LANGUAGE')


      
      
        --
      
      
        --------------------------------------------------
      
      
        
          AMERICAN_AMERICA.AL32UTF8
        
        



SQL
      
      
        >
      
    

我們可以看到查到的字符集為“ AMERICAN_AMERICA.AL32UTF8 ”,而國內數據庫常用的字符集為“ ZHS16GBK ”。

例如:某字段在企業版中定義的為varchar2(4), 保存數據為''田田'',則導入oraclexe時,該字段定義仍為varchar2(4),但數據''田田''就需要占用6個字符長度,出現的問題如下所示:

IMP-00019: 由于 ORACLE 錯誤 12899 而拒絕行
IMP-00003: 遇到 ORACLE 錯誤 12899
ORA-12899: 列 "TEST"."TEST_TIANYC"."A" 的值太大 (實際值: 6, 最大值: 4)

此時就需要按照以下操作說明進行操作后即可解決問題。

操作說明:

開始菜單-->所有程序-->Oracle Database 11g Express Edition-->運行SQL命令行,啟動sqlplus程序。

由于sqlplus程序不支持直接在程序窗口中右鍵,進行復制、粘貼等操作,所以博主采用的是在運行命令行中啟動sqlplus程序。

開始菜單-->運行-->輸入cmd,并回車-->打開cmd命令行。

      
        Microsoft Windows [版本 6.1.7601]

版權所有 (c) 2009 Microsoft Corporation。保留所有權利。



C:\Users\Candy>
        
          C:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe /nolog
        
        



SQL*Plus: Release 11.2.0.2.0 Production on 星期三 11月 26 12:11:59 2014



Copyright (c) 1982, 2010, Oracle.  All rights reserved.



SQL> 
        
          connect system as sysdba
        
        

輸入口令:

已連接。

SQL> 
        
          shutdown immediate
        
        

數據庫已經關閉。

已經卸載數據庫。

ORACLE 例程已經關閉。

SQL> 
        
          startup mount
        
        

ORACLE 例程已經啟動。



Total System Global Area  644468736 bytes

Fixed Size                  1385488 bytes

Variable Size             192941040 bytes

Database Buffers          444596224 bytes

Redo Buffers                5545984 bytes

數據庫裝載完畢。

SQL> 
        
          alter system enable restricted session;
        
        



系統已更改。



SQL> 
        
          alter system set JOB_QUEUE_PROCESSES=0;
        
        



系統已更改。



SQL> 
        
          alter system set AQ_TM_PROCESSES=0;
        
        



系統已更改。



SQL> 
        
          alter database open;
        
        



數據庫已更改。



SQL> 
        
          alter database character set internal_use ZHS16GBK;
        
        



數據庫已更改。



SQL> 
        
          shutdown immediate
        
        

數據庫已經關閉。

已經卸載數據庫。

ORACLE 例程已經關閉。

SQL> 
        
          startup
        
        

ORACLE 例程已經啟動。



Total System Global Area  644468736 bytes

Fixed Size                  1385488 bytes

Variable Size             192941040 bytes

Database Buffers          444596224 bytes

Redo Buffers                5545984 bytes

數據庫裝載完畢。

數據庫已經打開。

SQL> 
        
          select userenv('language') from dual;
        
        



USERENV('LANGUAGE')

----------------------------------------------------


        
          SIMPLIFIED CHINESE_CHINA.ZHS16GBK
        
        



SQL>
      
    

此時,再進行數據導入或者在字段類型為varchar2(4)的字段插入“田田”,就不會報錯了。

修改字符集后可能導致navicat連不上Oracle數據庫,請在菜單-->工具-->選項-->其他-->OCI中將OCI library(oci.dll)的值修改為

C:\oraclexe\app\oracle\product\11.2.0\server\bin\oci.dll,點擊確定后,重啟navicat即可。

Oracle自帶的Scott用戶下的Demo庫的SQL ?

      
        DROP
      
      
        TABLE
      
      
         EMP;




      
      
        DROP
      
      
        TABLE
      
      
         DEPT;




      
      
        DROP
      
      
        TABLE
      
      
         BONUS;




      
      
        DROP
      
      
        TABLE
      
      
         SALGRADE;




      
      
        CREATE
      
      
        TABLE
      
      
         DEPT (

    DEPTNO 
      
      
        NUMBER
      
       (
      
        2
      
      ) 
      
        CONSTRAINT
      
       PK_DEPT 
      
        PRIMARY
      
      
        KEY
      
      
        ,

    DNAME 
      
      
        VARCHAR2
      
       (
      
        14
      
      
        ),

    LOC 
      
      
        VARCHAR2
      
       (
      
        13
      
      
        )

);




      
      
        CREATE
      
      
        TABLE
      
      
         EMP (

    EMPNO 
      
      
        NUMBER
      
       (
      
        4
      
      ) 
      
        CONSTRAINT
      
       PK_EMP 
      
        PRIMARY
      
      
        KEY
      
      
        ,

    ENAME 
      
      
        VARCHAR2
      
       (
      
        10
      
      
        ),

    JOB 
      
      
        VARCHAR2
      
       (
      
        9
      
      
        ),

    MGR 
      
      
        NUMBER
      
       (
      
        4
      
      
        ),

    HIREDATE DATE,

    SAL 
      
      
        NUMBER
      
       (
      
        7
      
      , 
      
        2
      
      
        ),

    COMM 
      
      
        NUMBER
      
       (
      
        7
      
      , 
      
        2
      
      
        ),

    DEPTNO 
      
      
        NUMBER
      
       (
      
        2
      
      ) 
      
        CONSTRAINT
      
       FK_DEPTNO 
      
        REFERENCES
      
      
         DEPT

);




      
      
        INSERT
      
      
        INTO
      
       DEPT 
      
        VALUES
      
       (
      
        10
      
      , 
      
        '
      
      
        ACCOUNTING
      
      
        '
      
      , 
      
        '
      
      
        NEW YORK
      
      
        '
      
      
        );




      
      
        INSERT
      
      
        INTO
      
       DEPT 
      
        VALUES
      
       (
      
        20
      
      , 
      
        '
      
      
        RESEARCH
      
      
        '
      
      , 
      
        '
      
      
        DALLAS
      
      
        '
      
      
        );




      
      
        INSERT
      
      
        INTO
      
       DEPT 
      
        VALUES
      
       (
      
        30
      
      , 
      
        '
      
      
        SALES
      
      
        '
      
      , 
      
        '
      
      
        CHICAGO
      
      
        '
      
      
        );




      
      
        INSERT
      
      
        INTO
      
       DEPT 
      
        VALUES
      
       (
      
        40
      
      , 
      
        '
      
      
        OPERATIONS
      
      
        '
      
      , 
      
        '
      
      
        BOSTON
      
      
        '
      
      
        );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7369
      
      , 
      
        '
      
      
        SMITH
      
      
        '
      
      , 
      
        '
      
      
        CLERK
      
      
        '
      
      , 
      
        7902
      
      , TO_DATE (
      
        '
      
      
        17-12-1980
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        800
      
      , 
      
        NULL
      
      , 
      
        20
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7499
      
      , 
      
        '
      
      
        ALLEN
      
      
        '
      
      , 
      
        '
      
      
        SALESMAN
      
      
        '
      
      , 
      
        7698
      
      , TO_DATE (
      
        '
      
      
        20-2-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        1600
      
      , 
      
        300
      
      , 
      
        30
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7521
      
      , 
      
        '
      
      
        WARD
      
      
        '
      
      , 
      
        '
      
      
        SALESMAN
      
      
        '
      
      , 
      
        7698
      
      , TO_DATE (
      
        '
      
      
        22-2-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        1250
      
      , 
      
        500
      
      , 
      
        30
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7566
      
      , 
      
        '
      
      
        JONES
      
      
        '
      
      , 
      
        '
      
      
        MANAGER
      
      
        '
      
      , 
      
        7839
      
      , TO_DATE (
      
        '
      
      
        2-4-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        2975
      
      , 
      
        NULL
      
      , 
      
        20
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7654
      
      , 
      
        '
      
      
        MARTIN
      
      
        '
      
      , 
      
        '
      
      
        SALESMAN
      
      
        '
      
      , 
      
        7698
      
      , TO_DATE (
      
        '
      
      
        28-9-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        1250
      
      , 
      
        1400
      
      , 
      
        30
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7698
      
      , 
      
        '
      
      
        BLAKE
      
      
        '
      
      , 
      
        '
      
      
        MANAGER
      
      
        '
      
      , 
      
        7839
      
      , TO_DATE (
      
        '
      
      
        1-5-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        2850
      
      , 
      
        NULL
      
      , 
      
        30
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7782
      
      , 
      
        '
      
      
        CLARK
      
      
        '
      
      , 
      
        '
      
      
        MANAGER
      
      
        '
      
      , 
      
        7839
      
      , TO_DATE (
      
        '
      
      
        9-6-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        2450
      
      , 
      
        NULL
      
      , 
      
        10
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7788
      
      , 
      
        '
      
      
        SCOTT
      
      
        '
      
      , 
      
        '
      
      
        ANALYST
      
      
        '
      
      , 
      
        7566
      
      , TO_DATE (
      
        '
      
      
        13-07-87
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-rr
      
      
        '
      
      ) 
      
        -
      
      
        85
      
      , 
      
        3000
      
      , 
      
        NULL
      
      , 
      
        20
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7839
      
      , 
      
        '
      
      
        KING
      
      
        '
      
      , 
      
        '
      
      
        PRESIDENT
      
      
        '
      
      , 
      
        NULL
      
      , TO_DATE (
      
        '
      
      
        17-11-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        5000
      
      , 
      
        NULL
      
      , 
      
        10
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7844
      
      , 
      
        '
      
      
        TURNER
      
      
        '
      
      , 
      
        '
      
      
        SALESMAN
      
      
        '
      
      , 
      
        7698
      
      , TO_DATE (
      
        '
      
      
        8-9-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        1500
      
      , 
      
        0
      
      , 
      
        30
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7876
      
      , 
      
        '
      
      
        ADAMS
      
      
        '
      
      , 
      
        '
      
      
        CLERK
      
      
        '
      
      , 
      
        7788
      
      , TO_DATE (
      
        '
      
      
        13-07-87
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-rr
      
      
        '
      
      ) 
      
        -
      
      
        51
      
      , 
      
        1100
      
      , 
      
        NULL
      
      , 
      
        20
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7900
      
      , 
      
        '
      
      
        JAMES
      
      
        '
      
      , 
      
        '
      
      
        CLERK
      
      
        '
      
      , 
      
        7698
      
      , TO_DATE (
      
        '
      
      
        3-12-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        950
      
      , 
      
        NULL
      
      , 
      
        30
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7902
      
      , 
      
        '
      
      
        FORD
      
      
        '
      
      , 
      
        '
      
      
        ANALYST
      
      
        '
      
      , 
      
        7566
      
      , TO_DATE (
      
        '
      
      
        3-12-1981
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        3000
      
      , 
      
        NULL
      
      , 
      
        20
      
      
         );




      
      
        INSERT
      
      
        INTO
      
       EMP 
      
        VALUES
      
       ( 
      
        7934
      
      , 
      
        '
      
      
        MILLER
      
      
        '
      
      , 
      
        '
      
      
        CLERK
      
      
        '
      
      , 
      
        7782
      
      , TO_DATE (
      
        '
      
      
        23-1-1982
      
      
        '
      
      , 
      
        '
      
      
        dd-mm-yyyy
      
      
        '
      
      ), 
      
        1300
      
      , 
      
        NULL
      
      , 
      
        10
      
      
         );




      
      
        CREATE
      
      
        TABLE
      
      
         BONUS (

    ENAME 
      
      
        VARCHAR2
      
       (
      
        10
      
      
        ),

    JOB 
      
      
        VARCHAR2
      
       (
      
        9
      
      
        ),

    SAL 
      
      
        NUMBER
      
      
        ,

    COMM 
      
      
        NUMBER
      
      
        

);




      
      
        CREATE
      
      
        TABLE
      
      
         SALGRADE (

    GRADE 
      
      
        NUMBER
      
      
        ,

    LOSAL 
      
      
        NUMBER
      
      
        ,

    HISAL 
      
      
        NUMBER
      
      
        

);




      
      
        INSERT
      
      
        INTO
      
       SALGRADE 
      
        VALUES
      
       (
      
        1
      
      , 
      
        700
      
      , 
      
        1200
      
      
        );




      
      
        INSERT
      
      
        INTO
      
       SALGRADE 
      
        VALUES
      
       (
      
        2
      
      , 
      
        1201
      
      , 
      
        1400
      
      
        );




      
      
        INSERT
      
      
        INTO
      
       SALGRADE 
      
        VALUES
      
       (
      
        3
      
      , 
      
        1401
      
      , 
      
        2000
      
      
        );




      
      
        INSERT
      
      
        INTO
      
       SALGRADE 
      
        VALUES
      
       (
      
        4
      
      , 
      
        2001
      
      , 
      
        3000
      
      
        );




      
      
        INSERT
      
      
        INTO
      
       SALGRADE 
      
        VALUES
      
       (
      
        5
      
      , 
      
        3001
      
      , 
      
        9999
      
      
        );




      
      
        COMMIT
      
      ;
    

? 練習題目

      
        根據Oracle數據庫scott模式下的emp表和dept表,完成下列操作。

(
      
      
        1
      
      
        )    查詢20號部門的所有員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       deptno 
      
        =
      
      
        20
      
      
        ;

(
      
      
        2
      
      
        )    查詢所有工種為CLERK的員工的工號、員工名和部門名。


      
      
        select
      
       empno,ename,deptno 
      
        from
      
       emp 
      
        where
      
       job 
      
        like
      
      
        '
      
      
        CLERK
      
      
        '
      
      
        ;

(
      
      
        3
      
      
        )    查詢獎金(COMM)高于工資(SAL)的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       comm 
      
        >
      
      
         sal;

(
      
      
        4
      
      )    查詢獎金高于工資的20
      
        %
      
      
        的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       comm 
      
        >
      
       (sal
      
        *
      
      
        0.2
      
      
        );

(
      
      
        5
      
      
        )    查詢10號部門中工種為MANAGER和20號部門中工種為CLERK的員工的信息。


      
      
        select
      
      
        *
      
      
        from
      
      
         emp 


      
      
        where
      
       (deptno 
      
        =
      
      
        10
      
      
        and
      
       job 
      
        like
      
      
        '
      
      
        MANAGER
      
      
        '
      
      ) 
      
        or
      
       (deptno 
      
        =
      
      
        20
      
      
        and
      
       job 
      
        like
      
      
        '
      
      
        CLERK
      
      
        '
      
      
        );

(
      
      
        6
      
      
        )    查詢所有工種不是MANAGER和CLERK,且工資大于或等于2000的員工的詳細信息。


      
      
        select
      
      
        *
      
      
        from
      
      
         emp 


      
      
        where
      
       job 
      
        not
      
      
        in
      
       (
      
        '
      
      
        MANAGER
      
      
        '
      
      ,
      
        '
      
      
        CLERK
      
      
        '
      
      ) 
      
        and
      
       sal 
      
        >=
      
      
        2000
      
      
         ;

(
      
      
        7
      
      
        )    查詢有獎金的員工的不同工種。


      
      
        select
      
      
        distinct
      
       job 
      
        from
      
       emp 
      
        where
      
       comm 
      
        is
      
      
        not
      
      
        null
      
      
        ;

(
      
      
        8
      
      
        )    查詢所有員工工資和獎金的和。


      
      
        select
      
       ename,(sal
      
        +
      
      nvl(comm,
      
        0
      
      )) salcomm 
      
        from
      
      
         emp;

(
      
      
        9
      
      
        )    查詢沒有獎金或獎金低于100的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       (comm 
      
        is
      
      
        null
      
      
        or
      
       comm 
      
        <
      
      
        100
      
      
        ) ;

(
      
      
        10
      
      
        )    查詢各月倒數第2天入職的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       hiredate 
      
        in
      
       (
      
        select
      
       (last_day(hiredate)
      
        -
      
      
        1
      
      ) 
      
        from
      
      
         emp);

(
      
      
        11
      
      
        )    查詢員工工齡大于或等于10年的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       (sysdate 
      
        -
      
       hiredate)
      
        /
      
      
        365
      
      
        >=
      
      
        10
      
      
         ;

(
      
      
        12
      
      
        )    查詢員工信息,要求以首字母大寫的方式顯示所有員工的姓名。


      
      
        select
      
      
        upper
      
      (substr(ename,
      
        1
      
      ,
      
        1
      
      )) 
      
        ||
      
      
        lower
      
      (substr(ename,
      
        2
      
      ,length(ename)
      
        -
      
      
        1
      
      )) 
      
        from
      
      
         emp;

(
      
      
        13
      
      
        )    查詢員工名正好為6個字符的員工的信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       length(ename)
      
        =
      
      
        6
      
      
         ;

(
      
      
        14
      
      
        )    查詢員工名字中不包含字母“S”員工。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       ename 
      
        not
      
      
        in
      
       (
      
        select
      
       ename 
      
        from
      
       emp 
      
        where
      
       ename 
      
        like
      
      
        '
      
      
        %S%
      
      
        '
      
      
        ) ;


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       ename 
      
        not
      
      
        like
      
        %
      
      S
      
        %
      
      
        ’;

(
      
      
        15
      
      
        )    查詢員工姓名的第2個字母為“M”的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       ename 
      
        like
      
      
        '
      
      
        _M%
      
      
        '
      
      
        ;

(
      
      
        16
      
      
        )    查詢所有員工姓名的前3個字符。


      
      
        select
      
       substr(ename,
      
        1
      
      ,
      
        3
      
      ) 
      
        from
      
      
         emp ;

(
      
      
        17
      
      
        )    查詢所有員工的姓名,如果包含字母“s”,則用“S”替換。


      
      
        select
      
      
        replace
      
      (ename,
      
        '
      
      
        s
      
      
        '
      
      ,
      
        '
      
      
        S
      
      
        '
      
      ) 
      
        from
      
      
         emp ;

(
      
      
        18
      
      
        )    查詢員工的姓名和入職日期,并按入職日期從先到后進行排列。


      
      
        select
      
       ename,hiredate 
      
        from
      
       emp 
      
        order
      
      
        by
      
       hiredate 
      
        asc
      
      
         ;

(
      
      
        19
      
      
        )    顯示所有的姓名、工種、工資和獎金,按工種降序排列,若工種相同則按工資升序排列。


      
      
        select
      
       ename,job,sal,comm 
      
        from
      
       emp 
      
        order
      
      
        by
      
       job 
      
        desc
      
      ,sal 
      
        asc
      
      
         ;

(
      
      
        20
      
      
        )    顯示所有員工的姓名、入職的年份和月份,若入職日期所在的月份排序,若月份相同則按入職的年份排序。


      
      
        select
      
       ename,to_char(hiredate,
      
        '
      
      
        yyyy
      
      
        '
      
      )
      
        ||
      
      
        '
      
      
        -
      
      
        '
      
      
        ||
      
      to_char(hiredate,
      
        '
      
      
        mm
      
      
        '
      
      ) 
      
        from
      
       emp 
      
        order
      
      
        by
      
       to_char(hiredate,
      
        '
      
      
        mm
      
      
        '
      
      ),to_char(hiredate,
      
        '
      
      
        yyyy
      
      
        '
      
      
        );

(
      
      
        21
      
      
        )    查詢在2月份入職的所有員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       to_char(hiredate,
      
        '
      
      
        mm
      
      
        '
      
      ) 
      
        =
      
      
        2
      
      
         ;

(
      
      
        22
      
      )    查詢所有員工入職以來的工作期限,用“
      
        **
      
        **
      
        **
      
      
        日”的形式表示。


      
      
        select
      
       ename,
      
        floor
      
      ((sysdate
      
        -
      
      hiredate)
      
        /
      
      
        365
      
      )
      
        ||
      
      
        '
      
      
      
        '
      
      
        ||
      
      
        floor
      
      (mod((sysdate
      
        -
      
      hiredate),
      
        365
      
      )
      
        /
      
      
        30
      
      )
      
        ||
      
      
        '
      
      
      
        '
      
      
        ||
      
      cell(mod(mod((sysdate
      
        -
      
      hiredate),
      
        365
      
      ),
      
        30
      
      ))
      
        ||
      
      
        '
      
      
      
        '
      
      
        from
      
      
         emp ;

(
      
      
        23
      
      
        )    查詢至少有一個員工的部門信息。


      
      
        select
      
      
        *
      
      
        from
      
       dept 
      
        where
      
       deptno 
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       mgr 
      
        is
      
      
        not
      
      
        null
      
      
        ) ;

(
      
      
        24
      
      
        )    查詢工資比SMITH員工工資高的所有員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       sal 
      
        >
      
       (
      
        select
      
       sal 
      
        from
      
       emp 
      
        where
      
       ename 
      
        like
      
      
        '
      
      
        SMITH
      
      
        '
      
      
        ) ;

(
      
      
        25
      
      
        )    查詢所有員工的姓名及其直接上級的姓名。


      
      
        select
      
       staname,ename supname 
      
        from
      
       (
      
        select
      
       ename staname,mgr 
      
        from
      
       emp) t 
      
        join
      
       emp 
      
        on
      
       t.mgr
      
        =
      
      
        emp.empno ;

(
      
      
        26
      
      
        )    查詢入職日期早于其直接上級領導的所有員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       empno 
      
        in
      
       (
      
        select
      
       staempno 
      
        from
      
       (
      
        select
      
       empno staempno,hiredate stahiredate,mgr 
      
        from
      
       emp) t 
      
        join
      
       emp 
      
        on
      
       t.mgr
      
        =
      
      emp.empno 
      
        and
      
       stahiredate 
      
        <
      
      
         hiredate) ;

(
      
      
        27
      
      
        )    查詢所有部門及其員工信息,包括那些沒有員工的部門。


      
      
        select
      
      
        *
      
      
        from
      
       dept 
      
        left
      
      
        join
      
       emp 
      
        on
      
       emp.deptno
      
        =
      
      dept.deptno 
      
        order
      
      
        by
      
      
         dept.deptno ;

(
      
      
        28
      
      
        )    查詢所有員工及其部門信息,包括那些還不屬于任何部門的員工。



(
      
      
        29
      
      
        )    查詢所有工種為CLERK的員工的姓名及其部門名稱。


      
      
        select
      
       ename,dname 
      
        from
      
       emp 
      
        join
      
       dept 
      
        on
      
       job 
      
        like
      
      
        '
      
      
        CLERK
      
      
        '
      
      
        and
      
       emp.deptno
      
        =
      
      
        dept.deptno ;

(
      
      
        30
      
      
        )    查詢最低工資大于2500的各種工作。


      
      
        select
      
       job 
      
        from
      
       (
      
        select
      
      
        min
      
      (sal) min_sal,job 
      
        from
      
       emp 
      
        group
      
      
        by
      
       job) 
      
        where
      
       min_sal 
      
        >
      
      
        2500
      
      
         ;

(
      
      
        31
      
      
        )    查詢最低工資低于2000的部門及其員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       deptno 
      
        in
      
       (
      
        select
      
       deptno 
      
        from
      
       (
      
        select
      
      
        min
      
      (sal) min_sal,deptno 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno) 
      
        where
      
       min_sal 
      
        <
      
      
        '
      
      
        2000
      
      
        '
      
      
        ) ;

(
      
      
        32
      
      
        )    查詢在SALES部門工作的員工的姓名信息。


      
      
        select
      
       ename 
      
        from
      
       emp 
      
        where
      
       deptno 
      
        =
      
       (
      
        select
      
       deptno 
      
        from
      
       dept 
      
        where
      
       dname 
      
        like
      
      
        '
      
      
        SALES
      
      
        '
      
      
        );

(
      
      
        33
      
      
        )    查詢工資高于公司平均工資的所有員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       sal 
      
        >
      
       (
      
        select
      
      
        avg
      
      (sal) 
      
        from
      
      
         emp) ;

(
      
      
        34
      
      
        )    查詢與SMITH員工從事相同工作的所有員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       job 
      
        in
      
       (
      
        select
      
       job 
      
        from
      
       emp 
      
        where
      
       ename 
      
        like
      
      
        '
      
      
        SMITH
      
      
        '
      
      ) 
      
        and
      
       ename 
      
        not
      
      
        like
      
      
        '
      
      
        SMITH
      
      
        '
      
      
         ;

(
      
      
        35
      
      
        )    列出工資等于30號部門中某個員工工資的所有員工的姓名和工資。


      
      
        select
      
       ename,sal 
      
        from
      
       emp 
      
        where
      
       sal 
      
        =any
      
       (
      
        select
      
       sal 
      
        from
      
       emp 
      
        where
      
       deptno 
      
        =
      
      
        30
      
      
        ) ;

(
      
      
        36
      
      
        )    查詢工資高于30號部門中工作的所有員工的工資的員工姓名和工資。


      
      
        select
      
       ename,sal 
      
        from
      
       emp 
      
        where
      
       sal 
      
        >all
      
       (
      
        select
      
       sal 
      
        from
      
       emp 
      
        where
      
       deptno 
      
        =
      
      
        30
      
      
        ) ;

(
      
      
        37
      
      
        )    查詢每個部門中的員工數量、平均工資和平均工作年限。


      
      
        select
      
       dname,
      
        count
      
      ,avg_sal,avg_date 
      
        from
      
       dept 
      
        join
      
       (
      
        select
      
      
        count
      
      (
      
        *
      
      ) 
      
        count
      
      ,
      
        avg
      
      (sal) avg_sal,
      
        avg
      
      ((sysdate
      
        -
      
      hiredate)
      
        /
      
      
        365
      
      ) avg_date,deptno 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno) t 
      
        on
      
       dept.deptno 
      
        =
      
      
         t.deptno ;

(
      
      
        38
      
      
        )    查詢從事同一種工作但不屬于同一部門的員工信息。


      
      
        select
      
      
        distinct
      
       t1.empno,t1.ename,t1.deptno 
      
        from
      
       emp t1 
      
        join
      
       emp t2 
      
        on
      
       t1.job 
      
        like
      
       t2.job 
      
        and
      
       t1.deptno 
      
        <>
      
      
         t2.deptno ;

(
      
      
        39
      
      
        )    查詢各個部門的詳細信息以及部門人數、部門平均工資。


      
      
        Select
      
       dept.
      
        *
      
      ,person_num,avg_sal 
      
        from
      
       dept,(
      
        select
      
      
        count
      
      (
      
        *
      
      ) person_num,
      
        avg
      
      (sal) avg_sal,deptno 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno) t 
      
        where
      
       dept.deptno 
      
        =
      
      
         t.deptno ;

(
      
      
        40
      
      
        )    查詢各種工作的最低工資。


      
      
        select
      
       job,
      
        min
      
      (sal) 
      
        from
      
       emp 
      
        group
      
      
        by
      
      
         job ;

(
      
      
        41
      
      
        )    查詢各個部門中的不同工種的最高工資。


      
      
        select
      
      
        max
      
      (sal),job,deptno 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno,job 
      
        order
      
      
        by
      
      
         deptno,job ;

(
      
      
        42
      
      
        )    查詢10號部門員工以及領導的信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       empno 
      
        in
      
       (
      
        select
      
       mgr 
      
        from
      
       emp 
      
        where
      
       deptno
      
        =
      
      
        10
      
      ) 
      
        or
      
       deptno 
      
        =
      
      
        10
      
      
         ;

(
      
      
        43
      
      
        )    查詢各個部門的人數及平均工資。


      
      
        select
      
       deptno,
      
        count
      
      (
      
        *
      
      ),
      
        avg
      
      (sal) 
      
        from
      
       emp 
      
        group
      
      
        by
      
      
         deptno ;

(
      
      
        44
      
      
        )    查詢工資為某個部門平均工資的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       sal 
      
        in
      
       (
      
        select
      
      
        avg
      
      (sal) avg_sal 
      
        from
      
       emp 
      
        group
      
      
        by
      
      
         deptno) ;

(
      
      
        45
      
      
        )    查詢工資高于本部門平均工資的員工的信息。


      
      
        select
      
       emp.
      
        *
      
      
        from
      
       emp 
      
        join
      
       (
      
        select
      
       deptno,
      
        avg
      
      (sal) avg_sal 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno) t 
      
        on
      
       emp.deptno
      
        =
      
      t.deptno 
      
        and
      
       sal
      
        >
      
      
        avg_sal ;

(
      
      
        46
      
      
        )    查詢工資高于本部門平均工資的員工的信息及其部門的平均工資。


      
      
        select
      
       emp.
      
        *
      
      ,avg_sal 
      
        from
      
       emp 
      
        join
      
       (
      
        select
      
       deptno,
      
        avg
      
      (sal) avg_sal 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno) t 
      
        on
      
       emp.deptno
      
        =
      
      t.deptno 
      
        and
      
       sal
      
        >
      
      
        avg_sal ;

(
      
      
        47
      
      
        )    查詢工資高于20號部門某個員工工資的員工的信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       sal 
      
        >any
      
      (
      
        select
      
       sal 
      
        from
      
       emp 
      
        where
      
       deptno
      
        =
      
      
        20
      
      
        );

(
      
      
        48
      
      
        )    統計各個工種的人數與平均工資。


      
      
        select
      
       job,
      
        count
      
      (
      
        *
      
      ),
      
        avg
      
      (sal) 
      
        from
      
       emp 
      
        group
      
      
        by
      
      
         job ;

(
      
      
        49
      
      
        )    統計每個部門中各個工種的人數與平均工資。


      
      
        select
      
       deptno,job,
      
        count
      
      (
      
        *
      
      ),
      
        avg
      
      (sal) 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno,job 
      
        order
      
      
        by
      
      
         deptno,job;

(
      
      
        50
      
      
        )    查詢工資、獎金與10 號部門某個員工工資、獎金都相同的員工的信息。


      
      
        select
      
       emp.
      
        *
      
      
        from
      
       emp 
      
        join
      
       (
      
        select
      
       sal,comm 
      
        from
      
       emp 
      
        where
      
       deptno 
      
        =
      
      
        10
      
      ) t 
      
        on
      
       emp.sal
      
        =
      
      t.sal 
      
        and
      
       nvl(emp.comm,
      
        0
      
      )
      
        =
      
      nvl(t.comm,
      
        0
      
      ) 
      
        and
      
       emp.deptno 
      
        !=
      
      
        10
      
      
        ;

(
      
      
        51
      
      
        )    查詢部門人數大于5的部門的員工的信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       deptno 
      
        in
      
       (
      
        select
      
       deptno 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno 
      
        having
      
      
        count
      
      (
      
        *
      
      )
      
        >
      
      
        5
      
      
        );

(
      
      
        52
      
      
        )    查詢所有員工工資都大于1000的部門的信息。


      
      
        select
      
      
        *
      
      
        from
      
       dept 
      
        where
      
       deptno 
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       deptno 
      
        not
      
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       sal 
      
        <
      
      
        1000
      
      
        )) ;

(
      
      
        53
      
      
        )    查詢所有員工工資都大于1000的部門的信息及其員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        join
      
       dept 
      
        on
      
       dept.deptno 
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       deptno 
      
        not
      
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       sal 
      
        <
      
      
        1000
      
      )) 
      
        and
      
       dept.deptno
      
        =
      
      
        emp.deptno;

(
      
      
        54
      
      )    查詢所有員工工資都在900
      
        ~
      
      
        3000之間的部門的信息。


      
      
        select
      
      
        *
      
      
        from
      
       dept 
      
        where
      
       deptno 
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       deptno 
      
        not
      
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       sal 
      
        not
      
      
        between
      
      
        900
      
      
        and
      
      
        3000
      
      
        )) ;

(
      
      
        55
      
      )    查詢所有工資都在900
      
        ~
      
      
        3000之間的員工所在部門的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       deptno 
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       deptno 
      
        not
      
      
        in
      
       (
      
        select
      
      
        distinct
      
       deptno 
      
        from
      
       emp 
      
        where
      
       sal 
      
        not
      
      
        between
      
      
        900
      
      
        and
      
      
        3000
      
      
        )) ;

(
      
      
        56
      
      
        )    查詢每個員工的領導所在部門的信息。


      
      
        select
      
      
        *
      
      
        from
      
       (
      
        select
      
       e1.empno,e1.ename,e1.mgr mno,e2.ename mname,e2.deptno 
      
        from
      
       emp e1 
      
        join
      
       emp e2 
      
        on
      
       e1.mgr
      
        =
      
      e2.empno) t 
      
        join
      
       dept 
      
        on
      
       t.deptno
      
        =
      
      
        dept.deptno ;

(
      
      
        57
      
      
        )    查詢人數最多的部門信息。


      
      
        select
      
      
        *
      
      
        from
      
       dept 
      
        where
      
       deptno 
      
        in
      
       (
      
        select
      
       deptno 
      
        from
      
       (
      
        select
      
      
        count
      
      (
      
        *
      
      ) 
      
        count
      
      ,deptno 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno) 
      
        where
      
      
        count
      
      
        in
      
       (
      
        select
      
      
        max
      
      (
      
        count
      
      ) 
      
        from
      
       (
      
        select
      
      
        count
      
      (
      
        *
      
      ) 
      
        count
      
      ,deptno 
      
        from
      
       emp 
      
        group
      
      
        by
      
      
         deptno)));

(
      
      
        58
      
      
        )    查詢30號部門中工資排序前3名的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       empno 
      
        in
      
       (
      
        select
      
       empno 
      
        from
      
       (
      
        select
      
       empno,sal 
      
        from
      
       emp 
      
        where
      
       deptno
      
        =
      
      
        30
      
      
        order
      
      
        by
      
       sal 
      
        desc
      
      ) 
      
        where
      
       rownum 
      
        <
      
      
        4
      
      
        ) ;

(
      
      
        59
      
      )    查詢所有員工中工資排在5
      
        ~
      
      
        10名之間的員工信息。


      
      
        select
      
      
        *
      
      
        from
      
       emp 
      
        where
      
       empno 
      
        in
      
       (
      
        select
      
       empno 
      
        from
      
       (
      
        select
      
       empno,rownum num 
      
        from
      
       (
      
        select
      
       empno,sal 
      
        from
      
       emp 
      
        order
      
      
        by
      
       sal 
      
        desc
      
      )) 
      
        where
      
       num 
      
        between
      
      
        5
      
      
        and
      
      
        10
      
      
         ) ;




      
      
        select
      
       empno 
      
        from
      
       (
      
        select
      
       empno,sal 
      
        from
      
       emp 
      
        order
      
      
        by
      
       sal 
      
        desc
      
      ) 
      
        where
      
       rownum 
      
        <=
      
      
        10
      
       minus 
      
        select
      
       empno 
      
        from
      
       (
      
        select
      
       empno,sal 
      
        from
      
       emp 
      
        order
      
      
        by
      
       sal 
      
        desc
      
      ) 
      
        where
      
       rownum 
      
        <
      
      
        5
      
      
         ;

(
      
      
        60
      
      
        )    查詢SMITH員工及所有其直接、間接下屬員工的信息。



(
      
      
        61
      
      
        )    查詢SOCTT員工及其直接、間接上級員工的信息。



(
      
      
        62
      
      
        )    以樹狀結構查詢所有員工與領導之間的層次關系。



(
      
      
        63
      
      
        )    向emp表中插入一條記錄,員工號為1357,員工名字為oracle,工資為2050元,部門號為20,入職日期為2002年5月10日。

insertinto emp(empno,ename,sal,deptno,hiredate) 
      
      
        values
      
       (
      
        1357
      
      ,
      
        '
      
      
        oracle
      
      
        '
      
      ,
      
        2050
      
      ,
      
        20
      
      ,to_date(
      
        '
      
      
        2002年5月10日
      
      
        '
      
      ,
      
        '
      
      
        yyyy"年"mm"月"dd"日"
      
      
        '
      
      
        )) ;

(
      
      
        64
      
      
        )    向emp表中插入一條記錄,員工名字為FAN,員工號為8000,其他信息與SMITH員工的信息相同。



(
      
      
        65
      
      
        )    將各部門員工的工資修改為該員工所在部門平均工資加1000。


      
      
        update
      
       emp t1 
      
        set
      
       sal 
      
        =
      
       (
      
        select
      
       new_sal 
      
        from
      
       (
      
        select
      
      
        avg
      
      (sal)
      
        +
      
      
        1000
      
       new_sal,deptno 
      
        from
      
       emp 
      
        group
      
      
        by
      
       deptno) t2 wher e t1.deptno 
      
        =
      
       t2.deptno ) ;
    

解鎖用戶、設置密碼

使用sqlplus程序登錄

SQL*Plus: Release 11.2.0.2.0 Production on 星期四 11月 27 15:58:01 2014

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL> connect sys as sysdba
輸入口令:
已連接。
SQL> alter user HR account unlock;

用戶已更改。

SQL> alter user HR identified by 123456;

用戶已更改。

SQL>

?

Oracle Database 11g Express Edition學習筆記


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美激情高清免费不卡 | 桃色婷婷 | 久久精品免费视频观看 | 亚洲成在人网站天堂一区二区 | 日韩一区国产二区欧美三区 | 亚洲精品久久久久中文字小说 | 国产成人一级片 | 亚洲精品美女久久久久99 | 91午夜精品亚洲一区二区三区 | 性视频一级 | 国产第一页精品 | 欧美理论在线观看 | 国产精品一区二区三区免费视频 | 国产最新精品精品视频 | 夜夜精品视频一区二区 | 日韩一区二区三 | 亚洲国产精品免费视频 | 欧美线人一区二区三区 | 日本黄色网址视频 | 骚碰97| 99热综合在线 | 真人特级毛片免费视频 | 九九九国产视频 | 97免费视频免费视频 | 2046影院视频大全在线观看 | 免费视频性 | 爱爱免费视频网站 | 天天操天天干天搞天天射 | 色综合色综合色综合色综合 | 妖精视频永久在线入口 | 免费黄视频网站 | 成人小视频免费观看 | 国产精品一区二区在线观看 | 久久精品夜色国产 | 国产一区二区三区视频 | 亚洲日本人成中文字幕 | 奇米777影视 | 国产精品无码久久av | 久久一| 天天天天天天干 | 中文字幕日韩精品一区口 |