sqlin結果集
A. sql 中的in 和exists區別
in和exists在功能上本質沒有區別,唯一的區別就在於性能。也就是說同樣的sql你用那個執行效率高的問題。
其實說簡單點就是exists用到了關聯,而in是在一個大的數據及合理篩選,這么說性能的優劣你就很明白了吧。關聯的速度是要大於篩選的,所以你只要能用exists就別用in,這是寫出好的sql語句的基本規則。
exists是查詢是否存在,它後邊跟的語句是查詢*還是直接寫個1,效果都一樣,比如你看到的sql的例子,我把*改成1,結果都一樣的。
select sno,sname,sdept
from student s1
where exists
(select 1 --*
from student s2
where s2.dept=s1.depe
and s2.name='小劉');
比如說這個例子學生表被賦予了兩個別名s1和s2
語句中要求dept和depe相等,我把上邊的語句改一下你可能就明白他的意思了:
select sno,sname,sdept
from student s1 ,student s2
where s1.dept =s2.depe
and s1.name = '小劉';
語句就是為了要看出student表中某兩行或者多行之間的關系,所以要對自己關聯,你仔細看一下你所面對的student表的每一列,就可能看明白了。
記住sql不要從技術上去理解,你就直接把它的功能用漢字表達出來,然後去理解就行了,跟我們說話時一個樣的:
從表student中找到dept和(student表中)depe相同的名字叫小劉的學生
B. SQL中如何取出用in查詢後的結果集
這個問題你提的不夠清楚。建議你還是舉個例子比較容易讓人明白。
in和exists用法上比較類似:
select * from emp where emp_id in (select emp_id from manager)
select * from emp a where exists (select emp_id from manager where emp_id=a.emp_id)
其實我遇到的情況來看,大多數情況的SQL都可以用另一個改寫。個別情況exists沒辦法用in替換,之前曾遇到一個SQL要表示其他相關表的資料存在狀況,想了很久都沒有辦法用in改寫,例子手頭沒有。
還是講你的實際問題吧,你發出來,大家想想解決辦法吧。
C. sql語句中條件查詢里in、like、及=三個的效率怎麼樣
1、如果條件欄位都是非索引欄位,那麼效率都差不多,就看結果大小。
2、有差別的在於條件欄位是索引欄位時:
=在所以的情況下都會進行索引掃描,所以效率總是高的。
like 當模糊查詢為右模糊,比如'abc%'時,掃描索引,高效。
當模糊查詢含左模糊時,比如'%abc',進行全表掃描,低效。
in的作用等同於or ,也是進行索引掃描,高效。
另外,in還可以連接查詢結果集,這時往往會和exists做比較。
a、 select * from t1 where f1 in (select f1 from t2 where t2.fx='x'),
其中子查詢的where里的條件不受外層查詢的影響,這類查詢一般情況下,自動優化會轉成exist語句,也就是效率和exist一樣。
b、 select * from t1 where f1 in (select f1 from t2 where t2.fx=t1.fx),
其中子查詢的where里的條件受外層查詢的影響,這類查詢的效率要看相關條件涉及的欄位的索引情況和數據量多少,一般效率不如exists,數據量大時,效果就更加明顯。
D. sql中in和exist語句的區別
兩者都能實現表功能查詢,主要區別如下:
1、適用表的類型不同。
in是子查詢為驅動表,外面的表為被驅動表,故適用於子查詢結果集小而外面的表結果集大的情況。
exists是外面的表位驅動表,子查詢裡面的表為被驅動表,故適用於外面的表結果集小而子查詢結果集大的情況。
2、子查詢關聯不同。
exists一般都是關聯子查詢。對於關聯子查詢,必須先執行外層查詢,接著對所有通過過濾條件的記錄,執行內層查詢。外層查詢和內層查詢相互依賴,因為外層查詢會把數據傳遞給內層查詢。
in則一般都是非關聯子查詢,非關聯子查詢則必須先完成內層查詢之後,外層查詢才能介入。
3、執行次數不同。
IN 語句:只執行一次,確定給定的值是否與子查詢或列表中的值相匹配。in在查詢的時候,首先查詢子查詢的表,然後將內表和外表做一個笛卡爾積,然後按照條件進行篩選。所以相對內表比較小的時候,in的速度較快。
EXISTS語句:執行次數根據表的長度而定。指定一個子查詢,檢測行的存在。遍歷循環外表,然後看外表中的記錄有沒有和內表的數據一樣的。匹配上就將結果放入結果集中。
E. sql條件in三個sql的查詢結果
你沒寫具體內容不好判斷,不過一般來說是兩種情況。
(1)三個sql取交集,這種情況下用and就可以,也就是滿足第一個sql的同時滿足第二個sql,而且還滿足第三個sql。
where
欄位
in(sql1)
and
欄位
in(sql2)
and
欄位
in(sql2)
(2)三個sql是並集的關系,那麼用or就可以,要麼滿足第一個,要麼第二個,要麼第三個。
where
欄位
in(sql1)
or
欄位
in
(sql2)
or
欄位
in(sql3)
當然如果有什麼特殊的,那就不好說了。
F. sql中 in的用法
這樣寫
select * from proct where cid in(select cid from
category where cid= 10 or pid =10 )
其中 select cid from category where cid= 10 or pid =10
是得到 包括自己在內的大類下面的所有小類的cid
得到了所有滿足條件的 cid 後就可以select出 所有類別下面的 產品
然後如果要排序 就在最後加 order by 什麼的
G. sql server in()如何運用
您好:
IN後面跟一個結果集
SELECT*FROM表WHERE欄位IN('值1','值2','值3')
或者跟一個子查詢
SELECT*FROM表WHERE欄位IN(SELECT欄位FROM表)
H. sql 里等於與 in區別
比如說student表(ID,學生姓名)
查一個學生
select * from student where 學生姓名='張三'
select * from student where 學生姓 in('張三' )
查二個學生
select * from student where 學生姓名='張三' or 學生姓名='李四'
select * from student where 學生姓 in('張三' ,'李四')
明白了吧。。在於要查的值多少的問題。。多的話少了N-1個OR,如果有AND條件還少了幾個括弧!!