İlk önce join, left join, inner join farkını belirtelim.
inner join ve join aynı anlamdadır ve kullanımı aynıdır. Onun için bundan sonra join yerine inner join kelimesini kullanacağız.
inner join ile left join in şöyle bir farkı var. inner join ile başka tabloyu birleştirdiğimizde eğer çağırdığımız tablodaki ilgili hücre değeri null ise asıl tablodan da o satırı listeleme ekranına getirmez. Veri kaybına sebep olur. Aynı tabloyu left join ile birleştirdiğimizde ilgili hücre değeri boş olsa bile o satırı listeleme ekranına getirir, hücre değeri ise boş görünür. inner join komutu, çağrılan tablodaki bütün hücre değerleri doluysa (doldurulması zorunlu alanlar için) kullanılabilir, tercih kullanıcıya kalmıştır.
select
cari.code as CARI_KOD,
cari.description as CARI_ACIKLAMA,
doviz.code as DOVIZ
from FinParty cari
inner join cari.currency doviz
Eğer komutlar bu şekilde yazılırsa program artık ilgili cari (FinParty) ile para birimi (Currency) tablosunun bağlantısını kuracak ve istediğimiz bilgiyi artık doviz tablosundan çağırmamızı sağlayacaktır.
Yukarıdaki şekliyle inner join komutunun çıktıları aşağıdaki gibi olur.
Görüldüğü gibi döviz birimi olan veriler gelir diğer veriler kaybolur. Halbuki biz değer girilmemiş olsa bile o hücreleri boş olarak görmek istiyoruz.
Örneğin Ürün/Hizmet Kartları için bir sorgu yazılırken doldurulması zorunlu olan 'KDV' yada 'Miktar Birimi' bilgisi çağrılacaksa inner join kullanılabilir. Ya da kullanıcı sadece dolu olan değerleri görmek de isteyebilir.
select
cari.code as CARI_KOD,
cari.description as CARI_ACIKLAMA,
doviz.code as DOVIZ
from FinParty cari
left join cari.currency doviz
Sorgu bu şekliyle yazılırsa çıktısı aşağıdaki gibi olacaktır.
select
cari.code as CARI_KOD,
cari.description as CARI_ACIKLAMA,
toplam.postedNet as NET_BAKIYE,
kurum.code as KURUM_KODU,
kurum.description as KURUM_ACIKLAMASI,
doviz.code as DOVIZ
from FinParty cari
left join cari.periodTotal as toplam
left join cari.entity as kurum
left join cari.currency as doviz
Burada sırasıyla;
left join cari.periodTotal as toplam
yazılarak “Cari”nin “Dönem Toplam”ı "toplam" olarak tanımlanmış ve yukarıda
toplam.postedNet as NET_BAKIYE
yazılarak ilgili Cari’nin “Net Bakiye”si sütunlara çağrılmış oluyor.
Aynı işlemler Kurum ve Döviz Bilgileri için de yapılmış ve sorguda görüntülenmiştir.
Bu sorguyla da aşağıdaki çıktı elde edilmektedir.
select
from FinParty cari
left join cari.currency as doviz
left join cari.periodTotal as toplam
left join toplam.period as donem
left join donem.txCurrency islem_para_birim
left join islem_para_birim.creatorUser olusturan_kisi
left join olusturan_kisi.groups as grup
left join grup.rights yetki_paketi