Oracle學習筆記(二)

本筆記中包含了單行函數和多表查詢的內容。

一、單行函數

特點:操作數據對象,接受參數返回一個結果,只對一行進行變換,每行返回一個結果

          可以轉換數據類型,可以嵌套參數,可以是一列或一個值

主要分爲五個類比:字符函數、數字函數、日期函數、轉換函數、通用函數

1)字符函數

    —大小寫控制函數

        UPPER(字符串 | 列):將輸入的字符串變爲大寫返回;

        LOWER(字符串 | 列):將輸入的字符串變爲小寫返回;

        INITCAP(字符串 | 列):開頭首字母大寫;

    eg:Select column_1,  column_name

            From table_1

            Where  Lower(column_name) = 'test_name';

    —字符控制函

        LENGTH(字符串 | 列):求出字符串的長度;

        REPLACE(字符串 | 列):進行替換;

        SUBSTR(字符串 | 列,開始點 [,結束點]):字符串截取;

        當使用SUBSTR時,一般有兩種語法:

        語法一:SUBSTR(字符串 | 列,開始點),表示從開始點一直截取到結尾,當設置開始點爲負數時,表示從後開始;

        語法二:SUBSTR(字符串 | 列,開始點,結束點),表示從開始點截取到結束點,截取部分內容;

2)數字函數

    ROUND(數字 | 列 [,保留小數的位數]):四捨五入的操作;

        eg:    ROUND(45.926, 2)   ->  45.93,   ROUND(45.926, 0)   ->  46,   ROUND(45.926, -1)   ->  50

    TRUNC(數字 | 列 [,保留小數的位數]):捨棄指定位置的內容;

        eg:    TRUNC(45.926, 2)  ->  45.92,  TRUNC(45.926)   ->  45,   TRUNC(45.926, -1)   ->  40

    MOD(數字 1,數字2):取模,取餘數;

        eg:    MOD(10,3)  ->  1

3)日期函數

    MONTHS_BETWEEN(日期1,日期2):求出兩個日期之間所經歷的月份;

    NEXT_DAY(日期,星期數):求出下一個指定星期X的日期;

4)轉換函數

    TO_CHAR(字符串 | 列,格式字符串):將日期或者是數字變爲字符串顯示;

        eg:……where to_char(xxx_date,'yyy-mm-dd') = '1997-06-15'

            Select to_char(column_1,'L999,999.00') column_1    From ……

    TO_DATE(字符串,格式字符串):將字符串變爲DATE數據顯示;

        eg: Select to_date(xxx_str,'yyyy-mm-dd')  From ……

            Select to

    TO_NUMBER(字符串):將字符串變爲數字顯示——基本上不用了

5)通用函數

    通用函數主要有兩個:NVL()、DECODE(),這兩個函數算是Oracle自己的特色函數了;

        NVL(),將空值轉換成一個已知的值,可以使用的數據類型有日期、字符、數字。函數的一般形式:
        NVL(commission_pct,0)
        NVL(date_x,'01-JAN-97')
        NVL(id_x,'No Job Yet')

    NVL2 (expr1, expr2, expr3) : expr1不爲NULL,返回expr2;爲NULL,返回expr3。

    DECODE(數值 | 列 ,判斷值1,顯示值1,判斷值2,顯示值2,判斷值3,顯示值3,…)

    DECODE()函數非常類似於程序中的if…else…語句,唯一不同的是DECODE()函數判斷的是數值,而不是邏輯條件。

        eg:Select column_1 Decode(column_2, expr1, value1, expr2, value2 ……) From ……

二、多表查詢

    查詢的基本語法是:

        Select [Distinct]  * | 字段[別名]  [,字段 [別名], ……]

        From 表名 [別名],[表名[別名],……]

        [Where 條件[s]]

        [Order By 排序字段 [ASC|DESC]  [, 排序字段 [ASC|DESC], ……]]

    在進行多表查詢的時候,若1)省略連接條件,    2)連接條件無效,    3)所有表中的所有行互相連接,將會產生笛卡爾積,

    爲了避免笛卡爾集, 可以在 WHERE 加入有效的連接條件。

    1)等值連接——查詢的表之間存在相等的關係

    eg:Select tab1.column_1,  tab1.column_2,……,  tab2.conlmn_1,  tab2.column_2, ……

          From table_1 tab1, table_2 tab2

          Where tab1.column_x = tab2.column_y   AND  ……

    2)非等值連接——查詢的表之間存在某種不相等的特定聯繫

    eg:Select tab1.column_1,  tab1.column_2,……,  tab2.conlmn_1,  tab2.column_2, ……

          From table_1 tab1, table_2 tab2

          Where tab1.column_z  Between  tab1.column_x And tab2.column_y AND ……

    3)自連接——在查詢的時候,使用該表自身與自身進行對比

    eg:Select tab1.column_1,  tab1.column_2,……,  tab2.conlmn_1,  tab2.column_2, ……

          From table_1 tab1, table_1 tab2

          Where tab1.column_x = tab2.column_y   AND  ……

    4)內連接——合併具有同一列的兩個以上的表的行, 結果集中只包含一個表與另一個表匹配的行

    5)外連接——除了返回滿足連接條件的行以外還返回左(或右)表中不滿足條件的行 ,即稱爲左(或右) 外連接。

                         左、右連接指的是查詢判斷條件的參考方向

                         沒有匹配的行時, 結果表中相應的列爲空(NULL). 外連接的 WHERE 子句條件類似於內部連接, 

                         但連接條件中沒有匹配行的表的列後面要加外連接運算符, 即用圓括號括起來的加號(+).

                         (+)=:放在了等號的左邊,表示的是右連接; =(+):放在了等號的右邊,表示的是左連接;

                         注意:這種符號是Oracle數據庫自己所獨有的,其他數據庫不能使用。

    6)SQL:1999語法

    標準格式:Select tab1.column_1, ……, tab2.column_1

                     From table1 tab1

                     [Cross Join table2 tab2] | [Natural Jion ] |

                     [Jion table2 tab2 Using(column_x)] | 

                     [Left | Right | Full Outer Join table2 tab2 On (tab1.column_x = tab2.column_y)]

        交叉連接(Cross Jion):用於產生笛卡爾積

        自然連接(Natural Jion):自動找到匹配的關聯字段,消除笛卡爾積

        Jion……Using:用戶指定一個消除笛卡爾積的關聯字段

        Join……On:用戶自己指定一個消除笛卡爾積的關聯條件

        改變連接方向:

        左(外)連接:Left Outer Join …… On

        右(外)連接:Right Outer Join …… On

        全(外)連接:Full Outer Join …… On    --->  將兩張表中沒有的數據都顯示


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章