2009年3月12日 星期四

MS SQL - IN and EXISTS

通常我們要取得某幾筆資料的時候都會使用IN(NOT IN)來當作WHERE條件
但是隨著資料庫愈來愈大時,使用IN(NOT IN)效率就會相對的降低
這時候我們可以使用另一個語法...EXISTS(NOT EXISTS)
我們直接用範例來說明,大家應該會比較清楚
以下為範例『 總共300筆資料,1頁20筆資料,第3頁 』的狀況表示SQL的主體原型 如果上面還看不是很懂,請看下面分解說明:
〝select top 60 pro_id,pro_name from product order by pro_id asc〞--假設為A。
這一段是表示一頁20筆,第三頁的狀況,所以總共要找出1~60筆的資料出來(20*3=60)。
〝select top 40 pro_id from product order by pro_id asc〞--假設為B。
這一段是表示一頁20筆,第三頁的狀況總共要找出1~40筆的資料出來(20*2=60)。
組合上列兩項結果套用在下列公式就非常簡易了。
【公式】總共資料範圍( A ) - 不要出現的範圍( B ) = 出現的範圍( 第3頁的20筆資料 )
【實作】select * from (A) aa where not exists(select 1 from (B) bb where aa.id=bb.id)

以上是借用Dr.陳與徐助教的範例
如有問題,請找他們...^+++++++++++++^

不過MS SQL 2005之後有出現新的語法 RANK() OVER
等我研究之後才放上來跟大家討論一下