الكلمات الرئيسية في Azure Cosmos DB

ينطبق على: واجهة برمجة تطبيقات SQL

توضح هذه المقالة الكلمات الأساسية التي يمكن استخدامها في استعلامات Azure Cosmos DB SQL.

‏‏بين

يمكنك استخدام الكلمة الرئيسية BETWEEN للتعبير عن استعلامات مقابل نطاقات من السلاسل أو القيم العددية. على سبيل المثال، يُرجع الاستعلام التالي جميع العناصر التي يكون فيها تقدير الطفل الأول من 1 إلى 5، ضمناً.

    SELECT *
    FROM Families.children[0] c
    WHERE c.grade BETWEEN 1 AND 5

يمكنك أيضاً استخدام الكلمة الرئيسية BETWEEN في عبارة SELECT، كما في المثال التالي.

    SELECT (c.grade BETWEEN 0 AND 10)
    FROM Families.children[0] c

في SQL API، على عكس ANSI SQL، يمكنك التعبير عن استعلامات النطاق مقابل خصائص الأنواع المختلطة. على سبيل المثال، قد يكون grade رقماً مثل 5 في بعض العناصر وسلسلة مثل grade4 في عناصر أخرى. في هذه الحالات، كما هو الحال في JavaScript، ينتج عن المقارنة بين النوعين المختلفين Undefined، لذلك يُتخطى العنصر.

مميز

تحذف الكلمة الرئيسية DISTINCT التكرارات في إسقاط الاستعلام.

في هذا المثال، يعرض الاستعلام قيماً لكل اسم أخير:

SELECT DISTINCT VALUE f.lastName
FROM Families f

والنتائج هي:

[
    "Andersen"
]

يمكنك أيضاً عرض كائنات فريدة. في هذه الحالة، لا يوجد حقل الاسم الأخير في أحد المستندين، لذلك يُرجع الاستعلام كائناً فارغاً.

SELECT DISTINCT f.lastName
FROM Families f

والنتائج هي:

[
    {
        "lastName": "Andersen"
    },
    {}
]

يمكن أيضاً استخدام DISTINCT في الإسقاط داخل استعلام فرعي:

SELECT f.id, ARRAY(SELECT DISTINCT VALUE c.givenName FROM c IN f.children) as ChildNames
FROM f

يعرض هذا الاستعلام مصفوفة تحتوي على اسم معين لكل طفل مع إزالة التكرارات. يسمى هذا الصفيف باسم ChildNames ويعرض في الاستعلام الخارجي.

والنتائج هي:

[
    {
        "id": "AndersenFamily",
        "ChildNames": []
    },
    {
        "id": "WakefieldFamily",
        "ChildNames": [
            "Jesse",
            "Lisa"
        ]
    }
]

لا يتم دعم الاستعلامات التي تحتوي على وظيفة نظام مجمعة واستعلام فرعي باستخدام DISTINCT إلا في إصدارات عدة تطوير برامج محددة. على سبيل المثال، لا يتم دعم الاستعلامات بالشكل التالي إلا في إصدارات عدة تطوير البرامج المحددة أدناه:

SELECT COUNT(1) FROM (SELECT DISTINCT f.lastName FROM f)

إصدارات عدة تطوير البرامج المدعومة:

SDK الإصدارات المدعومة
NET. SDK 3.18.0 أو أحدث
Java SDK 4.19.0 أو أحدث
Node.js SDK غير مدعوم
Python SDK غير مدعوم

توجد بعض القيود الإضافية على الاستعلامات ذات وظيفة النظام المجمعة واستعلام فرعي باستخدام DISTINCT. الاستعلامات أدناه غير مدعومة:

