Sorgu yazarken hem EXIST hem de IN yazabiliyoruz. Ama bunların farkı nedir? Hangi durumlarda hangisini tercih etmeliyiz.
SELECT * FROM table_1 t WHERE EXIST (…….);
SELECT * FROM table_1 t WHERE t.id IN ( …..);
Sorgu yazarken hem EXIST hem de IN yazabiliyoruz. Ama bunların farkı nedir? Hangi durumlarda hangisini tercih etmeliyiz.
SELECT * FROM table_1 t WHERE EXIST (…….);
SELECT * FROM table_1 t WHERE t.id IN ( …..);
// Comments are closed.
Yanlış bilmiyorsam in kullanımı or kullanımı ile aynı oluyor. in içinde bulunan her bir değer için sanki or çalıştırıyormuşsun gibi oluyor. Fakat bu durumda da kod açısından bakarsan bir sıkıntı görünmüyor. Hemen hemen aynı işe yarar. Sadece benim sağdan soldan okuduğum; exists komutu sorgunun daha hızlı çalışmasını sağlıyor.
Daha detaylı bilgisi olan arkadaşlar varsa yorumlarını bekliyoruz.
Duruma göre değişir. Eğer dıştaki sorgun ufak bir tablodaysa exists daha mantıklı olacaktır. Fakat subqueryin daha ufak bir tablodaysa in daha performanslı çalışır.
Şu linkten daha iyi anlaşılabilir.
https://stackoverflow.com/questions/12896007/oracle-in-vs-exists-difference
küçük veriler ile IN kullanılabilir, ancak büyük verilerde performası gözle görülür fark yaratır IN yerine EXISTS kullanmak. Bu durumlarda performans açısından EXISTS kullanılmaıs tercih edilir.
Söyle birşey de var, EXISTS kullanımı null değerlerini hesaba katarken IN katmıyor. örneğin:
SELECT * FROM Tablo_1 WHERE t.id IN ( SELECT A.ID FROM TABLE_2) şeklinde bir sorgu atılırsa,
tablo 1 de ,d’s, NULL olanları select sonucunda gelmezken, EXISTS kullanırsanız id’si null yani boş olanlar da gelecektir.
Ancak birinci tablo ID si ile ikinci tablonun Id sini joinlerseniz, ozaman bu null değerleri EXISTS içinde gelmeyecektir.
SELECT * FROM Tablo_1 WHERE t.id IN ( SELECT A.ID FROM TABLE_2 A WHERE A.ID=t.id)