8
A
回答
5
0
可能存在性能差異,存在速度更快。
最重要的區別是處理空值。您的查詢看起來可能與in和exists一樣,但是當您的子查詢返回null時,您可能會感到震驚。
您可能會發現存在空值導致存在失敗。
請參閱Joe Celko的'用於聰明人的SQL'以更好地解釋何時使用每一個。
0
不在爲一組元素中的元素進行測試,因此它更簡單。
不存在可以處理更復雜的查詢,包括分組(例如具有sum(x)= z或具有count(*)> 3),具有多個條件(例如,匹配多個元素)的結果,並且可以利用索引。
在某些情況下不容易做比不存在。我通常會發現這是我測試值集合中關鍵字段值的位置。
作爲一個大拇指的規則,我寧願不存在,因爲它涵蓋了更多的情況而不是不存在。不存在可以用於每個不用於的情況,但不是相反。
13
NOT IN之間的差異和NOT EXISTS那裏有包括在結果NULL
值變得清晰。
例如:
create table test_a (col1 varchar2(30 char));
create table test_b (col1 varchar2(30 char));
insert into test_a (col1) values ('a');
insert into test_a (col1) values ('b');
insert into test_a (col1) values ('c');
insert into test_a (col1) values ('d');
insert into test_a (col1) values ('e');
insert into test_b (col1) values ('a');
insert into test_b (col1) values ('b');
insert into test_b (col1) values ('c');
insert into test_b (col1) values (null);
注意:它們主要的區別在於test_b
包含null
值。
select * from test_a where col1 not in (select col1 from test_b);
沒有行返回
select * from test_a where
not exists
(select 1 from test_b where test_b.col1 = test_a.col1);
返回
col1
====
d
e
+0
@金:我認爲你應該接受這個答案,將有助於未來的遊客直接得到公牛的眼睛。 – hagrawal 2017-11-19 18:10:59
相關問題
- 1. 保存在proto和這個之間有什麼區別?
- 2. dpm()和dsm()之間有什麼區別?
- 3. @dynamic和@synthesize之間有什麼區別?
- 4. vbNullString和「」之間有什麼區別嗎?
- 5. * zoom和zoom之間有什麼區別?
- 6. String.Concat,string.format和+之間有什麼區別?
- 7. StaticLayout和DynamicLayout之間有什麼區別
- 8. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之間有什麼區別?
- 9. :: after和after之間有什麼區別?
- 10. %.02f和%.2f之間有什麼區別?
- 11. {$ var}和$ var之間有什麼區別?
- 12. ReleaseFloatArrayElements和DeleteLocalRef之間有什麼區別
- 13. {0}和「」之間有什麼區別?
- 14. getA()和this.getA()之間有什麼區別?
- 15. @observable和@published之間有什麼區別
- 16. $ {}和#{}之間有什麼區別?
- 17. url.getFile()和getpath()之間有什麼區別?
- 18. KVC和Properties之間有什麼區別?
- 19. Lazy.Force()和Lazy.Value之間有什麼區別
- 20. 「層」和「層」之間有什麼區別?
- 21. 1.1em和1.05em之間有什麼區別?
- 22. proc和lambda之間有什麼區別?
- 23. ViewFlipper和ViewSwitcher之間有什麼區別
- 24. typedef和宏之間有什麼區別?
- 25. 「$^N」和「$ +」之間有什麼區別?
- 26. NSInvocation和block之間有什麼區別?
- 27. -existingObjectWithID:error:和-objectWithID之間有什麼區別?
- 28. {0}和+之間有什麼區別?
- 29. Locationmanager.locationListener和com.google.android.gms.location.LocationListener之間有什麼區別?
- 30. $ .cache和$ .data之間有什麼區別?
不要忘了處理空值:http://stackoverflow.com/questions/1699424/what-the-difference -oracle-in-and-not-exist-in-oracle-query/1703712#1703712 – 2009-11-09 20:52:04
湯姆凱特鏈接肯定得到了問題的根源。 – 2009-11-09 20:53:41