明月松間照 清泉石上流


                                                  ——— 兵臨城下   貓科動物
          posts - 70, comments - 137, trackbacks - 0, articles - 23
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          SQL 筆記(定時更新)

          Posted on 2006-12-18 17:48 兵臨城下 閱讀(481) 評論(0)  編輯  收藏 所屬分類: J2SE

          with 語句:
          WITH T1 AS(SELECT DISTINCT C_UNIT_CODE,C_CNTY_CODE,C_PRODUCT_ID,I_AUTH_LEVEL FROM TRX_USER_AUTH_LEVEL WHERE C_GRP_CODE = 'GRP1206' AND C_USER_ID = 'usr1206'),
          T2 AS(SELECT DISTINCT B.C_MAIN_REF,B.C_UNIT_CODE,I_AUTH_LEVEL,B.C_CNTY_CODE,B.C_PRODUCT_ID FROM TRX_MATRIX_LIST A JOIN TRX_AUTH_LIST B ON A.C_MAIN_REF = B.C_MAIN_REF AND A.C_UNIT_CODE = B.C_UNIT_CODE AND A.C_CNTY_CODE = B.C_CNTY_CODE AND A.C_PRODUCT_ID = B.C_PRODUCT_ID AND A.I_OP_LEVEL = B.I_AUTH_LEVEL WHERE B.C_MAIN_REF NOT IN (SELECT DISTINCT C_MAIN_REF FROM TRX_AUTH_LIST WHERE C_USER_ID = 'usr1206')),
          T3 AS(SELECT T2.C_MAIN_REF,T2.C_UNIT_CODE,T2.C_CNTY_CODE,T2.C_PRODUCT_ID FROM T2 JOIN T1 ON T1.C_UNIT_CODE = T2.C_UNIT_CODE AND T1.C_CNTY_CODE = T2.C_CNTY_CODE AND T1.C_PRODUCT_ID = T2.C_PRODUCT_ID AND T1.I_AUTH_LEVEL = T2.I_AUTH_LEVEL),
          T4 AS(SELECT A. C_UNIT_CODE,A.C_TRX_STATUS,A.C_STATUS_NAME,A.C_PRODUCT_NAME,A.C_MAIN_REF,A.CUST_REF,A.COMP_NAME,A.SCB_REF,A.T_LOCKED_TIME,A.TXN_DATE,A.OTSTND_CCY,A.OTSTND_AMT,A.C_IS_TEMPLATE,A.C_GRP_CODE,A.C_FUNC_ID,A.C_CNTY_CODE,A.C_BK_GROUP_ID,A.C_MODULE,A.BANK_INIT,A.C_PRODUCT_ID,A.C_TRX_REF,A.I_EVENT_TIMES? FROM TRX_INBOX A JOIN T3 ON T3.C_MAIN_REF = A.C_MAIN_REF AND T3.C_UNIT_CODE = A.C_UNIT_CODE AND T3.C_CNTY_CODE = A.C_CNTY_CODE AND T3.C_PRODUCT_ID = A.C_PRODUCT_ID WHERE? (C_TRX_STATUS ='P'OR C_TRX_STATUS='T')AND (BANK_INIT <> 'T'OR BANK_INIT? IS NULL)AND (C_IS_TEMPLATE <> 'Y'OR C_IS_TEMPLATE IS NULL)? AND? C_BK_GROUP_ID? ='SCBBANK'),
          T5 AS(SELECT DISTINCT A.C_UNIT_CODE,A.C_CNTY_CODE,B.C_PRODUCT_ID FROM TRX_OP_FUNC A JOIN TRX_FAP_RULE B ON A.C_FAP_ID = B.C_FAP_ID WHERE C_GRP_CODE = 'GRP1206' AND C_USER_ID = 'usr1206')
          SELECT COUNT(*) AS RECCOUNT FROM T4 JOIN T5 ON T4.C_UNIT_CODE = T5.C_UNIT_CODE AND T4.C_CNTY_CODE = T5.C_CNTY_CODE AND T4.C_PRODUCT_ID = T5.C_PRODUCT_ID


          UNION語句:
          SELECT? C_MAIN_REF,I_AUTH_LEVEL,C_TRX_STATUS ,TXN_DATE,TXN_TIME FROM? shgt_auth WHERE C_MAIN_REF='SGGHYLL10030' And C_UNIT_CODE='CINDYGP'
          AND C_CNTY_CODE='CN' AND C_trx_status = 'A'
          UNION
          select? B.C_MAIN_REF,B.I_AUTH_LEVEL,B.C_TRX_STATUS ,B.TXN_DATE,B.TXN_TIME from TRX_AUTH_LIST A,shgt_auth B
          WHERE B.C_MAIN_REF='SGGHYLL10030' And B.C_UNIT_CODE='CINDYGP'

          ?


          對指定表不寫日志:alter table *** activate not logged initially

          創建表:
          DELETE FROM TABLE EXIMTRX.KEYTEST;
          DROP TABLE EXIMTRX.KEYTEST;
          CREATE TABLE EXIMTRX.KEYTEST
          (
          ??? USER_ID??? INTEGER,
          ??? USER_NAME? VARCHAR(10) NOT NULL,
          ??? USER_ADDR? VARCHAR(10) NOT NULL,
          ??? USER_MAIL? VARCHAR(10) NOT NULL,
          ??? USER_SEC?? VARCHAR(10) NOT NULL,
          ??? HASH?????? VARCHAR(10),
          ???PRIMARY KEY (USER_ID,USER_NAME,USER_ADDR,USER_MAIL,USER_SEC)
          );

          檢索數據庫表中的不重復記錄 (按B列來查詢,去除B列中的重復數據)
          SELECT * FROM TEST WHERE id in (SELECT MIN(id) FROM TEST GROUP BY B)
          1、查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷
          select * from people
          where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

          2、刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄
          delete from people
          where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
          and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

          3、查找表中多余的重復記錄(多個字段)
          select * from vitae a
          where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

          4、刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄
          delete from vitae a
          where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
          and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

          5、查找表中多余的重復記錄(多個字段),不包含rowid最小的記錄
          select * from vitae a
          where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
          and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

          ?

          ?

          復制表
          create table trx_inbox_back like trx_inbox
          insert into trx_inbox_back? select * from trx_inbox

          創建視圖
          drop view view_sql
          create view view_sql as
          select * from table where ....

          create view viewTest(id,name,cnty,address) as
          select a.id,a.col1,a.col2,b.col1 from tablea a ,tableb b where a.id<10000 and a.id=b.id;

          select * from viewTest where id<5000



          建立索引
          create index idx_inbox_back on TRX_INBOX_BACK(C_CNTY_CODE,C_UNIT_CODE,C_PRODUCT_ID)

          選取前100條記錄
          select * from trx_inbox FETCH FIRST 100 ROWS ONLY

          join 語句
          SELECT DISTINCT A.CUST_REF,A.SCB_REF,A.COMP_NAME,A.C_PRODUCT_NAME,A.COUNTER_PARTY_NAME,A.C_STATUS_NAME,A.C_TRX_STATUS,A.C_UNIT_CODE? FROM TRX_INBOX_back A JOIN TRX_OP_FUNC B ON A.C_CNTY_CODE = B.C_CNTY_CODE AND A.C_UNIT_CODE = B.C_UNIT_CODE AND A.C_PRODUCT_ID = B.C_PRODUCT_ID AND B.C_GRP_CODE = 'HKGROUP' AND B.C_USER_ID = 'hkuser' WHERE ( A.C_TRX_STATUS = 'P' OR A.C_TRX_STATUS = 'T') AND (A.BANK_INIT???? <> 'T' OR A.BANK_INIT????? IS NULL) AND (A.C_IS_TEMPLATE <> 'Y' OR A.C_IS_TEMPLATE? IS NULL) AND? A.C_BK_GROUP_ID? ='SCBBANK'? AND A.C_MAIN_REF LIKE '%xcblcx%' AND A.C_PRODUCT_ID = 'P05102100000'



          count指定字段 (去除指定字段重復行)注:指定字段中不能包括 INTEGER 類型
          select count( distinct user_id || user_sec) as counter from test



          通配符的一些用法:(關鍵字:like?%?[]?-)
            
          select?*?from?tablename?where?column1?like?'[A-M]%'
            這樣可以選擇出column字段中首字母在A
          -M之間的記錄

            
          select?*?from?tablename?where?column1?like?'[ABC]%'
            這樣可以選擇出column字段中首字母是A或者B或者C的記錄

            
          select?*?from?tablename?where?column1?like?'[A-CG]%'
            這樣可以選擇出column字段中首字母在A
          -C之間的或者是G的記錄

            
          select?*?from?tablename?where?column1?like?'[^C]%'
            這樣可以選擇出column字段中首字母不是C的記錄

          脫字符(關鍵字:
          like?_)
            通過使用下滑線字符(_),可以匹配任意單個字符
            
          select?*?from?tablename?where?column1?like?'M_crosoft'?

          匹配特殊字符:(
          [?]?_?-?%
            把他們都放到
          []中就行了,比如:
            
          select?*?from?tablename?where?column1?like?'%[%]%'?

          匹配發音(關鍵字:
          SOUNDEX?DIFFERENCE
            如果不知道一個名字確切的發音,但是又多少知道一點,可以考慮使用SOUNDEX?DIFFERENCE函數。
            
          select?*?from?tablename?where?DIFFERENCE(column1,'Laofei'>3)
            DIFFERENCE返回0
          -4之間的數字,4是非常接近,0是差異非常大
            要深入了解DIFFERENCE函數的工作原理,使用SOUNDEX函數返回DIFFERENCE函數所使用的音標碼
            
          select?column1?as?column,SOUNDEX(column1)?'sound?like'?

           注意:
            DIFFERENCE函數比較兩個字符串的第一個字母和所有的輔音字母,該函數忽略任何元音字母(包括Y),除非元音字母是該字符串的第一個字母。
            使用這兩個函數在where中執行效果并不好,所以盡量少使用。

          主站蜘蛛池模板: 新泰市| 囊谦县| 交口县| 博客| 增城市| 隆子县| 秀山| 买车| 通渭县| 读书| 仁布县| 扶绥县| 大悟县| 西乌珠穆沁旗| 清水河县| 辽中县| 呈贡县| 修文县| 新沂市| 赣榆县| 陕西省| 鄂托克旗| 元阳县| 昌乐县| 克拉玛依市| 南丰县| 内江市| 海兴县| 新巴尔虎左旗| 三穗县| 崇文区| 乌鲁木齐县| 乌拉特中旗| 长泰县| 竹溪县| 平阴县| 汤原县| 交口县| 星座| 阳西县| 启东市|