TOP

SQL-Ders 6. Hesaplanan (hesaplanan) alanlar

Hesaplanan alanları neden kullanmalısınız? Kural olarak, veritabanındaki bilgiler ayrı parçalar halinde sunulur çünkü verileri yapılandırmak ve üzerinde işlem yapmak daha kolaydır. Ancak çoğu zaman tek tek veri parçalarını değil, önceden birleştirilmiş ve işlenmiş bilgileri kullanmamız gerekecektir. Örneğin, müşterilerin adlarını ve soyadlarını birleştirmek, tablonun farklı sütunlarında bulunan adres öğelerini birleştirmek, metni ve tek tek kelimeleri, harfleri ve sembolleri işlemek, satın alma işleminin toplam maliyetini özetlemek genellikle gereklidir. Veritabanındaki bilgilere ilişkin istatistikleri görüntülemek için. Veriler genellikle ayrı "parçalarda" depolanır ve bu, istemci programının yanında ek işlem yapılmasını gerektirir. Ancak bir DBMS kullanarak önceden işlenmiş bilgileri almak mümkündür. Bu durumda hesaplama alanları yardımcı olur. Sorgu yürütüldüğünde otomatik olarak oluşturulurlar ve tabloda zaten mevcut olan sıradan sütunların görünümüne ve özelliklerine sahiptirler. Tek fark, fiziksel olarak hesaplanmış alanların bulunmamasıdır, dolayısıyla bunlar DB'de ek yer kaplamaz, ancak DBMS'nin "rastgele belleğinde" geçici olarak bulunur. DBMS tarafında işlem yapmanın avantajı veri işleme hızıdır.


1. Matematiksel işlemleri gerçekleştirmek

Hesaplanan alanları kullanmanın bir yolu, seçilen veriler üzerinde matematiksel işlemler gerçekleştirmektir. Yine Sumproduct tablomuzu kullanarak bunun nasıl gerçekleştiğine dair bir örnek verelim. Her ürünün ortalama satın alma fiyatını hesaplamanız gerektiğini varsayalım. Bunu yapmak için Tutar sütununu Quantity (miktar) olarak yeniden dağıtmanız gerekir:

Run SQLSELECT DISTINCT Product, Amount/Quantity 
FROM Sumproduct

Gördüğünüz gibi DBMS tüm ürün adlarını seçti ve ortalama maliyetlerini sorgunun yürütülmesi sırasında oluşturulan ayrı bir sütunda gösterdi. Ayrıca, benzersiz ürün adlarını görüntülememiz gereken ek bir DISTINCT operatörünü kullandığımızı da fark edebilirsiniz (bu olmasaydı, yinelenen kayıtlara sahip olurduk).

2. Takma ad kullanmak

Önceki örnekte her ürünün ortalama satın alma fiyatını hesapladık ve değeri hesaplama sütununda gösterdik. Ancak gelecekte adı bizim için bilgilendirici olmadığından bu alana başvurmamız sakıncalı olacaktır (DBMS alanın adını verdi - Expr1001). Ancak sorguda adını önceden belirterek, yani bir takma ad vererek, alanı bağımsız olarak adlandırabiliriz. Önceki örneği yeniden yazalım ve hesaplanan alan için bir takma ad belirleyelim:

Run SQLSELECT DISTINCT Product, Amount/Quantity AS AvgPrice 
FROM Sumproduct

Hesaplama alanımızın kendi adını AvgPrice aldığını görüyoruz. Bunun için AS operatörünü kullandık ve sonrasında ihtiyacımız olan ismi belirledik. SQL'de yalnızca temel matematik işlemlerinin desteklendiğine dikkat edilmelidir: toplama (+), çıkarma (-), çarpma (*), bölme (/). İşlem sırasını değiştirmek için yuvarlak parantezleri de kullanabilirsiniz.

Takma adlar genellikle yalnızca hesaplama alanlarını adlandırmak için değil aynı zamanda etkin olanları yeniden adlandırmak için de kullanılır. Etkin alanın uzun bir adı varsa veya adın yeterince bilgilendirici olmadığı durumlarda bu gerekli olabilir.

3. Alanların bağlantısı (birleştirme)

Matematiksel işlemlerin yanı sıra metni birleştirip ayrı bir alanda da görüntüleyebiliriz. Metni nasıl yapıştırabileceğinizi (birleştirebileceğinizi) düşünelim. MS Access'deki farklı sütunlardaki metinleri bağlamak için artı operatörü (+) kullanılır, örneğin:

Run SQLSELECT Month + ' ' + Product AS NewField, Quantity  
FROM Sumproduct

Bu örnekte değerleri iki sütunda birleştirdik ve sonucu yeni bir NewField alanına çıktıladık.

Artı operatörü (+), birden fazla sütundaki metni bağlamak (birleştirmek) için MySQL lehçesinde desteklenmez. Bu durumda CONCAT() işlevini kullanın.