Dev@Free

          zJun's Tech Weblog

          Oracle SQL 3則

          • 如果存在就更新,不存在就插入用一個語句實現
          MERGE? INTO ?t_mg?a
          USING?(
          SELECT ? ' the?code ' ?code,? ' the?name ' ?NAME? FROM
          ?dual)?b
          ON ?(a.code? =
          ?b.code)
          WHEN ?MATCHED? THEN

          UPDATE ? SET ?a.NAME? = ?b.NAME
          WHEN ? NOT ?MATCHED? THEN

          INSERT ?(code,?NAME)? VALUES ?(b.code,?b.NAME);
          • 分頁算法

          SELECT ? *
          FROM ?( SELECT ?a. * ,?ROWNUM?rn
          FROM ?( SELECT ? * ? FROM ?t_employees? ORDER ? BY
          ?first_name)?a
          WHERE ?ROWNUM? <= ? 500
          )
          WHERE ?rn? > ? 480 ?;

          • 抽取/刪除重復記錄

          1) 部分字段重復數據的刪除

          delete ? from ?表名?a?
          where ?a.rowid? !=
          ?
          (
          select ? max (b.rowid)? from
          ?表名?b?
          where ?a.字段1? = ?b.字段1? and
          ?
          a.字段2?
          =
          ?b.字段2?
          )

          上面語句的執行效率是很低的,可以考慮建立臨時表,講需要判斷重復的字段、rowid插入臨時表中,然后刪除的時候在進行比較。

          create ? table ?臨時表? as ?
          select ?a.字段1,a.字段2, MAX (a.ROWID)?dataid? from ?正式表?a? GROUP ? BY
          ?a.字段1,a.字段2;
          delete ? from
          ?表名?a?
          where ?a.rowid? !=
          ?
          (
          select ?b.dataid? from
          ?臨時表?b?
          where ?a.字段1? = ?b.字段1? and
          ?
          a.字段2?
          =
          ?b.字段2?
          )

          2) 完全重復記錄的刪除

          用下面語句獲取到去掉重復數據后的記錄:

          select ? distinct ? * ? from ?表名

          可以將查詢的記錄放到臨時表中,然后再將原來的表記錄刪除,最后將臨時表的數據導回原來的表中。如下:

          CREATE ? TABLE ?臨時表? AS ?( select ? distinct ? * ? from ?表名);
          drop ? table
          ?正式表;
          insert ? into ?正式表?( select ? * ? from
          ?臨時表);
          drop ? table ?臨時表;

          posted on 2006-10-10 16:49 zJun's帛羅閣 閱讀(1064) 評論(2)  編輯  收藏 所屬分類: 數據庫

          評論

          # re: Oracle SQL 3則 2006-10-24 09:58 冰川

          可以解釋一下你的分頁算法嗎?
          沒看明白...  回復  更多評論   

          # re: Oracle SQL 3則 2006-11-17 09:55 zjun

          @冰川
          是哪里不明白呢,是通過 ROWNUM 來查詢指定條數的記錄,需要怎么解釋呢?  回復  更多評論   

          導航

          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          統計

          常用鏈接

          留言簿(15)

          隨筆分類

          隨筆檔案

          相冊

          收藏夾

          博客

          文檔

          站點

          論壇

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 洛阳市| 黎平县| 营口市| 厦门市| 曲周县| 阿合奇县| 名山县| 莱芜市| 密云县| 桃源县| 雅江县| 普定县| 甘德县| 包头市| 鄱阳县| 临颍县| 留坝县| 惠州市| 额尔古纳市| 于田县| 铁力市| 棋牌| 加查县| 华宁县| 通山县| 朝阳区| 皮山县| 英德市| 星座| 葫芦岛市| 米易县| 互助| 长丰县| 梅州市| 香港 | 中卫市| 柯坪县| 安吉县| 洞头县| 当阳市| 石门县|