Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
221 gösterim
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  ( .....);
Veri Tabanı kategorisinde (1.6k puan) sordu
yeniden etikenlendirildi

2 Cevap

0 oy

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.

(3.1k puan) cevapladı

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

0 oy
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)
(1.6k puan) cevapladı

İlgili sorular

0 oy
1 cevap 66 gösterim
66 gösterim 11 Ocak 2016 Veri Tabanı kategorisinde tolga (1.6k puan) sordu
0 oy
1 cevap 120 gösterim
120 gösterim 24 Nisan 2017 Editor/IDE kategorisinde tolga (1.6k puan) sordu
0 oy
1 cevap 587 gösterim
587 gösterim 1 Şubat 2016 Veri Tabanı kategorisinde tolga (1.6k puan) sordu
0 oy
1 cevap 35 gösterim
...