Aracılığıyla paylaş


Cosmos DB'de sorgu dili nedir (Azure ve Doku'da)

Sorgu dili, JSON verileriyle çalışmak için güçlü, SQL benzeri bir söz dizimi sağlar. Bu dil, SQL deneyimine sahip kullanıcılara tanıdık olacak şekilde tasarlanmıştır ve JSON belgelerinin esnekliğini ve hiyerarşik doğasını destekler. Bu makalede sorgu dilinin temel kavramları, söz dizimi ve özellikleri tanıtmaktadır.

Sorgu dilinin temel kavramları

Sorgu dili, JSON belgeleri olarak depolanan verilere açıklayıcı ve verimli erişim sağlamak için oluşturulur. Temeli olan dil, hiyerarşik ve esnek verilerle yerel olarak çalışacak şekilde tasarlanmıştır ve farklı yapılara sahip olabilecek belgeler üzerinde hem basit hem de karmaşık sorguları destekler.

Sorgular tanıdık bir SQL benzeri söz dizimi kullanılarak oluşturulur, ancak belge modeline uyarlanır. Bu uyarlama, geleneksel ilişkisel veritabanlarının aksine sabit bir şema olmadığı anlamına gelir; özellikler eksik olabilir veya belgeler arasında farklı türlerde olabilir. Dil büyük/küçük harfe duyarlıdır ve iç içe özelliklere, dizilere ve nesnelere doğrudan sorgular içinde başvurmayı destekler. Mantıksal, karşılaştırma ve aritmetik işleçler mevcuttur ve dil, NoSQL verilerinin esnekliğini benimserken SQL deneyimine sahip geliştiriciler için sezgisel olacak şekilde tasarlanmıştır.

Sorgu altyapısı, verileri verimli bir şekilde filtrelemek, sıralamak ve toplamak için dizinleri kullanarak otomatik olarak yüksek performans ve ölçeklenebilirlik için iyileştirilmiştir. Basit aramalardan karmaşık toplamalara ve alt sorgulara kadar çok çeşitli sorgu desenlerini destekler. Bu destek, sorgu altyapısını hem işlem hem de analitik iş yükleri için uygun hale getirir. Dil ayrıca dizilerle çalışmaya, null ve tanımsız değerleri işlemeye ve sonuçları esnek JSON şekillerinde yansıtmaya yönelik yapılar sağlar. Bu yapılar, geliştiricilerin tam olarak ihtiyaç duydukları verileri uygulamalarının gerektirdiği biçimde almasını sağlar.

Temel Sorgu Yapısı

Tipik bir sorgu aşağıdaki yan tümcelerden oluşur:

  • SELECT: Döndürülecek alanları veya değerleri belirtir.
  • FROM: Kaynak kapsayıcıyı tanımlar ve bir diğer ad atayabilir.
  • WHERE: Belgelere koşullara göre filtre uygulama.
  • ORDER BY: Sonuçları sıralar.
  • GROUP BY: Sonuçları bir veya daha fazla özelliğe göre gruplandırma.

Örnek: Basit Sorgu

SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC

Bu sorgu, fiyatı 20'den büyük olan ürünlerin ve name değerlerini artan düzende fiyata göre sıralanmış olarak döndürürid.

JSON Özellikleriyle Çalışma

Noktalı gösterimi veya köşeli ayraç gösterimini kullanarak iç içe özelliklere erişebilirsiniz:

SELECT p.manufacturer.name, p["metadata"].sku
FROM products p

Diziler veya alt sorgular kullanılarak JOIN geçirilebilir:

SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors

Verileri Filtreleme

WHERE yan tümcesi aritmetik, mantıksal, karşılaştırma ve dize işlemleri dahil olmak üzere çok çeşitli işleçleri destekler:

SELECT *
FROM products p
WHERE p.category IN ("Accessories", "Clothing") AND p.price BETWEEN 10 AND 50

Toplama ve Gruplandırma

Toplama işlevlerini ve grup sonuçlarını kullanabilirsiniz:

SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category

Distinct, Top ve Like

  • DISTINCT yinelenen değerleri kaldırır.
  • TOP N sonuç sayısını sınırlar.
  • LIKE joker karakterlerle desen eşleştirmeyi destekler.
SELECT DISTINCT VALUE p.category
FROM products p

SELECT TOP 5 *
FROM products p
ORDER BY p.price DESC

SELECT *
FROM products p
WHERE p.name LIKE "%bike%"

Alt Sorgular

Alt sorgular, dizilerdeki değerlerin varlığını denetleme de dahil olmak üzere daha gelişmiş filtreleme ve projeksiyon sağlar:

SELECT VALUE p.name
FROM products p
WHERE EXISTS (
    SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)