<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是結(jié)構(gòu)化查詢語言的縮寫(Structure Query Language),簡單的說,SQL是一種關(guān)系數(shù)據(jù)庫語言,它可以訪問以邏輯集的形式有序地儲存在數(shù)據(jù)庫的數(shù)據(jù),這些邏輯集稱為表。實(shí)際上SQL是一種計算機(jī)編程語言,但它比傳統(tǒng)的編程語言,如,BASIC,F(xiàn)ORTRAN等簡單的多。另外SQL是關(guān)系數(shù)據(jù)庫語言,了解了SQL也就理解了關(guān)系數(shù)據(jù)庫,因此在整個關(guān)系數(shù)據(jù)庫體系中SQL是最基礎(chǔ)、也是最重要的部分。

     其顯著的優(yōu)點(diǎn):

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

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

    3、 SQL是所有關(guān)系數(shù)據(jù)庫的公共語言。它是世界公認(rèn)的標(biāo)準(zhǔn)的關(guān)系數(shù)據(jù)庫語言。用戶可方便地移植用SQL語言編寫的程序。ORACLE支持SQL語言的執(zhí)行。ORALCE在標(biāo)準(zhǔn)SQL語言的基礎(chǔ)上新增加了許多功能,使的它功能更加強(qiáng)大,使用起來更加靈活。在以后的學(xué)習(xí)中,如不特殊說明,提到的SQL指ORALCE化的SQL

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

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

    二、SQL語言的數(shù)據(jù)類型

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

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

    三、SQL*Plus的工作環(huán)境

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

    編輯器命令

                   

    (a)ppend

    填加文本到當(dāng)前行尾

    (c)hange/old/nes/

    在當(dāng)前行以新的文本代替舊的文本

    (c)hange/text/

    從當(dāng)前行刪除文本

    Del

    刪除當(dāng)前行

    (i)nput text

    在當(dāng)前行之后填加一行

    (L)ist

    顯示在緩沖區(qū)所有的行

    (L)ist N

    顯示緩沖區(qū)的第N


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

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

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

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

    六、數(shù)據(jù)查詢語句SELECT

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

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

                         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的主要問題是,仔細(xì)地構(gòu)造where子句,使它們只影響你真正想要的行,在你提交之前,一定要仔細(xì)小心,以免操作錯誤。同時看看結(jié)果,執(zhí)行了多少行,是否是你想要的行數(shù)(rows)。


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

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

    常用鏈接

    留言簿(1)

    隨筆分類(9)

    隨筆檔案(9)

    文章分類(3)

    文章檔案(3)

    友情鏈接

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

    搜索

    •  

    積分與排名

    • 積分 - 12701
    • 排名 - 2168

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲中文字幕乱码AV波多JI| 永久免费无码网站在线观看个| 在线观看人成视频免费| 青草青草视频2免费观看| 亚洲成AV人片一区二区| 免费观看黄网站在线播放| 免费看内射乌克兰女| 久久精品亚洲中文字幕无码麻豆 | 免费观看毛片视频| 一区二区三区在线免费观看视频| 亚洲视频在线观看免费| 国产高清免费在线| 91福利免费视频| 免费毛片毛片网址| 亚洲fuli在线观看| 亚洲午夜久久久久妓女影院 | 性色av免费观看| 中国国语毛片免费观看视频| 亚洲va久久久久| 亚洲va久久久噜噜噜久久男同| 免费看大黄高清网站视频在线| 免费毛片a线观看| 思思久久99热免费精品6| 亚洲精品亚洲人成在线观看麻豆| 国产精品亚洲视频| 在线成人a毛片免费播放| 久久国产精品成人片免费| 一日本道a高清免费播放| 亚洲午夜理论片在线观看| 亚洲AV日韩精品久久久久| 亚洲福利精品电影在线观看| 97在线线免费观看视频在线观看| 黄网站免费在线观看| 特级毛片免费观看视频| 亚洲av永久无码| 91亚洲精品麻豆| 亚洲黄色免费在线观看| 日本亚洲成高清一区二区三区| 啊灬啊灬别停啊灬用力啊免费看| 两性刺激生活片免费视频| 最近中文字幕mv免费高清视频8|