<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)  編輯  收藏 所屬分類: 達內學習總結
    主站蜘蛛池模板: 亚洲&#228;v永久无码精品天堂久久 | 人妖系列免费网站观看| 亚洲一卡一卡二新区无人区| 亚洲精品视频免费在线观看| 亚洲视频在线观看网址| 麻豆亚洲AV永久无码精品久久| 亚洲国产精品免费视频| 亚洲综合精品一二三区在线| 亚洲AV无码码潮喷在线观看| 亚洲AV美女一区二区三区| 久久综合图区亚洲综合图区| 亚洲国产精品久久久久婷婷老年| 久久精品国产亚洲AV嫖农村妇女| 亚洲色图视频在线观看| 亚洲伊人精品综合在合线| 亚洲人成电影网站久久| 亚洲成熟丰满熟妇高潮XXXXX | 久久亚洲高清观看| 久久精品夜色国产亚洲av| 亚洲五月激情综合图片区| 91嫩草私人成人亚洲影院| 亚洲AV无码久久久久网站蜜桃| 亚洲人成网男女大片在线播放| 亚洲性无码AV中文字幕| 日韩色视频一区二区三区亚洲| 特级毛片爽www免费版| 人妻免费一区二区三区最新| 午夜影院免费观看| 无码精品A∨在线观看免费| 女人18特级一级毛片免费视频| 免费看国产一级片| 久久91亚洲人成电影网站| 78成人精品电影在线播放日韩精品电影一区亚洲 | 嫩草视频在线免费观看| 免费中文字幕一级毛片| 亚洲色精品aⅴ一区区三区| 亚洲精品视频在线观看视频| 亚洲区日韩精品中文字幕| 一本到卡二卡三卡免费高| 一区二区三区四区免费视频 | 亚洲毛片免费观看|