عبارة SELECT (استعلام NoSQL)

ينطبق على: NoSQL

يتكون كل استعلام من SELECT عبارة واختياريا FROM وعبارات WHERE ، وفقا لمعايير ANSI SQL. عادةً ما يتم تعداد المصدر في جملة FROM، وتطبق عبارة WHERE عامل تصفية على المصدر لاسترداد مجموعة فرعية من عناصر JSON. ثم تعرض العبارة SELECT قيم JSON المطلوبة في قائمة التحديد.

بناء الجملة

SELECT <select_specification>  

<select_specification> ::=
      '*'
      | [DISTINCT] <object_property_list>
      | [DISTINCT] VALUE <scalar_expression> [[ AS ] value_alias]  
  
<object_property_list> ::=
{ <scalar_expression> [ [ AS ] property_alias ] } [ ,...n ]

الوسيطات

الوصف
<select_specification> الخصائص أو القيمة المراد تحديدها لمجموعة النتائج.
'*' تعين أنه يجب استرداد القيمة دون إجراء أي تغييرات. على وجه التحديد إذا كانت القيمة المعالجة كائنا، يتم استرداد جميع الخصائص.
<object_property_list> تحديد قائمة الخصائص التي سيتم استردادها. كل قيمة تم إرجاعها هي كائن مع الخصائص المحددة.
VALUE تعين أنه يجب استرداد قيمة JSON بدلاً من عنصر JSON الكامل. هذه الوسيطة، على عكس <property_list> لا تقوم بتضمين القيمة المتوقعة في كائن.
DISTINCT يجب إزالة التكرارات من الخصائص المتوقعة.
<scalar_expression> تعبير يمثل القيمة المطلوب حسابها. لمزيد من المعلومات، راجع قسم التعبيرات العددية للحصول على التفاصيل.

أمثلة

يحدد هذا المثال الأول قيمتي سلسلة ثابتة ويعيد صفيفا مع كائن واحد يحتوي على كلتا القيمتين. نظرا لأن القيم غير مسماة، يتم استخدام رقم تم إنشاؤه تسلسليا لتسمية حقل json المكافئ.

SELECT "Adventure", "Works"
[
  {
    "$1": "Adventure",
    "$2": "Works"
  }
]

في هذا المثال التالي، يتم استخدام إسقاط JSON لضبط البنية الدقيقة وأسماء الحقول لعنصر JSON الناتج. هنا، يتم إنشاء كائن JSON مع حقول مسماة department و team. لا يزال كائن JSON الخارجي غير مسمى، لذلك يتم استخدام رقم تم إنشاؤه ($1) لتسمية هذا الحقل.

SELECT {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "$1": {
      "department": "Sales",
      "team": "Field sales"
    }
  }
]

يوضح هذا المثال تبسيط مجموعة النتائج من المثال السابق لتبسيط التحليل. VALUE يتم استخدام الكلمة الأساسية هنا لمنع التفاف النتائج في كائن JSON آخر.

SELECT VALUE {
    department: "Sales",
    team: "Field sales"
}
[
  {
    "department": "Sales",
    "team": "Field sales"
  }
]

في هذا المثال، VALUE يتم استخدام الكلمة الأساسية مع سلسلة ثابتة لإنشاء صفيف من السلاسل كنتيجة لذلك.

SELECT VALUE "Sales"
[
  "Sales"
]

في هذا المثال النهائي، افترض أن هناك حاوية تحتوي على عنصرين مع حقول مختلفة من أنواع بيانات مختلفة.

[
  {
    "team": "Field sales",
    "identity": {
      "name": "Parker McLean"
    },
    "contact": [
      "206-555-0147"
    ]
  },
  {
    "team": "Field sales",
    "identity": {
      "name": "Beibit Shayakhmet"
    },
    "contact": [
      "206-555-0178"
    ]
  }
]

يستخدم استعلام المثال النهائي هذا مزيجا SELECT من عبارة والكلمة VALUE الأساسية وعبارة FROM وإسقاط JSON لتنفيذ استعلام مشترك مع تحويل النتائج إلى كائن JSON للعميل لتحليله.

SELECT VALUE {
    name: e.identity.name,
    team: e.team,
    phone: e.contact[0]
}
FROM
    employees e
[
  {
    "name": "Parker McLean",
    "team": "Field sales",
    "phone": "206-555-0147"
  },
  {
    "name": "Beibit Shayakhmet",
    "team": "Field sales",
    "phone": "206-555-0178"
  }
]

الملاحظات

  • SELECT * يكون بناء الجملة صالحا فقط إذا FROM كانت العبارة قد أعلنت اسما مستعارا واحدا بالضبط. SELECT * يوفر إسقاط الهوية، والتي يمكن أن تكون مفيدة إذا لم تكن هناك حاجة إلى إسقاط. SELECT * صالح فقط إذا FROM تم تحديد عبارة وتقديم مصدر إدخال واحد فقط.
  • كلاهما SELECT <select_list> و SELECT * هما "السكر المركب" ويمكن التعبير عنهما بدلا من ذلك باستخدام عبارات بسيطة SELECT :
    • SELECT * FROM ... AS from_alias ... يعادل: SELECT from_alias FROM ... AS from_alias ....
    • SELECT <expr1> AS p1, <expr2> AS p2,..., <exprN> AS pN [other clauses...] يعادل: SELECT VALUE { p1: <expr1>, p2: <expr2>, ..., pN: <exprN> }[other clauses...].