程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 選擇不存在於另一表的數據幾種寫法

選擇不存在於另一表的數據幾種寫法

編輯:DB2教程

選擇不存在於另一表的數據幾種寫法   看看以下三種寫法: 寫法1:SELECT ... FROM A   WHERE A.key NOT IN (SELECT key FROM B);   寫法2:SELECT ... FROM A               LEFT JOIN B ON A.key = B.key   WHERE B.key is null;   寫法3:SELECT ... FROM A   WHERE NOT EXISTS   (SELECT 'x' FROM B WHERE A.key = B.key);   寫法1采用NOT IN的寫法。很不幸DB2對於NOT IN通常采用TBSCAN(表掃描),這是效率很差的寫法。最佳寫法是第三種寫法,如果B.key上有索引,它可以不用fetch B表的數據就可以完成查詢。第二種寫法采用對外表B的 is null判斷進行過濾,效率稍差。   注:事實上,在DB2優化器的作用下,第二種寫法與第三種寫法的存取方案相關無幾,只是第二種寫法比第三種寫法多了一步filter操作。   建議使用第3種寫法,己使用第2種寫法的代碼也不必修改,因為其效率與第3種寫法差不多。   例:     SELECT A.*     from EDS.TW_BCUST_200409 A LEFT OUTER JOIN KF2.TW_BCUST B ON             A.TM_INTRVL_CD =B.TM_INTRVL_CD and A.CUST_ID =B.CUST_ID and             A.USR_ID =B.USR_ID and A.BCUST_EFF_MO =B.BCUST_EFF_MO     WHERE B.TM_INTRVL_CD is null         SELECT *     from EDS.TW_BCUST_200409 A     where NOT EXISTS        (select 'x'        from KF2.TW_BCUST B        WHERE A.TM_INTRVL_CD =B.TM_INTRVL_CD and A.CUST_ID =B.CUST_ID                and A.USR_ID =B.USR_ID and A.BCUST_EFF_MO =                B.BCUST_EFF_MO)   這兩種寫法對應的存取方案:                                                    RETURN                            RETURN                     (   1)                            (   1)                       |                                 |                         BTQ                               BTQ                       (   2)                            (   2)                       |                                 |                        FILTER                            HSJOIN                     (   3)                            (   3)                       |                              /      \                    HSJOIN                     TBSCAN       TBSCAN                (   4)                     (   4)       (   5)               /      \                      |            |           TBSCAN       TBSCAN          Table:           Table:         (   5)       (   6)          EDS              KF2              |            |             TW_BCUST_200409  TW_BCUST    Table:           Table:             EDS              KF2              TW_BCUST_200409  TW_BCUST     

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved