İlişkisel Veritabanı Sorgusu¶
Emakin, ilişkisel veritabanlarıyla etkileşim kurmak için basitlik ve güvenliği ön planda tutan kendine özgü bir sorgu modeli kullanır. SQL olmayan bu model, hem iş kullanıcılarının hem de geliştiricilerin erişebileceği kullanıcı dostu bir arayüz sağlar. Emakin, veritabanında yürütülmek üzere bu sorgu modelini dahili olarak SQL'e dönüştürür. Birleştirme, gruplama ve having ifadeleri gibi karmaşık SQL kavramları, sağlanan sorgu modeline göre Emakin sistemi tarafından otomatik olarak işlenir.
Sorgu İfadeleri¶
Sorgu ifadeleri tablo alanlarını benzersiz biçimde tanımlar. Belirsizliği önlemek için şu biçimleri izlerler: Field, Relation.Fieldveya Relation.Relation.Field.
Örneğin, Customers.Name ifadesi, Name alanına Customers tablosunda başvurur. Sorgu ifadeleri, sorgu modelinin hem Columns hem de Criteria bölümlerinde kullanılır.
Bir Customers tablosunu ele alalım; aşağıdaki ifadeler ilişkili verilere nasıl erişilebileceğini gösterir:
Name->Customers.NameOrders.Amount->Orders.AmountOrders.Product.Name->Products.NameOrders.Product.Category.Name->Categories.Name
İfade İşlevleri¶
Temel alan başvurularının yanı sıra sorgu modeli, gelişmiş veri işleme ve toplama için işlev çağrılarını destekler.
Matematiksel İşlevler¶
Sütun ifadeleri matematiksel işlemler içerebilir:
- Toplama:
A + B - Çıkarma:
A - B - Çarpma:
A * B - Bölme:
A / B
Bu matematiksel işlevlerin yorumlanmasının doğrudan SQL'e çevrildiğini ve sonuçların temel veritabanı sistemine bağlı olarak biraz farklılık gösterebileceğini unutmayın.
Değer İşlevleri¶
- Now(): Geçerli tarih ve saati döndürür.
Tarih ve Saat İşlevleri¶
-
DatePart(part, date): Tarih değerinden belirtilen bir bölümü çıkarır.
partŞunlardan biri olabilir:'Year','Quarter','Month','Week','Day','Hour','Minute','Second'. Örnek:DatePart('Year', Orders.OrderDate) -
DateDiff(part, date1, date2): İki tarih arasındaki farkı hesaplar.
part, ile aynı değerleri kullanır:DatePart. Örnek:DateDiff('Day', Orders.OrderDate, Orders.ShipDate) -
DateTrunc(part, date): Tarih değerini belirtilen bölüme göre keser.
part, ile aynı değerleri kullanır:DatePartÖrnek:DateTrunc('Month', Orders.OrderDate)
Toplama İşlevleri¶
Toplama işlevleri birden çok değer üzerinde işlem yaparak tek bir sonuç döndürür:
- Count(): Satır sayısını hesaplar.
- Sum(): Değerlerin toplamını hesaplar.
- SumDistinct(): Benzersiz değerlerin toplamını hesaplar.
- Avg(): Değerlerin ortalamasını hesaplar.
- AvgDistinct(): Benzersiz değerlerin ortalamasını hesaplar.
- Min(): En küçük değeri döndürür.
- Max(): En büyük değeri döndürür.
- StdDev(): Standart sapmayı hesaplar.
Sorgu Modelinin Gösterimi¶
Emakin sorgu modeli XML veya JSON kullanılarak gösterilebilir. Form sorgusu tasarımcısı XML'i kullanırken, komut dosyası işlevleri gibi \$Database.GetData JSON kullanır.
Örnek (XML):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Örnek (JSON):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
Bu örnekler, verileri Orders şemasındaki CRM tablosundan almak için; ürün adı "Apple" olan siparişleri filtreleyen ve sonuçları ürün adına göre sıralayan bir sorgunun nasıl oluşturulacağını gösterir.