exists (sql 返回結果集為真)
          not exists (sql 不返回結果集為真)
          如下:
          表A
          ID NAME
          1 A1
          2 A2
          3 A3

          表B
          ID AID NAME
          1 1 B1
          2 2 B2
          3 2 B3

          表A和表B是1對多的關系 A.ID => B.AID

          SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
          執行結果為
          1 A1
          2 A2
          原因可以按照如下分析
          SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
          ---> SELECT * FROM B WHERE B.AID=1有值返回真所以有數據

          SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
          ---> SELECT * FROM B WHERE B.AID=2有值返回真所以有數據

          SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
          ---> SELECT * FROM B WHERE B.AID=3無值返回真所以沒有數據

          NOT EXISTS 就是反過來
          SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)
          執行結果為
          3 A3
          ===========================================================================
          EXISTS = IN,意思相同不過語法上有點點區別,好像使用IN效率要差點,應該是不會執行索引的原因
          SELECT ID,NAME FROM A  WHERE ID IN (SELECT AID FROM B)

          NOT EXISTS = NOT IN ,意思相同不過語法上有點點區別
          SELECT ID,NAME FROM A WHERE ID NOT IN (SELECT AID FROM B)
          posted on 2008-03-19 10:21 湘江夜游神 閱讀(382) 評論(0)  編輯  收藏 所屬分類: SQL

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


          網站導航:
           

          Locations of visitors to this page

          主站蜘蛛池模板: 辉县市| 西峡县| 如皋市| 蒲城县| 迁西县| 万盛区| 高淳县| 东方市| 收藏| 涿州市| 金乡县| 木兰县| 永兴县| 禄丰县| 宕昌县| 中卫市| 南投市| 芒康县| 华宁县| 广安市| 永新县| 伊金霍洛旗| 绥阳县| 台山市| 南陵县| 合阳县| 招远市| 亚东县| 龙口市| 和政县| 乐平市| 新源县| 梁山县| 惠来县| 昆山市| 金乡县| 陆川县| 岑巩县| 苗栗市| 金秀| 德惠市|