تقييد مثال
عبارة WHERE في الاستعلام الخارجي SELECT COUNT(1) FROM (SELECT DISTINCT VALUE c.lastName FROM c) AS lastName WHERE lastName = "Smith"
عبارة ORDER BY في الاستعلام الخارجي SELECT VALUE COUNT(1) FROM (SELECT DISTINCT VALUE c.lastName FROM c) AS lastName ORDER BY lastName
عبارة GROUP BY في الاستعلام الخارجي SELECT COUNT(1) as annualCount, d.year FROM (SELECT DISTINCT c.year, c.id FROM c) AS d GROUP BY d.year
استعلام فرعي متداخل SELECT COUNT(1) FROM (SELECT y FROM (SELECT VALUE StringToNumber(SUBSTRING(d.date, 0, 4 FROM (SELECT DISTINCT c.date FROM c) d) AS y WHERE y > 2012)
تجميعات متعددة SELECT COUNT(1) as AnnualCount, SUM(d.sales) as TotalSales FROM (SELECT DISTINCT c.year, c.sales, c.id FROM c) AS d
COUNT() يجب أن تحتوي على 1 كمعلمة SELECT COUNT(lastName) FROM (SELECT DISTINCT VALUE c.lastName FROM c) AS lastName

LIKE

ترجع قيمة منطقية بناءً على ما إذا كانت سلسلة أحرف معينة تطابق نمطاً محدداً. يمكن أن يشتمل النمط على أحرف عادية وأحرف بدل. يمكنك كتابة استعلامات مكافئة منطقياً باستخدام إما الكلمة الرئيسية LIKE أو وظيفة النظام RegexMatch. ستلاحظ استخدام الفهرس نفسه بغض النظر عن المؤشر الذي تختاره. لذلك، يجب عليك استخدام LIKE إذا كنت تفضل تركيبها أكثر من التعبيرات العادية.

ملاحظة

نظراً إلى إمكانية LIKE استخدام فهرس، يجب عليك إنشاء فهرس نطاق للخصائص التي تقارن باستخدام LIKE.

يمكنك استخدام أحرف البدل التالية مع LIKE:

حرف البدل الوصف مثال
% أي سلسلة من صفر أو أكثر من الأحرف WHERE c.description LIKE “%SO%PS%”
_ (شرطة سفلية) أي حرف واحد WHERE c.description LIKE "%SO_PS%"
[ ] أي حرف واحد ضمن النطاق المحدد ([a-f]) أو مجموعة ([abcdef]). WHERE c.description LIKE “%SO[t-z]PS%”
[^] أي حرف مفرد ليس ضمن النطاق المحدد ([^ a-f]) أو مجموعة ([^ abcdef]). WHERE c.description LIKE “%SO[^abc]PS%”

استخدام LIKE مع حرف البدل %

يتطابق الحرف % مع أي سلسلة مكونة من صفر أو أكثر من الأحرف. على سبيل المثال، بوضع % في بداية النمط ونهايته، يقوم الاستعلام التالي بإرجاع جميع العناصر التي تحتوي على وصف يحتوي على fruit:

SELECT *
FROM c
WHERE c.description LIKE "%fruit%"

إذا استخدمت حرف % فقط في نهاية النمط، فلن تقوم بإرجاع سوى العناصر ذات الوصف الذي يبدأ بـ fruit:

SELECT *
FROM c
WHERE c.description LIKE "fruit%"

باستخدام NOT LIKE

يعرض المثال أدناه جميع العناصر مع وصف لا يحتوي على fruit:

SELECT *
FROM c
WHERE c.description NOT LIKE "%fruit%"

استخدام شرط الهروب

يمكنك البحث عن الأنماط التي تتضمن حرفاً واحداً أو أكثر من أحرف البدل باستخدام جملة ESCAPE. على سبيل المثال، إذا أردت البحث عن الأوصاف التي تحتوي على السلسلة 20-30%، فلن ترغب في تفسير % على أنه حرف بدل.

SELECT *
FROM c
WHERE c.description LIKE '%20-30!%%' ESCAPE '!'

استخدام أحرف البدل كأحرف حرفية

يمكنك تضمين أحرف البدل بين قوسين لمعاملتها كأحرف حرفية. عندما تقوم بإحاطة حرف بدل بين قوسين، فإنك تزيل أي سمات خاصة. نضرب فيما يلي بعض الأمثلة:

النمط المعنى
LIKE “20-30[%]” 20-30%
LIKE “[_]n” _n
LIKE “[ [ ]” [
LIKE “]” ]

IN

استخدم الكلمة الأساسية IN للتحقق مما إذا كانت القيمة المحددة تطابق أي قيمة في القائمة. على سبيل المثال، يعرض طلب البحث التالي جميع عناصر العائلة حيث يكون id هو WakefieldFamily أو AndersenFamily.

    SELECT *
    FROM Families
    WHERE Families.id IN ('AndersenFamily', 'WakefieldFamily')

يعرض المثال التالي جميع العناصر حيث تكون الحالة هي أي من القيم المحددة:

    SELECT *
    FROM Families
    WHERE Families.address.state IN ("NY", "WA", "CA", "PA", "OH", "OR", "MI", "WI", "MN", "FL")

توفر واجهة برمجة تطبيقات SQL دعماً لـ التكرار عبر مصفوفات JSON، مع إضافة بنية جديدة عبر الكلمة الأساسية in في مصدر FROM.

إذا قمت بتضمين مفتاح القسم الخاص بك في عامل التصفية IN، فسيتم تصفية استعلامك تلقائياً إلى الأقسام ذات الصلة فقط.

TOP

ترجع الكلمة الأساسية TOP أول عدد N من نتائج الاستعلام بترتيب غير محدد. لأفضل ممارسة، استخدم TOP مع عبارة ORDER BY لقصر النتائج على أول N عدد من القيم المرتبة. الجمع بين هاتين الجملتين هو الطريقة الوحيدة للإشارة بشكل متوقع إلى الصفوف التي يؤثر عليها TOP.

يمكنك استخدام TOP بقيمة ثابتة، كما في المثال التالي د، أو مع قيمة متغيرة باستخدام الاستعلامات ذات المعلمات.

    SELECT TOP 1 *
    FROM Families f

والنتائج هي:

    [{
        "id": "AndersenFamily",
        "lastName": "Andersen",
        "parents": [
           { "firstName": "Thomas" },
           { "firstName": "Mary Kay"}
        ],
        "children": [
           {
               "firstName": "Henriette Thaulow", "gender": "female", "grade": 5,
               "pets": [{ "givenName": "Fluffy" }]
           }
        ],
        "address": { "state": "WA", "county": "King", "city": "Seattle" },
        "creationDate": 1431620472,
        "isRegistered": true
    }]

الخطوات التالية