in ------ 遍歷
exists ------- 檢索到滿足條件即退出
not exists --------檢索到不滿足條件即退出
本質區別:
exists 由於exist屬於外驅動,故會利用索引來檢索資料
in 則屬於內驅動 故不能利用索引檢索資料
其中,in和not in類似全表掃瞄,效率低,一般用 exist和notexist代替其用法。
使用環境:
*exists 使用外連線查詢時用到。
*in 使用內連線查詢時用到。
from tb_expo
where expoclassid in (select classid from tb_expo_class where parentid=0)
等價於:
select top 10 a.exponame from tb_expo a,(select classid from tb_expo_class where parentid=0) b
where a.expoclassid= b.classid
而exist不同:
select top 10 exponame,expoclassid from tb_expo ewhere exists (select 0 from tb_expo_class where parentid=0)
sql:
set serveroutput on;declare
l_count integer;
begin
for tb_expo in (select exponame,expoclassid from tb_expo) loop
select count(*) into l_count from tb_expo_class
where parentid = 0
if l_count != 0 then
dbms_output.put_line(e.exponame);
end if;
end loop;
end
在查詢資料量大的時候就會體現出效率來。
當然,也不能說exist就比in好。
如果select 0 from tb_expo_class where parentid=0
查詢出來的資料量很少的話,還是 in 效率更高些。
三條常用的sql語句
定義 表和表之間的資料以縱向的方式連線在一起。之前的內連線,外連線都是以橫向的方式連線在一起 注意,union 內部的每個 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每個 select 語句中的列的順序必須相同。sql union 語法 select column n...
SQL三 常用語句
如果第乙個條件和第二個條件都成立,則 and 運算子顯示一條記錄。如果第乙個條件和第二個條件中只要有乙個成立,則 or 運算子顯示一條記錄。您也可以把 and 和 or 結合起來 使用圓括號來組成複雜的表示式 select from websites where alexa 15 and count...
sql常用sql語句
1 查詢某個庫中所有的表名字 select name from sysobjects where xtype u and name dtproperties order by name 2 得到資料庫中所有使用者檢視 select name from sysobjects where xtype v...