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

Sorunuz mu var? Belki de çoktan soruldu..

0
PL/SQL de EXIST ve IN farkı nedir? Hangisi tercih edilmelidir?

Açık 2 Cevaplar 179 Gösterim Veri Tabanı
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  ( .....);

2 Cevap

0

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.

8 Şubat 2016 kenan (2,833 puan) cevapladı
1Yorumlar
1 Haziran 2017 akotako (122 puan) yorumladı

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
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)
28 Ekim 2017 tolga (1,618 puan) cevapladı
...