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

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

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

    posts - 9,  comments - 10,  trackbacks - 0

    一、什么是SQL語言?
     
       SQL是結構化查詢語言的縮寫(Structure Query Language),簡單的說,SQL是一種關系數據庫語言,它可以訪問以邏輯集的形式有序地儲存在數據庫的數據,這些邏輯集稱為表。實際上SQL是一種計算機編程語言,但它比傳統的編程語言,如,BASIC,FORTRAN等簡單的多。另外SQL是關系數據庫語言,了解了SQL也就理解了關系數據庫,因此在整個關系數據庫體系中SQL是最基礎、也是最重要的部分。

     其顯著的優點:

    1、 它是一種非過程化的交互式語言,它對數據的處理是以集合為單位的,即每次處理一個記錄集而不是每次處理一個單個記錄。SQL對數據提供導航,這意味著用戶在高層的數據結構上工作,而不必指定數據的存取方法。

    2、 SQL是一種所有用戶都可以使用的語言,這些用戶包括系統管員、數據庫管理員,程序開發人員,應用程序員及其它許多的終端用戶,SQL可在任何Oracle產品中使用,它可以用于數據庫的操作。如數據查詢、修改和刪除,對表進行插入、修改和刪除行。控制對數據庫和數據對象的存取,保證數據庫的一致性和完整性。

    3、 SQL是所有關系數據庫的公共語言。它是世界公認的標準的關系數據庫語言。用戶可方便地移植用SQL語言編寫的程序。ORACLE支持SQL語言的執行。ORALCE在標準SQL語言的基礎上新增加了許多功能,使的它功能更加強大,使用起來更加靈活。在以后的學習中,如不特殊說明,提到的SQL指ORALCE化的SQL

    1.1、 SQL與SQL*PLUS、PL/SQL幾個概念的區別
       SQL*PLUS:SQL*PLUS是ORACLE提供的一個用來處理ORACLE數據和生成報表的工具,主要實現二個功能
        A、 它提供給用戶與ORACLE交互式的界面,在此環境下可自由、靈活、 方便的實現ORACLE的SQL對關系數據的處理活動。
        B、 輸出格式化報表
       PL/SQL:從V6開始,ORACLE實現了一種過程處理語言,稱為PL/SQL,它具有與大多數其它程序設計語言相似的編程結構,它是在SQL的基礎上擴充形成的,可以理解為PL/SQL=SQL+過程控制、功能擴充語句。

     1.2、其它幾個需明確的常用術語
       ORACLE中的對象:
        是一個有意義的事務,可在其內部存放信息,我們常談到的對象類型中表和視圖是最常見的。
        函數:是施加于數據的操作,它改變數據的特性。
        提交:使用COMMIT語句將已修改的數據保存到數據庫中。在此之前對數據庫的數據修改只存在各自的緩存區內。COMMIT是將在緩存區中以修改的內容寫到數據庫文件中。
        回滾:ROLLBACK當為了某各個對話更改數據庫之后,由于某種原因不想提交此更改,ORALCE所采取的操作,這是一個把信息恢復到更改前的操作。
        保留字:被ORACLE使用的具有特殊含義的字符,不能用做變量名。
    1.3、SQL語言的組成
       1、數據定義語言  create,drop,alter
       2、數據查詢語言  select
       3、數據操作語言  update,insert,delete
       4、數據控制語言  grant,revoke(撤消權限)

    二、SQL語言的數據類型

        CHAR             存放定長字符數據          最長2000
        VARCHAR2        存放可變長字符數據        最長4000
        NUMBER(L,D) 存放數值數據,L代表總位數 D代表小數點后位數
        DATE             日期  范圍公元前4712年1月1日到公元后4712年12月31日
        NCHAR             與CHAR類似,只不過最大長度由數據庫使用的字符集決定
        BLOB              二進制大對象,最大長度4GB
        LONG              存放可變字符數據,最大為2GB
        RAW               純二進制對象,最大長度為2000字節
        VARCHAR          目前等同于CHAR
    一、字符型
        char和varchar2數據類型用來存儲字符、數據, 具有比二種類型的列可以存儲任何一個字符。由于Oracle的空格填充值(即在字符中尾問用空格填充時的空格值)只存儲在char列中,而不存varchar2列中,所以用varchar2存數要比用char存數占用的空間少,由于這個理由, 在含varchar2列的大表在進行全表掃描比在char列中存儲相同數據的表上, 進行全表掃描的數據塊較少,若應用程序經常需要在含字數大表中掃描時,應存在varchar2中而不存儲在char列中, 這樣可改善程序的性能。但在決定使用什么數據類型時,性能不是唯一決定的因素,例如,在比較字符串的值時,希望Oracle忽略掉尾部空格, 則必須把這些值存儲在char列中,因而選什么數據類型,應該關心應用程序關心的語義間的不同。
       1、char
         用來存儲固定長度的字符串,在建立具有char列的表時,必須說明該列長度(以字節為單位)。列的長度1-255間,default值為1。
    注意:如果指定的值比較短,則用空格填充該值固定長度,則Oracle返回一個錯誤信息。
       若兩個char型字符串比較大小時,若兩值長度不同,則在較短值中插入空格。 直到值有相同的長度。比較時,只有尾部空格數不同,其它部分相同的二個值被認為相等。
       2、varchar2
         存儲可變長度的字符串,建立具有varchar2列的表時,說明該列長度(以字節為單位)。最大長度1-2000之間,對每條記錄,該列的每一值都可作為可變長字段來存儲,例如,一個列被說明為varchar2數據類型,長度為50,若一條特定記錄中類varchar2列給出10個單字節,字符,則就在該列中存儲10個字符而不最50個。 兩個varchar(2)列比較值時,只須在二個值須相同的字符,且還有相同的長度時才認為相等。
       3、varchar
         目前與varchar2數據類型相同,但在Oracle未來版中,varchar數據類型可能會使用不同的比較語義,所以最好用varchar2數據類型。
    二、數字型
         即number用來存儲0,正負,定點數長正負浮點數。用number數據類型的數字(精度最多為38位十進制數)保證能在運行Oracle的不同系統中移值。存儲在number列中的數字范圍。
        說明數字列的方法:
        1)column_name number
        2)column_name number(精度,小數位數)若沒有指出小數的位數,則隱含為沒有小數,小數的位數范圍。-84<=x<=127。

    注意:若給出的小數位數是負數,則實際數被舍入到小數點左邊指定的位數,如,說明為(7,-2)就意味著舍入到最接近的百位數。
    三、日期型
         即date數據類型,用來存儲表中的日期和時間,存儲的內部有年(包括世紀)、月、日、時、分和秒。對應于世紀、年、月、日、分和秒。 輸入、輸出日期時,標準缺省格式,DD-MON-YY。
        如:’04-JAN-98’
        如果輸入一個不 當前缺省日期格式的日期,則用帶有格式掩碼的函數to_date。
        如,to_date(‘november,13,1992’,’month,dd,yyyy’)dd_mon_yy則yy表示20世紀中的年。
        例31-DEC-92表示1992.12.31。
        存儲時間格式(24小時):HH:MM:SS,若沒有輸時間,則日期字中時間取缺省值:12:00:00A.M,若沒有輸日期,只輸入了時間,則日期部分取缺省值為當月的第一天,為了輸入日期的時間部分,可以使用帶有指出時間部分的格式掩碼的函數to_date。如:
    insert into birthdays(bname,bday) values(‘annie’,to_date(‘13-nov-32 10:56am,’dd_mov_yy nn:m i am’);
        要比較一個含有時間數據的日期,而不希望比較,則可使用函數據trunc,SQL函數sysdate返回系統的時期和時間。
    四、long數據類型
       用long定義的列可以存儲可變長字符數據,最多特性相同,根據式作站的可用內存量可以限制long值的長度。
    long數據的使用:
       在數據字典中用long數類定義的列存儲定義視圖的稿文,可以在select,update語句中的set子句和insert語句的values子句中使用由long定義的列。
    long和logn raw數據的限制。
       long和long raw列有許多作用,但使用它們時有限制。
       1)每個表中只允許有一個long列。
       2)long列不能出現在完整性約束中。
       3)在子句where,order by,group by或connect by以及在select語句的distinct操作符中不能使用long列。
       4)在sql函數(如substr可insert)中不能引用long列。
       5)在子查詢的select中或有操作符union,onion all或minus的select中不能使用long列。
       6)sql的表達式中不能使用long列。
       7)用查詢創立表時(create table...as select)或用查詢插入一個表或視圖(insert into...select...)時不能引用long列。
       8)不能用long數據類型說明PL/SQL程序單元的變量。
       在設計包含有long或long raw數據的一些表時,把long或long raw列放入一個表中,與它們有關的數據放入另一個表中,然后用完整性約束把二個表連起來,這樣設計的結果就能使sql語句只訪有關的數據,避免去讀整個long或long raw數據,從而提高速度。例:為了存儲有關雜志的信息(包括每篇文本的稿文),可建兩個表。
    五、Raw和Long Raw數據類型。
       對Oracle不能解釋的數據,即在不同的系統間傳輸它們時不能被轉換的數據可以使用數據類型Raw和Long Raw。擴充這兩種數據開的目的是將它們用于二進制數和字節串。
       Raw相同于Varchar2而Long Raw相同于Long Varchar,但對Raw和Long Raw數據不進行字符集轉換,對于Char,Varchar2,Logn數據。
        Oracle會自動把它們從數據字符集轉換到通過參數Nls_Lang由用戶會話所定的字符集,這些就是它們的不同之處。
        Oracle在Raw(Logn Raw)數據與Char數據進行互相轉換時,把數據看成一個能表示成每4個二進制位為一個位圖的十六進制數。
        例如,輸入或顯示一個字節的Raw數據。
    ‘11001011’時,把它看作’cb’。
        Long Raw列不可被索引,Raw可以。
    六、空與不空(NULL 、NOT NULL)——另一類數據類型
         空(NULL)在PL*SQL代表另一類數據類型,它們表示缺少任何值換句話是沒有數據或是無信息。空值不同于零,很小的值,空白或其它任何數據,SQL*PLUS對NULL進行特殊處理。
       PL*SQL應用這一特殊數據類型是為了正確處理SQL*PLUS中的一些函數,如平均值的統計或找最大、最小值。
       空值(NULL)的使用:IS NULL 、IS NOT NULL

    三、SQL*Plus的工作環境

        SQL*Plus為用戶提供了很方便的界面環境,使得用戶可在SQL*Plus環境中輸入、編輯和運行SQL、SQL*Plus 命令和 PL/ SQL塊,也可隨時獲得幫助信息。
       3.1 SQL*Plus程序
          ORACLE_HOME\BIN\PLUS**w.EXE或PLUS**.EXE(區別:PLUS**.EXE  DOS環境下的PLUS)
          ORACLE_HOME:95工作站 ORAWIN95  NT服務器  ORANT 
          **代表版本號,常用的有PLUS33W.EXE、PLUS80W.EXE
       3.2 SQL*Plus的進入和退出
        1、 直接運行。EXE文件
        2、 菜單 程序|ORACLE FOR WIN95|SQL*PLUS
        3、 登錄  輸入:用戶、口令。
       登錄成功后,顯示成功登錄信息并出現SQL提示符  SQL>
        4、 退出  輸入:EXIT
       3.3 利用SQL緩沖區進行命令編輯和運行。
        1) 輸入SQL語句時可多行輸入,語句以‘;’作為結束時
        2) SQL*PLUS緩沖區:運行SQL*PLUS時,ORACLE在緩沖區保留最后執行的命令,在SQL提示符下,輸入斜杠“/”并輸入“ENTER”,這個操作可再次執行保留在緩沖區里的SQL語句。 利用系統文本編輯器,可以對緩沖區內容進行編輯,也稱全屏幕編輯。命令是:Edit
        3) 很多情況下,在輸入命令時會發現輸入錯誤,需要修改,這種情況下,使用SQL*PLUS命令行編輯器將使得輸入更容易些,它可以很快的修改SQL緩沖區內的SQL語句。
               提示:在使用LIST命令,可看到*號,有*號的行即可進行編輯的當前行。
                                          SQL*PLUS行編輯命令 

    編輯器命令

                   

    (a)ppend

    填加文本到當前行尾

    (c)hange/old/nes/

    在當前行以新的文本代替舊的文本

    (c)hange/text/

    從當前行刪除文本

    Del

    刪除當前行

    (i)nput text

    在當前行之后填加一行

    (L)ist

    顯示在緩沖區所有的行

    (L)ist N

    顯示緩沖區的第N


        4)SQL*PLUS提供的一個有用的命令describe 用desc(describe)命令顯示一個指定表的每一個列的定義。語法:DESC <TABLENAME>

    四、SQL語言的運算符
        算術 +、-、*、/、正、負。
        字符 ||(用于連接兩個字符串)例:'jack is'||'a boy'等操作。
        比較  > 、< 、=、 != (或)<>、 <=、 >=、IN、BETWEEN。。。AND、LIKE
        邏輯  not(邏輯非)、and(與)、or(或)。
        集合  union(并)、intersect(交)、minus(差)。

    五、創建練習用表
       5.1 CREATE 
       功能:在數據庫中定義一新表
       語法:CTEATE  TABLE  <TABLE_NAME>(
             <COLUMN_NAME  DATATYPE  NULL 說明>
             )
       例:CREATE TABLE DJ_NSRJB (
           NSRSBH  VARCHAR2(15) NOT NULL,
           NSRMC   VARCHAR2(80));
       分析:由四部分組成
        1、 CREATE  通知ORACLE 創建結構
        2、 TABLE    通知ORACLE創建對象的類型,這里指表
        3、<TABLE_NAME>  表名是唯一且合法的表名
        4、 COLUMNS 創建時需指出列名、數據類型及長度定義如有NULL說明,則在類型后做非空說明
       附:數據命名規則如下(適用于其它對象):
        1)長度在1-30個字符之間。
        2)首字符必需為字母(A-Z)。
        3)數據對象不能同已存在的名字沖突。
        A、 在數據庫中表名和視圖名必需唯一。
        B、   在同一張表中,列名必須是唯一。
        4)在命名中不可使用ORACLE的保留字。
       5.2   ALTER
       功能一:用來向已存在表中增加列
       語法:ALTER  TABLE  <TABLE_NAME>  ADD(<COLUMN_NAME  DATATYPE  NULL 說明>)
       例:ALTER TABLE DJ_NSRJB ADD(JLX  VARCHAR2(4),HY    VARCHAR2(4));
       分析:1)關鍵字 ALTER TABLE。
                    2) <TABLE_NAME> 所要修改的表名。
                    3)關鍵字 ADD 表明增加列
                    4)COLUMN定義略
       功能二:用來修改已存在表中的列 修改列的寬度、重新定義空值說明。
       語法:ALTER  TABLE  <TABLE_NAME>  MODIFY(<COLUMN_NAME  DATATYPE  NULL 說明>)
       例:ALTER TABLE DJ_NSRJB MODIFY(NSRSBH  VARCHAR2(15) NOT NULL);
               ALTER TABLE DJ_NSRJB MODIFY(NSRMC   VARCHAR2(120));
       分析:
             1)關鍵字 ALTER TABLE
             2)〈TABLE_NAME> 所要修改的表名
             3)關鍵字 MODIFY 表明修改列
             4)COLUMN定義略
    5.3、DROP 
       功能:從數據庫中刪除一個現存表。
       語法:DROP  TABLE  <TABLE_NAME>
       5.4、錄入練習用表中的數據
           INSERT
           語法:INSERT INTO 〈TABLENAME〉(COL1,COL2,CL3。。。)VALUES(VAL1,VAL2,VAL2。。。);
           分析:
        1)SQL關鍵字INSERT INTO 和VALUES
        2)變量〈TABLENAME〉必須是數據庫已存在的一個表,是準備插入數據的一個表。
        3)變量(COL1,COL2,COL3。。)指表中已存在的列
        4)值表(VAL1,VAL2,VAL2。。。)由SQL把表中每個值分配給它們相對應的列名插入數據必須在三個方面與它們的列定義相匹配數據類型必須相同。數據必須在它們特定的列大小要求范圍之內數值和列必須是一一對應的(第一個值與第一個列相對應,以此類推)
        提示:在向表中插入一行數據時,如果該表中定義了不為空的列,則在每一條插入語句都必須有該列的值。
        例:INSERT INTO DJ_NSRJB(NSRSBH,NSRMC,FGKS,FGR)VALUES(‘14020010010001’,‘通達器材’,‘ZG’,HYK’);
           語法二:INSERT INTO  表名1 (列1,列2,。。。) 查詢語句
          分析:一次插入多行數據
        例:INSERT INTO DJ_NSRJB (NSRSBH,NSRMC) SELECT NSRSBH,NSRMC FROM DJ_NSRJBBAK;比較單行插入,用SELECT語句的值代替VALUES子句。
    練習

         1、創建第一個練習表dj_nsrjb   納稅人基本信息
             NSRSBH    VARCHAR2(15)   --納稅人識別號
             NSRMC    VARCHAR2(80)    --納稅人名稱
             FGKS      VARCHAR2(4)      --分管科室
             FGR       VARCHAR2(5)      --分管人
             JJLX      VARCHAR2(3)       --經濟類型(注冊類型)
             ZZSNSLX  VARCHAR2(1)      --增值稅納稅類型
         2、向表中增加下面的列
             HY       VARCHAR2(2)      --行業
             BZRQ     DATE             --辦證日期
          3、修改表中字段NSRMC到120位長度,同時加NSRSBH約束不能為空。
          4、 修改表中字段ZZSNSLX增加缺省值‘0’  小規模
          5、 創建第二個練習用表ZSJB
          6、 插入練習數據

    六、數據查詢語句SELECT

        功能:SELECT命令用于從ORACLE數據庫中檢索數據。
        語法:SELECT 〈列名〉FROM 〈表名〉WHERE〈條件〉ORDER BY 〈列名〉
        分析:SELECT (什么?) 子句,體現用戶檢索的信息,表中一個或多個列的名字。如果選擇多個列,列名之間必須用逗號分隔開,但最后的列名后面沒有逗號,即與FROM相臨的列名之間沒有逗號。(必須)    FROM(哪里?)子句,正確的表名(必須)WHERE〈條件〉子句,后面跟條件ORDER BY(排序)子句,排序列
        提示:查看所有的列時,SELECT 語句使用SELECT *
        6.1 簡單查詢,只有必須的查詢子句
        1、 查詢表中部分字段的值。
           例:SELECT NSRSBH,NSRMC FROM DJ_NSRJB;
        2、 查詢表中的所有字段的值。
           例:SELECT * FROM DJ_NSRJB;
        3、 消除冗余行的查詢
           例:SELECT  DISTINCT NSRSBH  FROM  ZS_JB; /*有幾戶申報*/
           例:SELECT  DISTINCT JJLX  FROM  DJ_NSRJB; /*DJ_NSRJB表中有幾種注冊類型的納稅戶*/
        4、 用被選擇列的別名來指定顯示選擇結果時的列名
           例:SELECT NSRMC ‘MC‘  FROM  DJ_NSRJB;在顯示結果時用MC代替NSRMC
        5、 虛表DUAL的使用(選學內容)
           DUAL用于測試函數或完成快速計算,是一個小而有用的ORACLE表,ORACLE只為其提供一行一列的內容。
    SQL〉DESC DUAL;
          DUMMY     CHAR(1)
          DUAL的作用:在ORACLE的許多函數即可以用于列也可以用于常量,通過DAUL可以發現某些函數只能用于常量,在下面的列子中SELECT語句沒有指明是表中的哪一行,哪一列。
          例:計算POWRE(4,3)  即4的3次方
    SQL〉SELECT  POWRE(4,3)FROM DUAL;
         結果顯示:64
        提示:也可以把DUAL表理解成是一塊隨時可用內存。
        6.2 條件查詢
          比較運算符
          單值測試
               YBSE 〉1000          應補稅額大于1000
               YBSE 〈1000          應補稅額小于1000
               YBSE 〉= 1000         應補稅額大于等于1000
               YBSE 〈=1000         應補稅額小于等于1000
               YBSE 〈〉1000        應補稅額不等于1000
               YBSE !=1000         應補稅額不等于1000
          值列表測試(對多值測試)
          應補稅額在400和1500之間的包括400和1500
           YBSE BETWEEN 400 AND 1500
          應補稅額小于400和大于1500
           YBSE  NOT BETWEEN 400 AND 1500
          稅種在列表(‘01‘,’02‘,’03‘)中
           SZ  IN (‘01‘,’02‘,‘03)
          稅種不在列表(‘01‘,’02‘,’03‘)中
           SZ  NOT  IN (‘01‘,’02‘,‘03)
         提示:
         YBSE BETWEEN  400 AND 1500  等價于  YBSE〉= 400 AND YBSE〈=1500  SZ  IN (‘01‘,’02‘,‘03)等價于 SZ=’01‘ OR SZ=’02‘ OR SZ=’03‘  
         LIKE模式匹配
          SQL*PLUS通配符_(下劃線)  表示任意一字符
          %(百分號)表示一個不確定的串
        語法: LIKE  ‘查找串’
        分析:查找串可以是字母、數字、特殊字符和SQL*PLUS通配符----百分號(%)和下劃線(_)的組合。百分號代表“零或任意多個字”。下劃線代表“列特定位置上的任意一個字符”----- 一個且僅一個字符。除了通配符外,查找串中所有其它字符只能表示自身,查找串放在單引號內。通過NOT和LIKE的結合使用,可以查找列值不在查找串中的行。例:  NSRMC LIKE ‘%計算機%‘       納稅人名稱包括計算機的   NSRMC LIKE ‘計算機%‘         納稅人名稱以計算機開頭    NSRMC LIKE  NOT ‘%計算機‘   納稅人名稱不以計算機結尾  NSRMC LIKE ‘_計%‘            納稅人名稱第二個字是‘計’字的 
          WHERE (條件)子句
           WHERE 子句:后面跟條件,條件是由一個列名,比較操作符和比較值組成。
          例:NSRSBH = ‘1343423’    納稅人識別號等于
          YBSE>1500            應補稅額大于20
          由多個條件組成復合條件,條件之間用AND 、OR組合。
          例:NSRSBH= ‘1343423’  AND YBSE〉1500 
              納稅人識別號等于‘1343423’ 而且應補稅額大于1500 
              SBRQ BETWEEN ‘01-JAN-99’ AND ‘31-JAN-99’ AND YBSE〉1500    一月份申報的而且應補稅額大于1500
              SZ  IN  (‘01’,‘02,’03)  AND JJLX=‘110’     稅種是增值稅、消費稅、營業稅而且注冊類型是國有企業的
              NSRMC LIKE ‘計算機%‘  OR  JJLX=‘110’     納稅人名稱以計算機開頭或注冊類型是國有企業的
        6.3排序結果表:ORDER BY
        通過在SELECT語句中增加一個ORDER BY排序子句可以控制輸出的顯示順序。ORDER BY按照所要求的列值條件把結果表中的行進行排序,也可以對多個列中的行進行排序,列名用逗號分開。
         ORDER BY 〈列名〉ASC(默認)    升序方式排序
         ORDER BY 〈列名〉DESC                    降序方式排序
         多列排序ORDER BY 〈COLUMN1〉,〈COLUMN2 DESC〉,〈COLUMN3〉,。。。。。
         排序規則:較高:字母
                   高:  數字(按代數值大小)
                   NULL最低(大型機系統中,NULL最高)
         例:ORDER BY  SZ,NSRSBH,YBSE DESC     先按稅種,納稅人識別號,再按應補額從大到小。
        6.4 學會使用五個組值函數(行函數)
         SQL是一個非過程數據訪問語言,它沒有IF -THEN –ELSE結構,也沒有直接存儲和操作臨時值的機制,僅僅利用標準的SELECT- FROM –WHERE操作,它不能完成像在列中求最大、最小等一些典型的數據分析工作,SQL開發人員意識到這一點,因此該用戶提供了五個組值函數:
        AVG          計算列的平均值
        SUM         計算列的總合
        MIN          顯示列的最小值 
        MAX        顯示列的最大值
        COUNT    統計結果表中的行數
        語法:FUNCTION(列名或單值表達式)
        提示:
        1、 需要處理的列名必須在括號之間 函數(列名)
        2、 如果使用一個函數,SELECT子句中的所有列都必須帶有函數(使用GROUP BY 時例外)
        3、 對于算術表達式可以使用函數
        4、 對列中包含有NULL值時,大多數函數將忽略該值。
        詳解
        AVG
        語法:AVG(列名)或AVG(DISTINCT(列名))
        提示:AVG只能處理數字類型列AVG忽略所處理列中的有NULL值的行 如列名前加上DISTINCT關鍵字,對于列中重復的值只處理一次NULL值示例
        1,2,3,4,NULL        結果:2。5
        1,2,3,4,0 結果:2
        例:SELECT  AVG(YBSE) FROM  ZS_JB  WHERE  ZZSNSLX=‘2’;    一般納稅人平均應補稅額。
        MAX  
        語法:MAX(列名)
        提示:MAX可對所有數據類型進行操作
          當列為字符類型時,返回按ASCII排序的最大值
          當列為數值類型時,返回最大代數值
          當列為日期類型時,返回列中最大的日期值
          AVG忽略所處理列中的有NULL值的行
        例:SELECT  MAX(YBSE) FROM  ZS_JB  WHERE  ZZSNSLX=‘2’ AND SZ=‘01’;    一般納稅人增值稅最大的應補稅額。
        MIN(略)
        SUM
        語法:SUM(列名)
        提示:SUM只能處理數字類型列
          SUM忽略所處理列中的有NULL值的行
          如列名前加上DISTINCT關鍵字,對于列中重復的值只處理一次
        例:SELECT  SUM(SBSE) FROM  ZS_JB  WHERE  HZLXHRQ BETWEEN ‘01-JAN-99’ AND ‘31-JAN-99’;    一月份的入庫稅額。
        COUNT
        1、 返回一個表示結果表行數的整數
        SELECT COUTN(*)
        因為COUNT(*)在行一級上工作,因此有NULL域的行也統計在內
        例:SELECT COUNT(*) FROM  DJ_NSRJB  WHERE JJLX=‘110’;    國有企業的納稅戶登記戶數。
        2、 返回列中具有不同的值的個數
        SELECT COUNT(DISTINCT(列名))   因為它是在列一級工作。因此它將不統計NULL域
        例:SELECT COUNT(DISTINCT(JJLX)) FROM  DJ_NSRJB;  現有登記戶數共有幾種注冊類型。
        6.5 學會使用列值函數(列函數)
        函數:SQL語言提供了許多可以直接調用的函數。
        一、字符函數。 
        1、LPAD
        格式:LPAD(char1,n[char2])
        功能:在char1的左邊加上char2的字符序列,直到新的字符串長為n。
        例: LPAD('A',4,'0')='000A'
        2、RPAD
        格式:RPAD(char1,n[char2])
        功能:在char1的右邊加上char2的字符序列,直到新的字符串長為n。
        例: RPAD('a',4,'0')='A000'
        3、SUBSTR
        格式: SUBSTR(char,m[,n])
        功能:從char的第m個字符開始取n個字符。
        4、LTRIM
        格式:LTRIM(char [,set])
        功能:從char的左邊移去屬于set字符集中的字母,直到第一個不屬于set中的字符為止。set 缺省為空格。
        例:LTRIM('aac','a')='c';
        LTRIM('       c')='c';
        5、RTRIM
        格式:RTRIM(char [,set])
        功能:從char的右邊移去屬于set字符集中的字母,直到第一個不屬于set中的字符為止。
        6、LENGTH
        格式:LENGTH(char)
        功能:返回字符串char的長度。
        二、日期函數
        1、ADD_MONTHS
        格式:ADD_MONTHS(d,n);
        功能:d日期加n個月返回的日期。
        2、LAST_DAY
        格式:LAST_DAY(d);
        功能:包含日期d的月份的最后一天。
        3、MONTHS_BETWEEN
        格式:MONTHS_BETWEEN(d1,d2)
        功能:返回d1與d2之間含有多少個月。
        三、數值函數
        1、CELL
        格式:CELL(n)
        功能:返回大于或等于n的最大整數。
        例:CELL(4.5)=5
        2、FLOOR
        格式:FLOOR(n)
        功能:返回小于或等于n的最大整數。
        例:FLOOR(-3.1)=-4
        3、ROUND
        格式:ROUND(n [,m])
        功能:返回將n舍入到小數點右邊m位的值。
        例:ROUND(8.99,1)=9
        4、TRUNC
        格式:TRUNC(n[,m]
        功能:返回在m位截斷的n值,當m省略時,在0位截斷,m為頁數,小數點左邊m個數字截去。
        例:TRUNC(8.99,1)=8.9
        5、TO_CHAR
        格式:TO_CHAR(n[,fmt])
            TO_CHAR(d[,fmt])
          fmt:'Mon.dd.yyyy'
          'Day.month.dd'
          'YYYY,MM,DD'
        功能:按照fmt格式將日期型轉換成varchar2型。
        6、TO_DATE
        格式:TO_DATE(char[,fmt])
        功能:按照fmt指定的日期格式將char由char型轉換成日期型。
        7、TO_NUMBER
        格式:TO_NUMBER[char[,fmt])
        功能:將char由char型轉換成數值型。
        四、空值替換函數 NVL
        格式:NVL(expr1,expr2)
        功能:若expr1為空則返expr2;若expr1不為空則返expr2.
        五、譯碼函數DECODE(選學內容)
        DECODE函數是ORACLER的SQL中功能最強的函數之一。
        格式:Decode(value,if1,then1,if2,then2,...,else)
        Value代表了表中的任意列(不論何種數據類型)或一個計算所得的任何結果,如一個日期減去另一個日期,字符列的SUBSTR函數,一個數字乘以另一個數字,等等。每一行的value均被測試。如果value等于if1,DECODE函數的結果是then1,如果value等于if2,DECODE函數的結果是then2,等等,事實上可以構造盡可能多的if/then配對。如果value不等于任何一個if值,那么DECODE函數的結果是else。每一個if和then以及else還可以是一列或者是函數或計算式的結果。 
        例:Decode(page,'1','page1','2','page2','turn to 11page') 
        6.6 學會如何解決實際問題(綜合練習一)

    七、數據操縱語句
        數據操縱語句執行后必須執行撤消或提交。
        撤消由 rollback 命令執行,提交由 commit 命令執行
        插入、修改、刪除數據:insert、update、delete。
        一、 插入:INSERT(略)
        二、 刪除:DELETE
        例:delete from bonus;
                delete from bonus where ename='SMITH';
        注意:1)刪除依賴于WHERE條件所指定的范圍。
                     2) 一次只能對一個表執行刪除操作。
                     3) DELETE并不刪除表(使用DROP刪除表)。
                     4) 同INSERT一樣,DELETE也能引起引用完整性問題。截斷可以快速刪除表中所有數據,不執行行級觸發器。

                         TRUNCATE table new_dept;
        三、修改:UPDATE
        例: update bonus set comm=comm+50 where sal>2000;
        用嵌入的select語句可以修改多列。
          update bonus set(hiredate,sal)=(select hiredate,sal from emp where ename=‘SMITH’ );
        用定值修改:
          update bonus set  comm=null;
    注意:insert,update,delete的主要問題是,仔細地構造where子句,使它們只影響你真正想要的行,在你提交之前,一定要仔細小心,以免操作錯誤。同時看看結果,執行了多少行,是否是你想要的行數(rows)。


    posted on 2007-06-15 09:47 老董 閱讀(4008) 評論(4)  編輯  收藏 所屬分類: Oracle

    FeedBack:
    # re: SQL語言教程
    2007-06-15 09:50 | 戀戀冬季
    期待舉例說明......  回復  更多評論
      
    # re: SQL語言教程
    2007-06-15 09:55 | 老董
    別急,to be continue....  回復  更多評論
      
    # re: SQL語言教程
    2007-06-28 16:19 | 你好
    支持,很不錯的哦,
    也歡迎到我博客作客:
    笑一笑,十年少。
    http://hexun.com/klf118/default.html   回復  更多評論
      
    # re: SQL語言教程
    2007-07-30 15:39 | 緣木求魚
    update bonus set(hiredate,sal)=(select hiredate,sal from emp where ename=‘SMITH’ );
    這句是錯的吧
    update不支持這種格式,要修改多列只能一列一列的賦值  回復  更多評論
      
    <2007年6月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    常用鏈接

    留言簿(1)

    隨筆分類(9)

    隨筆檔案(9)

    文章分類(3)

    文章檔案(3)

    友情鏈接

    • 戀戀冬季
    • 一個很值得收藏的關于軟件測試方面的blog

    搜索

    •  

    積分與排名

    • 積分 - 12712
    • 排名 - 2168

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲狠狠狠一区二区三区| 国产成人毛片亚洲精品| 亚洲综合自拍成人| 好男人资源在线WWW免费| 亚洲国产日韩成人综合天堂 | 在线观看亚洲免费| 亚洲熟妇AV乱码在线观看| 性一交一乱一视频免费看| 午夜在线a亚洲v天堂网2019| 特级做A爰片毛片免费69| 亚洲kkk4444在线观看| 嫩草影院免费观看| 视频免费1区二区三区| 亚洲综合久久1区2区3区| 91精品国产免费入口| 精品亚洲aⅴ在线观看| 一个人在线观看视频免费| 亚洲小说图区综合在线| 国产91久久久久久久免费| 精品免费久久久久国产一区 | 一个人免费视频观看在线www| 亚洲国产精品无码久久SM| 久热中文字幕在线精品免费| 亚洲一区二区三区在线观看蜜桃 | 97免费人妻无码视频| 亚洲 欧洲 视频 伦小说| 亚洲精品97久久中文字幕无码| 中文在线日本免费永久18近| 亚洲精品中文字幕无乱码| 免费看国产精品3a黄的视频| 成年网在线观看免费观看网址 | 亚洲毛片一级带毛片基地| 午夜免费福利在线| 中文字幕在线免费视频| 亚洲天堂福利视频| 亚洲伊人成无码综合网| 国产成人精品免费视| 日本视频免费观看| 亚洲理论片在线观看| 免费h黄肉动漫在线观看 | 成人超污免费网站在线看|