文章出處

還沒時間看,exists用的少  ==》當你只需要判斷后面的查詢結果是否存 在時使用exists()

http://edu.codepub.com/2011/0208/29218.php

 

今天正好做一個查詢,兩個表中過濾數據,當T1中字段F1在T2表的F2中存在時,返回這條件數據。剛剛開始覺得簡單,就想到子查詢和連接查詢,但是發現 兩個表中如果數據量多時,這樣就不行,并且效率不高,后來想到用Mysql中的In函數

 

    今天正好做一個查詢,兩個表中過濾數據,當T1中字段F1在T2表的F2中存在時,返回這條件數據。剛剛開始覺得簡單,就想到子查詢和連接查詢,但是發現 兩個表中如果數據量多時,這樣就不行,并且效率不高,后來想到用Mysql中的In函數,當用完后,也做出來了。但是想了一下,覺得應該有更好用的才對, 于是打開MYSQL手冊,查IN,結果找到exist函數。 
exist:用法如下: 
select * from T1 where exist(select * from T2 where T1.F1=T2.F2); 
其中,exist()中返回的只有TRUE和FALSE,這樣過濾的速度也比In快,也不用很麻煩。 
其實exist()用的最常見的,應該是在數據的插入,當數據庫中存在時,不要插入數據,以防止數據重復插入。 
Insert into T1 set F1=’xxx’,F2=’xxcc’ where not exist(select * from T1 where F1=’xxxx’); 
上面意思就是當表T1中F1存在值為xxxx的值記錄時,不插入數據。 

   實際上確實如此。當你只需要判斷后面的查詢結果是否存在時使用exists(); 
                   當你需要使用里面的結果集的時候必須用in(); 

      比方說: select fathername from atable where exists( select id from studenttable where name='tao2ge'); 
     
     當要查詢一個叫淘二哥同學的爸爸的時候,需要使用exists(); 

       但如果有一群學生需要查爸爸。 那就得用in了。 
    select fathername from atable where fatherid in (select id from student);


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()