24 Mayıs 2016 Salı

SQL

SQL Declarative Bir Dildir
C++, Java gibi imperative dillerde kod şöyle yazılır.
Declare a new List called ExpensiveItemsNames;
Foreach Item in Items:
If ItemPrice > 100 then
Add ItemName to ExpensiveItemsNames

SQL declarative bir dil olduğu için kod şöyle yazılır. Kontrol akışı yoktur.
SELECT ItemName FROM Items
WHERE ItemPrice > 100

Left Join
Left join aşağıdaki gibi yapılır.

Bu işleme alternatif olabilecek ve daha hızlı çalıştığı iddia edilen cüme ise not exists kullanmak. Örnek:

Self Join
Aynı tablonun iki defa kendi kendiyle birleştirilmesi demek. Aralarında ilişki bulunan satırları (employee-manager ilişkisi gibi) çekmek için kullanılacağı gibi, bazı satırları elemek için de kullanılabilir.

Aşağıdaki bir self join örneğini buradan aldım.

Inner join'de aynı tabloya iki farklı isim verilir ve bu isimler kullanılarak = operatörü ile bir kesişim alınır. Örnekte nufüsu 0'dan farklı olan tüm regionlar arasında en küçük nufüsa sahip regionlar bulunuyor.

SELECT region, name, population
 FROM bbc x
 WHERE population <= ALL (SELECT population FROM bbc y WHERE y.region=x.region AND population>0)

Inner Join
İki tablonun kesişimini almak demek.
Inner Joining three tables sorusundan aşağıdaki aldım.
Union
Union iki farklı tabloyu birleştirmek için kullanılır.

Union ve Union All arasındaki fark
Sql ile kullanılabilen union ve union all birleştirme operatörleri farklı işler yaparlar.

Konuyu açıklayan güzel bir yazıyı burada buldum. Örnek resimileri de aynı yerden aldım.
A ve B isimli iki tane tablomuz olsun.
Bu iki tabla aynı veriyapısına sahip ve iki tablonun da birleşimini almak istiyoruz. union kullanırsak sonuç distinct ve sort edilmiş olarak veriliyor.  union all kullanırsak sonuç sadece iki tablonun birleşimi oluyor. Herhangi bir ayıklama yapılmıyor.
union ile ayıklama yapıldığı (distinct ve sort işlemleri) aşağıdaki execution plan'den de görülebilir.

Benzer bir örnek ise burada var. Yine aynı yerden aldığım örnekte de görüldüğü gibi union distinct kayıtları getirirken, union all ayıklama yapmadan herşeyi birleştiriyor.

Hibernate ve Union
Hibernate nesne seviyesinde çalıştığı için, SQL gibi union kullanarak bir kümenin alt kümesini döndüremiyor. Bunu yapabilmesi için çalışma esnasında yeni bir nesne tipi yaratabilmesi ve döndürebilmesi gerekir ancak maalesef henüz bu tür yeteneklere sahip değil.

Ancak eğer union işlemi aynı nesne üzerinde ise, hibernate halen kullanılabilir. Bu konu ile ilgili bir cevabı burada bulabilirsiniz.

Hiç yorum yok:

Yorum Gönder