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 湘江夜游神 閱讀(388) 評論(0)  編輯  收藏 所屬分類: SQL

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


          網站導航:
           

          Locations of visitors to this page

          主站蜘蛛池模板: 苍梧县| 淮南市| 古田县| 平山县| 鄯善县| 正阳县| 花莲市| 临猗县| 新河县| 赤水市| 土默特右旗| 扬州市| 射阳县| 隆回县| 咸丰县| 家居| 新乐市| 曲阳县| 辛集市| 吴桥县| 宜宾县| 宁陵县| 巴彦县| 闻喜县| 贺兰县| 南溪县| 锦州市| 永泰县| 阜康市| 郓城县| 河津市| 琼中| 盘山县| 镇雄县| 霍邱县| 札达县| 新宁县| 苍南县| 新丰县| 广州市| 彩票|