①ORACLE?層次查詢 --(遞歸語句)--(查詢樹狀結構)
select × from? table?
start with table.col1 = '001' --根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。
connect by proir col1 = parent_id ? ---上一條語句中的col1 =?本條記錄的parent_id
?
???? 掃描樹結構表時,需要依此訪問樹結構的每個節點,一個節點只能訪問一次,其訪問的步驟如下:
???? 第一步:從根節點開始;
???? 第二步:訪問該節點;
???? 第三步:判斷該節點有無未被訪問的子節點,若有,則轉向它最左側的未被訪問的子節,并執行第二步,否則執行第四步;
???? 第四步:若該節點為根節點,則訪問完畢,否則執行第五步;
???? 第五步:返回到該節點的父節點,并執行第三步驟。
???? 總之:掃描整個樹結構的過程也即是中序遍歷樹的過程
?
②NOT IN?子查詢中有NULL?為什么的不出正確答案
1.先來說IN SELECT * FROM TABLE WHERE COL IN (SELECT COL1 FROM TABLE1 ) ?
--- SELECT COL1 FROM TABLE1 得出 1,2,3,NULL
那么上面的查詢可以寫為 SELECT * FROM TABLE WHERE COL = 1 OR COL = 2 OR COL = 3 OR COL = NULL
那么即使子查詢中有NULL ,? IN 也可以的出正確答案
2. NOT IN? : SELECT * FROM TABLE WHERE COL NOT IN (SELECT COL FROM TABLE1)
?? --- SELECT COL1 FROM TABLE1 得出 1,2,3,NULL
那么上面的查詢可以寫為: SELECT * FROM TABLE WHERE COL != 1 AND? COL != 2 AND COL != 3 AND COL != NULL
WHERE 的結果必須是TRUE 才能返回記錄?
COL != NULL 得出的結果是UNKNOWN ?即使前面都是TRUE? UNKNOWN AND TRUE 絕對不等于TRUE ?
????? NULL?比較只能用 IS NULL?或者是 IS NOT NULL? ----關鍵就在這里
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
