隨筆-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中只有一種日期格式?。?BR>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 閱讀(683) 評論(0)  編輯  收藏 所屬分類: 達內學習總結
          主站蜘蛛池模板: 祁阳县| 宝鸡市| 禄劝| 巴中市| 绥化市| 本溪| 芜湖市| 古交市| 清河县| 迁西县| 景泰县| 布尔津县| 金平| 巴青县| 福贡县| 那坡县| 黔西| 大足县| 如皋市| 呼和浩特市| 靖宇县| 乳源| 蒙山县| 霍州市| 古交市| 平舆县| 万荣县| 天长市| 阜平县| 集安市| 十堰市| 安阳市| 共和县| 孙吴县| 颍上县| 无极县| 三河市| 彝良县| 贺州市| 金寨县| 淳安县|