[]

SQL joinler

Merhaba. Uzun zamandir aktif olmasa da isimde Sql’i kullaniyorum, sorgu revize edebiliyorum ama yeni sorgu yazamam. Simdi join’leri teorik olarak biliyorum ama is pratige gelince o kadar karisiyor ki. Hangi join’i nerede kullanacagim bilemiyorum. Ayrica birden cok join kullanilan ornekleri de goruyorum onu da pratige gelince yapamiyorum.

Mesea cusid ortak kolon olan 2 tablo olsun x ve y diyelim. y tablosundaki sehir bilgisini x’e getirmek istiyorum. Sehir gelsin istedigim icin select * from x right join y on y.cusId=x.cusId olmali? Yoksa left join mi olmali :( pratik yapacagim kaynak ne olabilir. Teorigini istemiyorum cunku o kadar cok kaynaktan calistim ki artik teoriye ihtiyacim yok sadece pratik icin nasil calismaliyim?


 
x tablosundan, y tablosuyla cusId değeri üzerinden eşleşemeyecek kayıtların gelmesini istemiyorsan inner join, eşleşmese de data gelsin diyosan left join, özünde bu aslında. ben daha right join'i gerçek hayatta kullanan kimseyi görmedim.


  • tepedeki psychedelic adam  (22.10.21 20:00:01 ~ 20:00:51) 
select
x.*,
y.sehir
from x
left join y on x.cusid=y.cusid

right join kullanılmaz genelde.
  • makarnavodka  (22.10.21 21:52:27) 
Valla w3schools da falan pratik yapabilirsin sanirim. Olmadi kendi kendine tablolar yapip onlarla da oynayabilirsin.


  • j r r tolkien hayrani  (22.10.21 21:56:30) 
Yukarıdaki yazarların tamamı olayı doğru olarak anlatmış ben de ayrıntı vererek anlatayım.

INNER JOIN ile iki tabloyu ortak bir key ile birbirine bağladığında, ortak keyin refere ettiği verinin her iki tabloda da bulunması gerekiyor, yani şöyle :

uyeler ve sehirler diye tablomuz var

select * from uyeler INNER JOIN sehirler on sehirler.sehir_id = uye_sehir_id;

yukarıdaki örnekte uyeler tablosundaki sehir_id ile sehirler tablosundaki sehir_id ortak ve sehirler tablosunda o uyenin sehir id'si var ise bir kayıt döner sehir_id sehirler tablosunda yoksa uye olsa bile kayıt döndürmez.

Şimdi başka bir örnek verelim yine bir üyeler tablomuz var bir de kardeşler tablomuz olsun, aynı şekilde INNER JOIN kullanacak olursan kardeşi olmayan üyeler bu sorguda hiç dönmezdi o yüzden ne yapıyoruz INNER JOIN yerine LEFT JOIN kullanıyoruz.

select * from uyeler LEFT JOIN kardesler on kardesler.kardes_uye_id = uye_id;

Gördüğün gibi artık tüm üyeler kardeşi olsun olmasın listelenir, eğer kardeşi yoksa tek satır kayıt gelir 2 kardeşi varsa 2 satır kayıt gelir, bir kardeşi varsa yine tek satır kayıt döner.

RIGHT JOIN'e gelince kullanımı mantıksız olduğundan pek kullanılmaz, RIGHT'da önemli olan refere edilen tablonun kendisi select çekilen değil o yüzden kullanımını gerektirecek bir senaryo neredeyse yoktur.
  • solo  (23.10.21 10:44:14 ~ 10:44:33) 
Duyuruda kullanıcılar ve duyurular tablosu olsun.

Sadece en az 1 duyuru açmış kullanıcıları, duyurularıyla beraber getirmek istiyorsan INNER JOIN, "duyurusu varsa duyuruyu da getir, yoksa duyurusuz gelsin" diyorsan da LEFT JOIN kullanıyorsun.

E peki ya duyuruyu açan hesap silinmişse? Kullanıcı silindiği için o duyuruya kullanıcı tablosu üzerinden ulaşamazsın. O zaman RIGHT JOIN, kullanıcısı olmasa bile tüm duyurular gelsin diyor.

Bi de OUTER JOIN var, hem duyuru hem kullanıcı hepsini kombinle getir abi diyorsun.

RIGHT JOIN'in çok kullanılmama sebebi şu, madem duyurunun kullanıcısı yok, o zaman niye kullanıcı tablosu üzerinden ulaşmaya çalışayım ki o duyuruya? Direkt gider duyuru tablosuna sorgu atarım diyor insanlar. Kullanıcı bilgilerini de duyuru üzerinden LEFT JOIN ile kullanıcıya ulaşarak hallediyorlar.

Nasıl oturur bunlar? Valla bence pratikten başka yolu yok. Kendin database tasarla, sorguları yaz. Hackerrank'in SQL şeyi de fena değil: www.hackerrank.com
  • plutongezegendegilmi  (23.10.21 11:17:12) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.