posts - 8, comments - 0, trackbacks - 0, articles - 11

          Oracle sql 寫法

          Posted on 2012-09-12 12:57 a_alter 閱讀(226) 評論(0)  編輯  收藏 所屬分類: 數據庫
          本文用途:因為暫時沒有時間去具體看oracle sql的官方文檔 ,紀錄oracle的一些特殊寫法。 (不斷更新)
          1. with ...  as ...
          with querya as (select * from TB_Test)
          2  case .. (when .. then) .... (when ..  then) .. else ... end
              SELECT FO_FULFILL_TRX_STRING.SEQUENCE_NO, AC_TYPE_ORDER.CODE, CASE
              WHEN AC_TYPE_ORDER.CODE = 'SO'
              THEN ( SELECT ORDER_NUMBER FROM SO_ORDER WHERE SO_ORDER.AID = FO_FULFILL_TRX_STRING.AID_ORDER_SO )
              ELSE ( SELECT ORDER_NUMBER FROM PO_ORDER WHERE PO_ORDER.AID = FO_FULFILL_TRX_STRING.AID_ORDER_PO )
              END ORDER_NUMBER
              FROM FO_FULFILL_TRX_STRING, AC_TYPE_ORDER.CODE
          ------------------------------------------------------------------------------------------------------------------------------
          MYSQL 正則支持
          select * from tb_rule_list where expression regexp '^.*\\$\\{0}\\[3].*$';
          Oracle  正則函數支持
          ORACLE中的支持正則表達式的函數主要有
              REGEXP_LIKE :與LIKE的功能相似
              REGEXP_INSTR :與INSTR的功能相似
              REGEXP_SUBSTR :與SUBSTR的功能相似
              REGEXP_REPLACE :與REPLACE的功能相
           
          ------------------------------------------------------------------------------------------------------------------------------
          在MYSQL 中 select 可以顯示 不是group by 中的分組字段, 可以是任意的數據列,具體數據顯示的是分組后的第一行數據
          在ORACLE中 select 是嚴格的 只能顯示group by 中的字段。
          同樣效果的兩行sql --- 讓自己注意提高自己的使用靈活性
          1. select a.aid AAid,nvl(b.cot,0) countline from po_draft_order a,(select AID_DRAFT_ORDER_PO BAID,count(*) cot from  po_draft_line group by AID_DRAFT_ORDER_PO) b WHERE A.AID = B.BAID(+);
          2. select a.aid, (select count(*) from po_draft_line where AID_DRAFT_ORDER_PO = a.aid ) c from po_draft_order a;
          -------------------------------------------------------------------------------------------------------------------------------
          oracle 分級
          rank()/dense_rank()  over(partition by ... order by ...)  加強對分組排序之后的數據的控制力。
          over:  over(...)
          partition by :  相當于group by
          order by e.sal desc:  按工資從高到低排序(使用rank()/dense_rank() 時,必須要帶order by否則非法)
          rank()/dense_rank():  分級
          整個語句的意思就是:在按部門劃分的基礎上,按工資從高到低對雇員進行分級,“級別”由從小到大的數字表示(最小值一定為1)。 
          那么rank()和dense_rank()有什么區別呢?
          rank():  跳躍排序,如果有兩個第一級時,接下來就是第三級。
          dense_rank():  連續排序,如果有兩個第一級時,接下來仍然是第二級。
          min()/max() over(partition by ...)  // 分組最大最小值
          lead()/lag() over(partition by order by) // 前后數據比較使用
          lead(列名,n,m):  當前記錄后面第n行記錄的<列名>的值,沒有則默認值為m;如果不帶參數n,m,則查找當前記錄后面第一行的記錄<列名>的值,沒有則默認值為null。
          lag(列名,n,m):  當前記錄前面第n行記錄的<列名>的值,沒有則默認值為m;如果不帶參數n,m,則查找當前記錄前面第一行的記錄<列名>的值,沒有則默認值為null。
          主要是各個函數和over的配合使用。
          -----------------------------------------------------------------------------------------------------------------------------------------------------
          Oracle 的集合運算
          UNION 用來合并結果集 要求返回字段是一樣的。
          JOIN 用來合并字段。
          并集
          UNION ALL, FULL JOIN -- 重復出現
          UNION, INNER JOIN minus -- 一次出現
          交集
          intersect
          差集
          minus 
          笛卡爾積
          CROSS JOIN
          ------------------------------------------------------------------------------------------------------------------------------
          INNER JOIN oracle 特殊的寫法 不知道在sqlserver 是否支持。
          SELECT
          *
          FROM (
            SO_WEC_SODL_DESPATCH_HEADER AS SO_WEC_SODL_DESPATCH_HEADER_1
              INNER JOIN (
                (
                  SO_WARRANTY_ENTITLEMENT WET_1
                  INNER JOIN (SO_WARRANTY_ENTITLEMENT INNER JOIN SO_WEC_SODL
                  ON SO_WARRANTY_ENTITLEMENT.AID = SO_WEC_SODL.AID_WARRANTY_ENTITLEMENT_SO
                  ) ON (WET_1.AID_COMPANY = SO_WARRANTY_ENTITLEMENT.AID_COMPANY)
                  AND (WET_1.SEQ_ITEM_NUM = SO_WARRANTY_ENTITLEMENT.PARENT_SEQ_ITEM)
                  AND (WET_1.ITEM_LINE_NUM = SO_WARRANTY_ENTITLEMENT.PARENT_ITEM_NUM)
                  AND (WET_1.SO_LINE_NUM = SO_WARRANTY_ENTITLEMENT.PARENT_SOLINE_NUM)
                  AND (WET_1.SO_NUM = SO_WARRANTY_ENTITLEMENT.SO_NUM)
                )
                INNER JOIN SO_WEC_SODL AS SO_WEC_SODL_1 ON (SO_WEC_SODL.LINE_DELIVERY_NUMBER = SO_WEC_SODL_1.LINE_DELIVERY_NUMBER)
                AND (WET_1.AID = SO_WEC_SODL_1.AID_WARRANTY_ENTITLEMENT)
              ) ON SO_WEC_SODL_DESPATCH_HEADER_1.AID_WEC_SODL = SO_WEC_SODL_1.AID
          ) INNER JOIN SO_WEC_SODL_DESPATCH_HEADER ON SO_WEC_SODL.AID = SO_WEC_SODL_DESPATCH_HEADER.AID_WEC_SODL

          ===



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 淳化县| 和林格尔县| 滦南县| 神木县| 遵义市| 紫云| 九江市| 镇平县| 镇远县| 铜梁县| 荔波县| 武夷山市| 泸溪县| 哈密市| 固始县| 乾安县| 巴林左旗| 冀州市| 静乐县| 西峡县| 桐乡市| 炎陵县| 曲周县| 邹平县| 成都市| 昭苏县| 东辽县| 巴中市| 丹凤县| 调兵山市| 和龙市| 依安县| 龙海市| 河曲县| 文安县| 扶余县| 尼玛县| 山东省| 盘山县| 曲靖市| 秭归县|