<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-159  評論-114  文章-7  trackbacks-0

    Data retrieval
    -Select

    Data manipulation language (DML)
    -INSERT,UPDATE,DELETE

    Data definition language(DDL
    -CREATE,ALTER,DROP,RENAME,TRUNCATE

    Transacation control
    -COMMIT, ROLLBACK,SAVEPOINT

    Data control language(DCL)
    -GRANT,REVOKE

    使用SQL *Plus進行數據庫操作。

    openlab.tarena.ca% sqlplus tarena/tarena@TARENADB

    用戶名/密碼

    注意這樣登錄是強烈不推薦的,因為這樣別人能看到你的用戶名和密碼。

    SQL> !ps -ef|grep sqlplus
        lujl   966   955  0 08:43:17 pts/1    0:00 sqlplus tarena/tarena@TARENADB
        lujl   969   966  1 08:45:45 pts/1    0:00 /bin/csh -c ps -ef|grep sqlplus
        lujl   971   969  0 08:45:45 pts/1    0:00 grep sqlplus

    由于本人已有很多編寫SQL語句的經驗,所以只記錄重點信息。

    SQL中可以使用數學表達式

    +
    -
    *
    /

    先乘除后加減。

    SQL> select last_name,salary, 12*salary + 100
      2  from s_emp

    注意每一個子句最好單獨占一行。這樣以便以后的修改,要想寫完就執行,最后添加  ‘;’

    1。可以給列取別名 Aliase,
    2。可以級聯兩列,作為整體,輸出結果。

    SQL> select first_name||last_name "Employees"
      2  from s_emp;

    Employees
    ------------------------------
    benqu
    hui
    lgf
    liganfeng
    lgf
    BenDumas
    AntoinetteDumas


    使用單引號,將字符括起來。

    select first_name||' '||last_name
    from s_emp;

    NULL是一個不確定的值!

    對空的任何操作,返回都是空。

    使用nvl函數,處理空值,為空就使用默認值。

    NVL(salary,1000)

    select distinct name
    from s_dept;



    sqlplus有很多命令。


    SQL> help index

    Enter Help [topic] for help.

     @             COPY         PAUSE                    SHUTDOWN
     @@            DEFINE       PRINT                    SPOOL
     /             DEL          PROMPT                   SQLPLUS
     ACCEPT        DESCRIBE     QUIT                     START
     APPEND        DISCONNECT   RECOVER                  STARTUP
     ARCHIVE LOG   EDIT         REMARK                   STORE
     ATTRIBUTE     EXECUTE      REPFOOTER                TIMING
     BREAK         EXIT         REPHEADER                TTITLE
     BTITLE        GET          RESERVED WORDS (SQL)     UNDEFINE
     CHANGE        HELP         RESERVED WORDS (PL/SQL)  VARIABLE
     CLEAR         HOST         RUN                      WHENEVER OSERROR
     COLUMN        INPUT        SAVE                     WHENEVER SQLERROR
     COMPUTE       LIST         SET
     CONNECT       PASSWORD     SHOW


    DESCRIBE s_dept

    SQL> describe s_dept
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID                                        NOT NULL NUMBER(7)
     NAME                                      NOT NULL VARCHAR2(25)
     REGION_ID 

    NUMBER(p,s)p為整數位,s為小數位數
    VARCHAR2(s)
    DATE  (Oracle中只有一種日期格式!)
    CHAR(s)

    SQL Plus  提供了很強的編輯SQL語句的能力。

    SQL> l 
      1  select first_name||last_name "Employees"
      2* from s_emp
    SQL> 1
      1* select first_name||last_name "Employees"
    SQL>

    list(簡寫l)
    列出緩存中的SQL語句。

    1(數字)就是將當前編輯行

    看前面有*的,為當前編輯行,再才使用行編輯命令,就需要確定是否是想編輯的行。

    A[PPEND] text
    C[HANGE] /old/new
    CL[EAR]BUFF[ER]
    DEL
    I[NPUT] text
    L[IST] n
    n text

    由于有時會查出很多記錄,這時,需要分頁停頓。

    SET PAUSE {[OFF|ON] text}

    SAVE file寫緩存到文件
    GET file讀入緩存

    START filename讀文件到緩存,并執行。
    @filename = START filename
    EDIT filename
    SPOOL filename 開始記錄,并將執行的命令和結果都寫入相應文件。
    SPOOL OFF,這時會寫入文件。EXIT,正常退出,也會寫入文件。

    關鍵命令

    COL[UNM] [{column|alias} [option]]

    FOR[MAT] format

    9
    0
    $
    L
    .
    ,

    col last_name format a15   調整last_name為15字符長度,默認為last_name數據類型的長度。(VARCHAR2(35),那就是35),調整列寬。


    HEA[DING] text
    設置表頭

    JUS[TIFY] {align}
    left center right

    column last_name HEADING 'Employee|Name' FORMAT A15
    column salary JUSTIFY LEFT FORMAT $099,999,99    保證位數,$012,345,00
    column start_date FORMAT A8 NULL 'Not hired'    等同于nvl函數

    column last_name
    顯示某列的格式

    column last_name CLEAR





    select last_name
    from s_emp
    order by last_name;
    升序默認

    desc降序

    select last_name,salary*12
    from s_emp
    order by 2;

    按照select子句中的第二項 排序

    select last_name,dept_id,salary
    from s_emp
    order by dept_id,salary DESC;

    先按部門排序,如果相同,再按salary降序排。

    -------------------------------------------------
    where 子句,last_name='Megee',單引號!

    日期格式默認為日日-月月月-年年  DD-MON-RR(RR不同于YY,它只取1950到2049年的年,是為解決千年蟲問題設定的)

    邏輯比較符
    = > >= < <=

    SQL比較符
    BETWEEN...AND...
    IN(LIST)  IN(1,3) 1和3
    LIKE
    IS NULL

    邏輯操作符
    AND
    OR
    NOT

    不等于!= <> ^=

    NOT BETWEEN
    NOT IN
    NOTLIKE
    ISNOTNULL

    ===============================

    LIKE

    select last_name from s_emp where last_name like '_M%'

    '_' 代表有且只有一格字符

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

    這時,老師發現緩存不夠,察看老師的幾條命令,應用性很強哦。記下來,以后自己用!

    du -sk *|sort
    當前目錄按照大小的數字排序,

    df -k .
    察看當前目錄的文件系統使用情況。

    rm -rf *
    不提示刪除文件

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

    select table_name
    from user_tables
    where table_name like 'S\_%' ESCAPE '\';

    以S_開頭的表名,escape定義了轉義字符\


    IS NULL  

    IS NOT NULL

    不要 = null    不出錯,但是邏輯不對!

    執行順序

    比較操作符〉AND〉OR



    ==============================

    函數

    單行函數,輸入一個值,輸出一個值

    多行函數,多輸入,單輸出。

    LOWER('SQL Course')=sqlcourse

    UPPER

    INITCAP('SqL COurse')=SqL COurse

    CONCAT級聯

    SUBSTR('String',1,3)=Str

    LENGTH

    NVL


    ROUND(45.923,2)=45.92
    ROUND(45.923,-1)=50

    TRUNC(45.923,2)=45.92
    TRUNC(45.923,-1)=50

    MOD(1600,300)=100  余數

    ===========================================

    Oracle Date Format是重點

    日期包括世紀、年、月、日、小時、分鐘、秒幾類數

    Oracle時間可以保存10負9次方妙

    默認顯示日期格式為DD-MON-RR

    SYSDATE一個能返回當前系統時間的函數

    select sysdate from dual;

    dual是了保證select語句完整性,設置的,沒有實際意義。我認為是個測試函數的好幫手。

    YY   05
    YYYY   2005
    RR   05
    RRRR   2005
    YEAR   two thousand and five
    MM   12
    MON   NOV
    MONTH   NOVEMBER
    DD   18
    DDTH   18TH
    DDSP   EIGHTEEN
    DDSPTH   EIGHTEENTH
    HH   03   (12小時)
    HH24   15
    MI   31   分鐘
    SS   48   秒
    AM   PM
    D   5
    DY   FRI
    DAY   FRIDAY


    SQL> select to_char(sysdate,'yyyy mm ddhh miss')
      2  from dual;

    TO_CHAR(SYSDATE,'
    -----------------
    2005 11 1904 1946



    時期+/-數字,可以得到一個新的日期。(加在日子上)
    兩個日期相減,得到一個數字。
    如果想加小時到日期上,必須先除以24,在與對應日期相加。

      1  select to_char(sysdate+0.25,'yyyy mm dd hh miss')
      2* from dual

    當前時間+6小時的時間。

    日期相關函數

    MONTHS_BETWEEN('01-SEP-95','11-JAN-94')
    19.774194

    1  select ROUND(MONTHS_BETWEEN('01-SEP-95','11-JAN-94'))
      2* from dual
      3  ;

    20

    返回兩個日期之間的月差值。

    ADD_MONTHS('11-JAN-94',6)

    NEXT_DAY('01-SEP-95','FRIDAY')

    注意:下一個星期幾,但不一定下一周的星期幾,找到第一個為準。

    LAST_DAY('01-SEP-98')

    '30-SEP-98'

    ROUND('25-MAY-95','MONTH')
    01-JUN-95

    TRUNC('25-MAY-95','MONTH')
    01-MAY-95




    TO_CHAR(date,'fmt')

    fm是一個去除前置0或者空格的開關,fm....fm....

    fm作用域,是從當前到下一個fm之間的范圍。第二個fm后面表示不去除前置0,奇偶變。


    TO_CHAR(number,'fmt')

    9
    0
    $
    L
    .
    ,


    TO_NUMBER(char)

    char必須是一個‘數字’



    TO_DATE(char[,'fmt'])
    不給定日期轉換格式,就按照默認的dd-mon-rr,進行轉換。



    函數可以嵌套

      1  select last_name,
      2  NVL(TO_CHAR(MANAGER_ID),'No Manager')
      3  from s_emp
      4* where manager_id IS NULL




    Join方法

    等值
    非等值
    外連接
    自連接


    必須有連接鍵,否則就是迪卡爾連接。

      1  select s.last_name,s.dept_id,d.id,d.name
      2  from s_emp s,s_dept d
      3* where s.dept_id=d.id

    LAST_NAME          DEPT_ID         ID NAME
    --------------- ---------- ---------- -------------------------
    Dumas                   31         31 Sales
    Dumas                   32         32 Sales
    Dumas                   33         33 Sales
    payn                      34         34 Sales

    外連接是一種特殊的等值連接,用于有空值出現時,尋找到所有記錄。

      1  select s.last_name,s.id,c.sal,c.name
      2  from s_emp s,s_customer c
      3* where s.id(+) = c.sal

    LAST_NAME        ID        SAL      NAME
    --------------- ---------- ---------- -------------------------
    Dumas                   12         12         athletes attic
    Dumas                   12         12         great athletes
    Dumas                   12         12         bj athletics
    Dumas                   12         12         athletic for all
    Dumas                   12         12         sports,inc
                                              14         athletics two
                                              14         athletics one
                                              14         shhes for sports
                                              14         athletic attire
    那個+ 表示有一側可能沒有對應數據。

    表示有部分客戶沒有銷售代表。

    如果+ 在另外一側,表示查找所有銷售的客戶情況。




    posted on 2005-11-19 16:29 北國狼人的BloG 閱讀(681) 評論(0)  編輯  收藏 所屬分類: 達內學習總結
    主站蜘蛛池模板: 亚洲麻豆精品国偷自产在线91| 亚洲AV一区二区三区四区| 免费又黄又爽的视频| 在线免费观看亚洲| 国产福利电影一区二区三区,免费久久久久久久精 | 日本特黄特黄刺激大片免费| 免费人成在线观看网站品爱网| 黄页网站在线视频免费| 中文字幕在线观看亚洲视频| 亚洲视频在线一区| 亚洲精品无码久久久久去q| 免费v片视频在线观看视频| 性色av免费观看| 亚洲人成免费电影| 一级毛片在线免费看| 国产午夜无码精品免费看| 国产真人无码作爱免费视频| 一级做a爰片性色毛片免费网站 | 亚欧免费一级毛片| 水蜜桃视频在线观看免费播放高清 | 一个人免费日韩不卡视频| 男人天堂免费视频| 国产99久久久国产精免费| 免费无遮挡无码视频在线观看| 亚洲乱妇老熟女爽到高潮的片 | 午夜影院免费观看| 香港a毛片免费观看| 精品一区二区三区无码免费视频| 成人无码a级毛片免费| 国产成人无码区免费网站| 最近更新免费中文字幕大全| 皇色在线免费视频| 毛片基地看看成人免费| 羞羞视频免费网站在线看| 老司机精品免费视频| 两性色午夜视频免费网| 免费无码一区二区三区蜜桃 | 久久亚洲国产午夜精品理论片| 亚洲国产另类久久久精品黑人| 亚洲人成人一区二区三区| 亚洲精品高清国产一线久久|