حيث لا يمكن استخدام الوظائف المجمعة. وظائف SQL الإجمالية

24.04.2019

كيف يمكنني معرفة عدد طرازات أجهزة الكمبيوتر التي ينتجها مورد معين؟ كيفية تحديد متوسط ​​سعر أجهزة الكمبيوتر التي لها نفس الخصائص التقنية؟ يمكن الإجابة على هذه الأسئلة والعديد من الأسئلة الأخرى المتعلقة ببعض المعلومات الإحصائية باستخدام الوظائف النهائية (الإجمالية).. يوفر المعيار الوظائف الإجمالية التالية:

كل هذه الوظائف ترجع قيمة واحدة. وفي الوقت نفسه، وظائف العدد، الحد الأدنىو الأعلىتنطبق على أي نوع من البيانات، في حين مجموعو متوسطيتم استخدامها فقط للحقول الرقمية. الفرق بين الوظيفة عدد(*)و عدد(<имя поля>) هو أن الثاني لا يأخذ في الاعتبار القيم الخالية عند الحساب.

مثال. تعرف على الحد الأدنى والحد الأقصى لسعر أجهزة الكمبيوتر الشخصية:

مثال. أوجد العدد المتوفر من أجهزة الكمبيوتر التي تنتجها الشركة المصنعة أ:

مثال. إذا كنا مهتمين بعدد النماذج المختلفة التي تنتجها الشركة المصنعة أ، فيمكن صياغة الاستعلام على النحو التالي (باستخدام حقيقة أنه يتم تسجيل كل نموذج في جدول المنتج مرة واحدة):

مثال. ابحث عن عدد النماذج المختلفة المتاحة التي تنتجها الشركة المصنعة أ. الاستعلام مشابه للاستعلام السابق، حيث كان مطلوبًا تحديد العدد الإجمالي للنماذج التي تنتجها الشركة المصنعة أ. هنا تحتاج أيضًا إلى العثور على عدد النماذج المختلفة في طاولة الكمبيوتر (أي تلك المتاحة للبيع).

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

إذا أردنا الحصول على عدد نماذج الكمبيوتر الشخصي المنتجة الجميعالشركة المصنعة، سوف تحتاج إلى استخدام جملة GROUP BY، التالية نحويا أين الجمل.

جملة GROUP BY

جملة GROUP BYيستخدم لتحديد مجموعات خطوط الإخراج التي يمكن تطبيقها عليها الوظائف المجمعة (COUNT وMIN وMAX وAVG وSUM). إذا كانت هذه الجملة مفقودة وتم استخدام الوظائف التجميعية، فسيتم ذكر جميع الأعمدة ذات الأسماء فيها يختار، يجب أن تكون مدرجة في وظائف مجمعة، وسيتم تطبيق هذه الوظائف على مجموعة الصفوف بأكملها التي تلبي مسند الاستعلام. وبخلاف ذلك، كافة أعمدة قائمة SELECT غير مشمولفي الوظائف الإجمالية يجب تحديدها في جملة GROUP BY. ونتيجة لذلك، يتم تقسيم جميع صفوف استعلام الإخراج إلى مجموعات تتميز بنفس مجموعات القيم الموجودة في هذه الأعمدة. بعد ذلك، سيتم تطبيق الوظائف الإجمالية على كل مجموعة. يرجى ملاحظة أنه بالنسبة لـ GROUP BY، يتم التعامل مع جميع القيم NULL على أنها متساوية، أي. عند التجميع حسب حقل يحتوي على قيم NULL، ستقع جميع هذه الصفوف في مجموعة واحدة.
لو إذا كان هناك جملة GROUP BY، في جملة SELECT لا توجد وظائف مجمعة، فسيقوم الاستعلام ببساطة بإرجاع صف واحد من كل مجموعة. يمكن استخدام هذه الميزة، إلى جانب الكلمة الأساسية DISTINCT، لإزالة الصفوف المكررة في مجموعة النتائج.
دعونا نلقي نظرة على مثال بسيط:
حدد النموذج، COUNT(model) AS Qty_model، AVG(price) AS Avg_price
من جهاز الكمبيوتر
المجموعة حسب النموذج؛

في هذا الطلب، يتم تحديد عددها ومتوسط ​​تكلفتها لكل طراز من أجهزة الكمبيوتر الشخصية. تشكل جميع الصفوف التي لها نفس قيمة النموذج مجموعة، ويحسب إخراج SELECT عدد القيم ومتوسط ​​قيم السعر لكل مجموعة. ستكون نتيجة الاستعلام الجدول التالي:
نموذج الكمية_نموذج متوسط_السعر
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

إذا كان SELECT يحتوي على عمود تاريخ، فسيكون من الممكن حساب هذه المؤشرات لكل تاريخ محدد. للقيام بذلك، تحتاج إلى إضافة التاريخ كعمود تجميع، ثم سيتم حساب الوظائف المجمعة لكل مجموعة من القيم (تاريخ النموذج).

هناك عدة محددة قواعد أداء الوظائف المجمعة:

  • إذا نتيجة للطلب لم يتم تلقي أي صفوف(أو أكثر من صف واحد لمجموعة معينة)، فلا توجد بيانات مصدر لحساب أي من الوظائف المجمعة. في هذه الحالة، ستكون نتيجة الدالات COUNT صفرًا، وستكون نتيجة جميع الوظائف الأخرى NULL.
  • دعوىوظيفة مجمعة لا يمكن أن تحتوي في حد ذاتها على وظائف مجمعة(وظيفة من وظيفة). أولئك. في استعلام واحد، من المستحيل، على سبيل المثال، الحصول على الحد الأقصى من القيم المتوسطة.
  • نتيجة تنفيذ الدالة COUNT هي عدد صحيح(عدد صحيح). ترث الوظائف التجميعية الأخرى أنواع بيانات القيم التي تعالجها.
  • إذا أنتجت الدالة SUM نتيجة أكبر من الحد الأقصى لقيمة نوع البيانات المستخدم، خطأ.

لذلك، إذا كان الطلب لا يحتوي على GROUP BY الجمل، الذي - التي وظائف مجمعةمتضمن في جملة التحديد، يتم تنفيذها على كافة صفوف الاستعلام الناتجة. إذا كان الطلب يحتوي على جملة GROUP BY، كل مجموعة من الصفوف لها نفس قيم عمود أو مجموعة أعمدة محددة فيها جملة GROUP BY، يشكل مجموعة، و وظائف مجمعةيتم إجراؤها لكل مجموعة على حدة.

وجود العرض

لو حيث الشرطيةيحدد المسند لتصفية الصفوف، ثم وجود العرضينطبق بعد التجميعلتحديد مسند مشابه يقوم بتصفية المجموعات حسب القيم وظائف مجمعة. هذا الشرط ضروري للتحقق من صحة القيم التي تم الحصول عليها باستخدام وظيفة مجمعةليس من صفوف فردية لمصدر السجل المحدد في من جملة، و من مجموعات من هذه الخطوط. ولذلك، لا يمكن احتواء مثل هذا الشيك في حيث الشرطية.

يحدد معيار ISO الخمسة التالية وظائف التجميع:

عدد- إرجاع عدد القيم في العمود المحدد؛

مجموع- إرجاع مجموع القيم في العمود المحدد؛

متوسط– إرجاع القيمة المتوسطة في العمود المحدد؛

دقيقة- إرجاع الحد الأدنى للقيمة في العمود المحدد؛

الأعلى- إرجاع الحد الأقصى للقيمة في العمود المحدد.

تعمل كل هذه الوظائف على القيم الموجودة في عمود جدول واحد وترجع قيمة واحدة. تنطبق الدالات COUNT وMIN وMAX على كل من الحقول الرقمية وغير الرقمية، بينما يمكن استخدام الدالات SUM وAVG فقط للحقول الرقمية. باستثناء COUNT(*)، عند تقييم نتائج أي دالة، يتم أولاً حذف جميع القيم الخالية، ثم يتم تطبيق العملية المطلوبة فقط على القيم غير الفارغة المتبقية في العمود. يعد خيار COUNT(*) استخدامًا خاصًا للدالة COUNT — والغرض منه هو حساب جميع الصفوف في الجدول، بغض النظر عما إذا كان يحتوي على قيم فارغة أو مكررة أو أي قيم أخرى. إذا كنت تريد استبعاد القيم المكررة قبل استخدام وظيفة التجميع، فيجب أن تسبق اسم العمود في تعريف الوظيفة بالكلمة الأساسية DISTINCT. يسمح معيار ISO باستخدام الكلمة الأساسية ALL للإشارة بوضوح إلى أن استبعاد القيمة المكررة غير مطلوب، على الرغم من أن هذه الكلمة الأساسية يتم تضمينها بشكل افتراضي في حالة عدم تحديد مؤهل آخر. الكلمة الأساسية DISTINCT ليس لها أي معنى بالنسبة إلى الدالتين MIN وMAX. ومع ذلك، قد يؤثر استخدامه على نتائج الدالتين SUM وAVG، لذا يجب عليك التفكير مسبقًا فيما إذا كان يجب أن يكون موجودًا في كل حالة معينة. بالإضافة إلى ذلك، لا يمكن تحديد الكلمة الأساسية DISTINCT إلا مرة واحدة في كل طلب.

تجدر الإشارة إلى أنه لا يمكن استخدام وظائف التجميع إلا في قائمة SELECT وفي جملة HAVING (انظر القسم 5.3.4). وفي جميع الحالات الأخرى، فإن استخدام هذه الوظائف أمر غير مقبول. إذا كانت قائمة SELECT تحتوي على وظيفة تجميع، ولا يحتوي نص الاستعلام على عبارة GROUP BY للسماح بتجميع البيانات، فلا يمكن أن يتضمن أي من عناصر قائمة SELECT أي مراجع أعمدة ما لم يتم استخدام العمود كمعلمة دالة تجميع. على سبيل المثال، الاستعلام التالي غير صحيح:

يختاررقم الموظف،عدد (مرتب)

منطاقم عمل؛

الخطأ هو أنه لا يوجد بناء في هذا الطلب مجموعة من، ويتم الوصول إلى عمود "لا يوجد موظفين" في قائمة SELECT دون استخدام وظيفة التجميع.

مثال 13: استخدام الدالة COUNT(*).حدد عدد العقارات المؤجرة التي يزيد إيجارها عن 350 جنيهًا إسترلينيًا شهريًا،

حدد العدد(*) عدد AS

منعقار للإيجار

أينالإيجار> 350؛

يتم تطبيق التقييد على حساب تلك العقارات المؤجرة فقط التي يزيد إيجارها عن 350 جنيهًا إسترلينيًا شهريًا من خلال استخدام شرط WHERE. يمكن تحديد العدد الإجمالي للعقارات المؤجرة التي تستوفي شرطًا محددًا باستخدام وظيفة التجميع COUNT. يتم عرض نتائج الاستعلام في الجدول. 23.

الجدول 23

عدد

مثال 14. باستخدام الدالة COUNT(DISTINCT).حدد عدد العقارات المستأجرة المختلفة التي شاهدها العملاء في مايو 2001.

حدد العدد (متميزpropertyNo) AS العد

منالمعاينة

مرة أخرى، يتم تحديد نتائج الاستعلام لتقتصر فقط على تلك العقارات المؤجرة التي تم فحصها في مايو 2001 باستخدام جملة WHERE. يمكن تحديد العدد الإجمالي للكائنات التي تم فحصها والتي تستوفي الشرط المحدد باستخدام وظيفة التجميع COUNT. ومع ذلك، نظرا لأن نفس الكائن يمكن عرضه عدة مرات من قبل عملاء مختلفين، فمن الضروري تحديد الكلمة الأساسية DISTINCT في تعريف الوظيفة - وهذا سيسمح باستبعاد القيم المكررة من الحساب. يتم عرض نتائج الاستعلام في الجدول. 24.

الجدول 24

مثال 16. استخدام وظائف MIN وMAXnAVG.حساب الحد الأدنى والحد الأقصى ومتوسط ​​الأجور.

حدد الحد الأدنى(مرتب) مثلدقيقة, الأعلى(مرتب) مثلالأعلى، متوسط(مرتب) مثلمتوسط

منطاقم عمل؛

في هذا المثال، تحتاج إلى معالجة المعلومات المتعلقة بجميع موظفي الشركة، لذلك لا تحتاج إلى استخدام جملة WHERE. يمكن حساب القيم المطلوبة باستخدام وظائف MIN وMAX وAVG المطبقة على عمود الرواتب في جدول الموظفين. يتم عرض نتائج الاستعلام في الجدول. 26.

الجدول 26.

نتيجة الطلب

دقيقة الأعلى متوسط
9000.00 30000.00 17000.00

تجميع النتائج (GROUP BY بناء).تتشابه أمثلة البيانات الموجزة أعلاه مع سطور الملخص التي توجد عادة في نهاية التقارير. ونتيجة لذلك، يتم ضغط كافة بيانات التقرير التفصيلية في سطر ملخص واحد. ومع ذلك، في كثير من الأحيان يكون من الضروري إنشاء الإجماليات الفرعية في التقارير. يمكن تحديد جملة GROUP BY في عبارة SELECT لهذا الغرض. يتم استدعاء الاستعلام الذي يحتوي على جملة GROUP BY طلب التجميع،لأنه يقوم بتجميع البيانات الناتجة عن عملية SELECT ثم يقوم بإنشاء صف إجمالي واحد لكل مجموعة على حدة. يتم استدعاء الأعمدة المدرجة في جملة GROUP BY أعمدة مجمعة.يتطلب معيار ISO أن تكون عبارات SELECT وGROUP BY مرتبطة ارتباطًا وثيقًا. عند استخدام جملة GROUP BY في عبارة SELECT، يجب أن يكون لكل عنصر قائمة في قائمة SELECT المعنى الوحيد للمجموعة بأكملها.علاوة على ذلك، يمكن أن تتضمن جملة SELECT فقط الأنواع التالية من العناصر:

أسماء الأعمدة؛

وظائف التجميع؛

الثوابت؛

التعبيرات التي تتضمن مجموعات من العناصر المذكورة أعلاه.

يجب أن تظهر أيضًا جميع أسماء الأعمدة التي تظهر في قائمة SELECT في جملة GROUP BY، ما لم يتم استخدام اسم العمود فقط في وظيفة التجميع. والعكس ليس صحيحًا دائمًا - فقد تحتوي جملة GROUP BY على أسماء أعمدة غير موجودة في قائمة SELECT. إذا تم استخدام جملة WHERE مع جملة GROUP BY، فستتم معالجتها أولاً، ويتم تجميع الصفوف التي تفي بشرط البحث فقط. يحدد معيار ISO أنه عند التجميع، يتم التعامل مع جميع القيم المفقودة على قدم المساواة. إذا كان صفان من الجدول في نفس عمود التجميع يحتويان على قيم فارغة وقيم متطابقة في جميع أعمدة التجميع الأخرى غير الخالية، فسيتم وضعها في نفس المجموعة.

المثال 17: استخدام البنية GROUP BY.تحديد عدد الموظفين العاملين في كل قسم من أقسام الشركة وإجمالي أجورهم.

يختارفرع لا, عدد(رقم الموظف) مثلعدد، مجموع(مرتب) مثلمجموع

منطاقم عمل

مجموعة منرقم الفرع

ترتيب حسبفرع رقم؛

ليست هناك حاجة لتضمين أسماء أعمدة الموظفين والرواتب في قائمة عناصر GROUP BY لأنها تظهر فقط في قائمة SELECT مع وظائف التجميع. وفي الوقت نفسه، لا يرتبط عمود BranchNo في قائمة جملة SELECT بأي وظيفة تجميع ولهذا السبب يجب تحديده في جملة GROUP BY. يتم عرض نتائج الاستعلام في الجدول. 27.

الجدول 27

نتيجة الطلب

رقم الفرع عدد مجموع
ب003 54000.00
ب005 39000.00
ب007 9000.00

من الناحية النظرية، عند معالجة هذا الطلب، يتم تنفيذ الإجراءات التالية:

1. يتم توزيع صفوف جدول الموظفين إلى مجموعات حسب القيم الموجودة في عمود رقم قسم الشركة. يوجد داخل كل مجموعة بيانات عن جميع العاملين في أحد أقسام الشركة. في مثالنا، سيتم إنشاء ثلاث مجموعات، كما هو موضح في الشكل. 1.

2. لكل مجموعة يتم حساب إجمالي عدد الصفوف يساوي عدد الموظفين في القسم وكذلك مجموع القيم في عمود الرواتب وهو مجموع رواتب جميع الموظفين في القسم الذي يهمنا. يتم بعد ذلك إنشاء صف ملخص واحد لمجموعة الصفوف المصدر بأكملها.

3. يتم فرز الصفوف الناتجة من الجدول الناتج بترتيب تصاعدي لرقم الفرع المحدد في العمود BranchNo.

رقم الفرع رقم الموظف مرتب
В00Z SG37 12000.00
В00Z لجنة الدراسات 14 18000.00
В00Z SG5 24000.00
ب005 SL21 30000.00
ب005 SL41 9000.00
ب007 SA9 9000.00
الكونت (عدد الموظفين) المبلغ (الراتب)
54000.00
39000.00
9000.00

أرز. 1. ثلاث مجموعات من السجلات يتم إنشاؤها عند تنفيذ الاستعلام

يسمح معيار SQL بوضع الاستعلامات المتداخلة في قائمة SELECT. لذلك يمكن أيضًا تمثيل الاستعلام أعلاه على النحو التالي:

يختاررقم الفرع، (حدد العدد (عدد الموظفين)مثل عدد

منالموظفين س

أينs.branchNo = b.branchNo)،

(اختر المبلغ (الراتب) كمبلغ

منالموظفين س

أينs.branchNo = b.branchNo)

منفرع ب

ترتيب حسبفرع رقم؛

ومع ذلك، يقوم هذا الإصدار من الاستعلام بإنشاء نتيجتين لوظيفة التجميع لكل فرع من فروع الشركة الموضحة في جدول الفروع، لذلك في بعض الحالات من الممكن رؤية صفوف تحتوي على قيم فارغة.

القيود المفروضة على تنفيذ التجميع (بناء HAVING).إن عبارة HAVING مخصصة للاستخدام مع جملة GROUP BY لتعيين القيود المحددة لغرض تحديد تلك القيود مجموعات،والتي سيتم وضعها في جدول الاستعلام الناتج. على الرغم من أن جمل HAVING وWHERE لها بناء جملة مماثل، إلا أن أغراضها مختلفة. يتم استخدام جملة WHERE لتحديد صفوف فردية لملء جدول الاستعلام الناتج، ويتم استخدام جملة HAVING لتحديد مجموعات،وضعت في جدول الاستعلام الناتج. يتطلب معيار ISO أن تظهر أسماء الأعمدة المستخدمة في جملة HAVING في قائمة عناصر GROUP BY أو أن يتم استخدامها في وظائف التجميع. من الناحية العملية، تتضمن مصطلحات البحث في عبارة HAVING دائمًا وظيفة تجميع واحدة على الأقل؛ وإلا، فيجب وضع مصطلحات البحث هذه في جملة WHERE واستخدامها لتحديد صفوف فردية. (تذكر أنه لا يمكن استخدام وظائف التجميع في جملة WHERE.) جملة HAVING ليست جزءًا ضروريًا من لغة SQL - أي استعلام مكتوب باستخدام جملة HAVING يمكن كتابته في نموذج آخر دون استخدامه.

مثال 18. استخدام بناء HAVING.لكل فرع من فروع الشركة التي بها أكثر من موظف تحديد عدد الموظفين ومقدار أجورهم.

يختارفرع لا, COUNتي (عدد الموظفين) مثلعدد، مجموع(مرتب) مثلمجموع

منطاقم عمل

مجموعة منرقم الفرع

بعد العد(رقم الموظف)> 1

ترتيب حسبفرع رقم؛

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

الجدول 28

فرع لا يوجد مبلغ العد
V00Z 3 54000.00
ب005 2 39000.00

الاستعلامات الفرعية.في هذا القسم، سنناقش استخدام عبارات SELECT الكاملة المضمنة في نص عبارة SELECT أخرى. خارجيتستخدم عبارة SELECT (الثانية) نتيجة التنفيذ داخلي(أولاً) يقوم المشغل بتحديد محتوى النتيجة النهائية للعملية بأكملها. يمكن العثور على الاستعلامات الداخلية في عبارات WHERE وHAVING في عبارة SELECT الخارجية - وفي هذه الحالة يتم استدعاؤها استعلامات فرعية,أو الاستعلامات المتداخلة.بالإضافة إلى ذلك، يمكن استخدام عبارات SELECT الداخلية في عبارات INSERT وUPDATE وDELETE . هناك ثلاثة أنواع من الاستعلامات الفرعية.

استعلام فرعي عدديتقوم بإرجاع القيمة المحددة من تقاطع عمود واحد مع صف واحد، أي. المعنى الوحيد. من حيث المبدأ، يمكن استخدام الاستعلام الفرعي العددي عندما تكون هناك حاجة إلى قيمة واحدة. يتم إعطاء متغيرات الاستعلامات الفرعية العددية في المثالين 13 و 14.

استعلام فرعي للسلسلةتقوم بإرجاع قيم أعمدة جدول متعددة، ولكن كصف واحد. يمكن استخدام الاستعلام الفرعي للسلسلة في أي مكان يتم فيه استخدام مُنشئ قيمة السلسلة، وعادةً ما يكون مسندًا. يظهر متغير من استعلام فرعي سلسلة في المثال 15.

استعلام فرعي للجدولتقوم بإرجاع قيم عمود واحد أو أكثر من أعمدة الجدول عبر أكثر من صف واحد. يمكن استخدام الاستعلام الفرعي للجدول أينما يمكن تحديد جدول، على سبيل المثال كمعامل لمسند IN.

مثال 19: استخدام استعلام فرعي مع اختبار المساواة.مؤلف موسيقى قائمة الموظفين العاملين في فرع الشركة الكائن في 463 شارع رئيسي 1.

يختار

منطاقم عمل

أينفرع رقم = (حدد فرع رقم

منفرع

أينشارع = "163 الشارع الرئيسي" ) ;

تهدف عبارة SELECT الداخلية (SELECT BranchNo FROM Branch...) إلى تحديد رقم فرع الشركة الموجود في العنوان "163 الشارع الرئيسي". (يوجد فرع واحد فقط للشركة، لذا فإن هذا المثال هو مثال على استعلام فرعي عددي.) بعد الحصول على رقم الفرع المطلوب، يتم تنفيذ استعلام فرعي خارجي لاسترداد معلومات مفصلة عن موظفي ذلك الفرع. بمعنى آخر، تقوم عبارة SELECT الداخلية بإرجاع جدول يتكون من قيمة واحدة "BOOV." وهذا يمثل رقم فرع الشركة الموجود على العنوان "163 Main St1." ونتيجة لذلك، تأخذ عبارة SELECT الخارجية النموذج التالي:

يختاررقم الموظفين، الاسم الوظيفي، الاسم الوظيفي، المنصب

منطاقم عمل

أينفرع رقم = "B0031؛

يتم عرض نتائج هذا الاستعلام في الجدول. 29.

الجدول 29

نتيجة الطلب

رقم الموظف اسم f أنا اسم موضع
SG37 آن خشب الزان مساعد
لجنة الدراسات 14 ديفيد معقل مشرف
SG5 سوزان ماركة مدير

الاستعلام الفرعي هو أداة لإنشاء جدول مؤقت يتم استرداد محتوياته ومعالجتها بواسطة عامل خارجي. يمكن تحديد استعلام فرعي مباشرة بعد عوامل المقارنة (أي عوامل التشغيل =،<, >, <=, >=, <>) في جملة WHERE أو HAVING. يجب وضع نص الاستعلام الفرعي بين قوسين.

مثال 20.استخدام الاستعلامات الفرعية مع وظائف التجميع. قم بإعداد قائمة بجميع الموظفين الذين لديهم راتب أعلى من المتوسط، مع الإشارة إلى مقدار تجاوز رواتبهم لمتوسط ​​الراتب في المؤسسة.

يختاررقم الموظفين، fName، Iname، المنصب، الراتب - ( حدد المتوسط(مرتب) منطاقم عمل) مثل salDiff

منطاقم عمل

أينالراتب > ( حدد المتوسط(مرتب) منطاقم عمل) ؛

وتجدر الإشارة إلى أنه لا يمكنك ذلك بشكل مباشرمشمول في تعبير الاستعلام"أين الراتب> متوسط ​​(الراتب)"، منذ استخدام التجميعالوظائف في جملة WHERE محظورة. لتحقيق النتيجة المرجوة، يجب عليك إنشاء استعلام فرعي يحسب متوسط ​​الراتب السنوي، ثم استخدامه في عبارة SELECT خارجية تقوم باسترداد معلومات حول هؤلاء الموظفين في الشركة الذين تتجاوز رواتبهم هذا المتوسط. بمعنى آخر، يُرجع الاستعلام الفرعي متوسط ​​الراتب السنوي للشركة الذي يبلغ 17000 جنيهًا إسترلينيًا.

يتم استخدام نتيجة هذا الاستعلام الفرعي العددي في عبارة SELECT الخارجية لحساب انحراف الأجور عن المستوى المتوسط ​​ولتحديد معلومات حول الموظفين. لذلك، تأخذ عبارة SELECT الخارجية النموذج التالي:

يختاررقم الموظفين، fName، IName، المنصب، الراتب - 17000 مثل salDiff

منطاقم عمل

أينالراتب> 17000؛

يتم عرض نتائج الاستعلام في الجدول. ثلاثين.

الجدول 30.

نتيجة الطلب

رقم الموظف اسم f أنا اسم موضع salDiff
SL21 جون أبيض مدير 13000.00
لجنة الدراسات 14 ديفيد معقل مشرف 1000.00
SG5 سوزان ماركة مدير 7000.00

تنطبق على الاستعلامات الفرعيةالقواعد التالية والقيود.

1. يجب ألا تستخدم الاستعلامات الفرعية عبارة ORDER BY، على الرغم من أنها قد تكون موجودة في عبارة SELECT الخارجية.

2. يجب أن تتكون قائمة SELECT الخاصة بالاستعلام الفرعي من أسماء الأعمدة الفردية أو التعبيرات المكونة منها، باستثناء حالة استخدام الكلمة الأساسية EXISTS في الاستعلام الفرعي.

3. بشكل افتراضي، تشير أسماء الأعمدة في الاستعلام الفرعي إلى الجدول المحدد اسمه في جملة FROM الخاصة بالاستعلام الفرعي. ومع ذلك، من الممكن أيضًا الإشارة إلى أعمدة جدول محدد في جملة FROM الخاصة باستعلام خارجي باستخدام أسماء الأعمدة المؤهلة (كما هو موضح أدناه).

4. إذا كان الاستعلام الفرعي أحد المعاملين المشاركين في عملية المقارنة، فيجب تحديد الاستعلام الفرعي على الجانب الأيمن من هذه العملية. على سبيل المثال، تدوين الاستعلام التالي من المثال السابق غير صحيح لأنه تم وضع الاستعلام الفرعي على الجانب الأيسر من عملية المقارنة مقابل قيمة عمود الراتب.

يختار

منطاقم عمل

أين(اختر متوسط ​​(الراتب) من الموظفين)< salary;

مثال 21. الاستعلامات الفرعية المتداخلة واستخدام المسند IN. قم بإعداد قائمة بالعقارات المؤجرة التي يكون موظفو فرع الشركة الموجود في 163 Main st1 مسؤولين عنها.

يختاررقم العقار، الشارع، المدينة، الرمز البريدي، النوع، الغرف، الإيجار

منعقار للإيجار

الفصل 5. لغة SQL: معالجة البيانات 189

أينرقم الموظفين في (حدد رقم الموظفين

منطاقم عمل

أينbrancliNo = (SELECT BranchNo

منفرع

أينstreet = "163 Main S t"));

يهدف الاستعلام الأول، وهو الأكثر داخلية، إلى تحديد رقم فرع الشركة الموجود في 463 Main St. أما الاستعلام الثاني، فهو متوسط، ويسترد معلومات حول الموظفين العاملين في هذا الفرع، وفي هذه الحالة، يتم استخدام أكثر من صف واحد من البيانات المحددة وبالتالي في الاستعلام الخارجي لا يمكنك استخدام عامل المقارنة = بدلاً من ذلك، يجب عليك استخدام الكلمة الأساسية IN. يسترد الاستعلام الخارجي معلومات حول الكائنات المؤجرة التي يكون موظفو الشركة مسؤولين عنها، والتي تم الحصول على البيانات الخاصة بها نتيجة تنفيذ الاستعلام الوسيط وترد نتائج الاستعلام في الجدول 31.

الجدول 31

نتيجة الطلب

رقم العقار شارع مدينة شفرة البريد يكتب غرف إيجار
PG16 5 نوفار د جلاسكو G129AX مستوي
ص36 2 طريق مانور جلاسكو G324QX مستوي
PG21 18 طريق ديل جلاسكو G12 منزل

الكلمات الرئيسية أي وجميع.يمكن استخدام الكلمات الأساسية ANY وALL مع الاستعلامات الفرعية التي تُرجع عمودًا واحدًا من الأرقام. إذا كان الاستعلام الفرعي مسبوقًا بالكلمة الأساسية ALL، فإن شرط المقارنة يكون مستوفيًا فقط إذا كان صحيحًا لجميع القيم الموجودة في عمود النتيجة للاستعلام الفرعي. إذا كان نص الاستعلام الفرعي مسبوقًا بالكلمة الأساسية ANY، فسيتم اعتبار شرط المقارنة مستوفيًا إذا تم استيفاءه لقيمة واحدة (أو أكثر) على الأقل في العمود الناتج للاستعلام الفرعي. إذا كانت نتيجة تنفيذ استعلام فرعي تؤدي إلى قيمة فارغة، فبالنسبة للكلمة الرئيسية ALL، سيتم اعتبار شرط المقارنة مستوفيًا، وبالنسبة للكلمة الرئيسية ANY فسيتم اعتباره غير محقق. وفقًا لمعيار ISO، يمكنك أيضًا استخدام الكلمة الأساسية SOME، وهي مرادف للكلمة الأساسية ANY.

مثال 22.استخدام الكلمات الرئيسية ANY وSOME. ابحث عن جميع العمال الذين يتجاوز راتبهم الراتب على الأقلواحد موظف فرع الشركة تحت رقم "بوز".

يختاررقم الموظفين، الاسم الوظيفي، الاسم الوظيفي، المنصب، الراتب

منطاقم عمل

أينالراتب> بعض (اختر الراتب

منطاقم عمل

أينBranchNo = "B003");

على الرغم من إمكانية كتابة هذا الاستعلام باستخدام استعلام فرعي يحدد الحد الأدنى للراتب لموظفي القسم رقم "BOHO"، وبعد ذلك يمكن للاستعلام الفرعي الخارجي تحديد معلومات حول جميع موظفي الشركة الذين تتجاوز رواتبهم هذه القيمة (انظر المثال 20)، إلا أنه من الممكن اتباع نهج آخر، والذي يتكون من استخدام بعض/أي الكلمات الرئيسية. في هذه الحالة، يقوم الاستعلام الفرعي الداخلي بإنشاء مجموعة من القيم (12000، 18000، 24000)، ويقوم الاستعلام الخارجي باختيار معلومات حول هؤلاء الموظفين الذين تكون رواتبهم أكبر من أي من القيم الموجودة في هذا

تعيين (في الواقع أكثر من الحد الأدنى للقيمة - 12000). يمكن اعتبار هذه الطريقة البديلة أكثر طبيعية من تحديد الحد الأدنى للراتب في استعلام فرعي. ولكن في كلتا الحالتين، يتم إنتاج نفس نتائج الاستعلام، وهي معروضة في الجدول. 32 .

الجدول 32

نتيجة الطلب

رقم الموظف اسم f أنا اسم موضع مرتب
SL21 جون أبيض مدير 30000.00
لجنة الدراسات 14 ديفيد معقل مشرف 18000.00
SG5 سوزان ماركة مدير 24000.00

مثال 23.باستخدام الكلمة الأساسية ALL. البحث عن جميع الموظفين الذين تزيد أجورهم عن أجر أي موظف في فرع الشركة رقم "بوز".

يختاررقم الموظفين، الاسم، INarae، المنصب، الراتب

منطاقم عمل

أينالراتب > الجميع(اختر الراتب

منطاقم عمل

أينBranchNo = "BOG3");

بشكل عام، هذا الطلب مشابه للطلب السابق. وفي هذه الحالة يمكن استخدام استعلام فرعي يحدد الحد الأقصى لقيمة راتب موظفي القسم تحت رقم "BOZ"، ومن ثم باستخدام استعلام خارجي تحديد معلومات عن جميع موظفي الشركة الذين يتجاوز رواتبهم هذه القيمة. ومع ذلك، في هذا المثال، تم اختيار أسلوب الكلمات الرئيسية ALL. يتم عرض نتائج الاستعلام في الجدول. 33 .

الجدول 33

نتيجة الطلب

رقم الموظف أنا اسم اسم f موضع مرتب
SL21 أبيض جون مدير 30000,00

استعلامات الجداول المتعددة.جميع الأمثلة التي تمت مناقشتها أعلاه لها نفس القيد المهم: يتم دائمًا تحديد الأعمدة الموضوعة في الجدول الناتج من جدول واحد. ومع ذلك، في كثير من الحالات هذا لا يكفي. لتتمكن من دمج أعمدة من عدة جداول مصدر في الجدول الناتج، يجب عليك إجراء العملية روابط.في SQL، يتم استخدام عملية الربط لدمج المعلومات من جدولين عن طريق تشكيل أزواج من الصفوف المرتبطة المحددة من كل جدول. يتم تجميع أزواج الصفوف الموضوعة في الجدول المدمج بناءً على تساوي قيم الأعمدة المحددة المضمنة فيها.

إذا كنت بحاجة إلى الحصول على معلومات من عدة جداول، فيمكنك إما استخدام استعلام فرعي أو الانضمام إلى الجداول. إذا كان جدول الاستعلام الناتج يجب أن يحتوي على أعمدة من جداول مصدر مختلفة، فمن المستحسن استخدام آلية ربط الجدول. لإجراء عملية ربط، يكفي تحديد أسماء جدولين أو أكثر في عبارة FROM، وفصلها بفواصل، ثم تضمين جملة WHERE في الاستعلام التي تحدد الأعمدة المستخدمة لربط الجداول المحددة. بالإضافة إلى ذلك، بدلا من أسماء الجداول، يمكنك استخدامها أسماء مستعارة,المخصصة لهم في جملة FROM. في هذه الحالة، يجب فصل أسماء الجداول والأسماء المستعارة المخصصة لها بمسافات. يمكن استخدام الأسماء المستعارة لتوضيح أسماء الأعمدة عندما يكون هناك غموض حول الجدول الذي ينتمي إليه العمود. بالإضافة إلى ذلك، يمكن استخدام الأسماء المستعارة لتقصير أسماء الجداول. إذا تم تعريف اسم مستعار لجدول، فيمكن استخدامه في أي مكان يتطلب تحديد اسم هذا الجدول.

مثال 24.اتصال بسيط. قم بإعداد قائمة بأسماء جميع العملاء الذين قاموا بالفعل بفحص عقار واحد مستأجر على الأقل وقدموا رأيهم في هذا الشأن.

يختارc.clientNo، fName، IName، propertyNo، comment

منالعميل ج، المشاهدة v

أينc.clientNo = v.clientNo;

يتطلب هذا التقرير معلومات من جدول العميل وجدول العرض، لذلك سنستخدم آلية ربط الجدول لإنشاء الاستعلام. تسرد جملة SELECT كافة الأعمدة التي يجب وضعها في جدول الاستعلام الناتج. لاحظ أن عمود ClientNo يتطلب التأهيل لأن العمود قد يكون موجودًا أيضًا في جدول آخر يشارك في عملية الانضمام. لذلك، من الضروري الإشارة بوضوح إلى قيم الجدول التي نهتم بها. (في هذا المثال، كان من الممكن أن تحدد بسهولة قيم عمود ClientNo من جدول العرض.) يتم تحديد الاسم عن طريق تحديد اسم الجدول المقابل (أو الاسم المستعار الخاص به) كبادئة قبل اسم العمود. يستخدم مثالنا القيمة "c" المحددة كاسم مستعار لجدول العميل. لإنشاء الصفوف الناتجة، يتم استخدام صفوف الجداول المصدر التي لها قيمة متطابقة في العمود ClientNo. يتم تحديد هذا الشرط عن طريق تحديد شرط البحث with.clientNo=v.clientNo. يتم استدعاء أعمدة مماثلة من الجداول المصدر أعمدة متطابقة.العملية الموصوفة تعادل العملية الروابط على أساس المساواةالجبر العلائقي. يتم عرض نتائج الاستعلام في الجدول. 34.

الجدول 34

نتيجة الطلب

رقم العميل اسم f أنا اسم رقم العقار تعليق
CR56 ألين ستيوارت ص36
CR56 ألين ستيوارت PA14 صغير جدًا
CR56 ألين ستيوارت PG4
CR62 ماري تريجير PA14 لا غرفة طعام
CR76 جون كاي PG4 بعيد جدًا

في أغلب الأحيان، يتم تنفيذ استعلامات الجداول المتعددة على جدولين متصلين بواسطة علاقة رأس بأطراف (1:*) أو علاقة الأصل والفرع. في المثال أعلاه، الذي يتضمن الوصول إلى جداول العميل والعرض، يرتبط الأخيران بمثل هذه العلاقة. يرتبط كل صف من جدول العرض (الفرعي) بصف واحد فقط من جدول العميل (الأصل)، بينما يمكن ربط نفس الصف من جدول العميل (الأصل)

مع العديد من صفوف جدول العرض (الفرعي). أزواج الصفوف التي يتم إنشاؤها عند تنفيذ استعلام هي نتيجة لجميع مجموعات الصفوف الصالحة في الجدولين الفرعي والأصل. يوضح القسم 3.2.5 بالتفصيل كيف تقوم المفاتيح الأساسية والأجنبية للجداول، في قاعدة البيانات العلائقية، بإنشاء علاقة بين الوالدين والطفل. عادة ما يكون الجدول الذي يحتوي على مفتاح خارجي فرعيًا، في حين أن الجدول الذي يحتوي على مفتاح أساسي سيكون دائمًا جدولًا رئيسيًا. لاستخدام العلاقة بين الأصل والفرع في استعلام SQL، يجب عليك تحديد شرط بحث يقارن بين المفتاح الخارجي والمفتاح الأساسي. يقارن المثال 24 المفتاح الأساسي لجدول العميل (v.clientNo) مع المفتاح الخارجي لجدول العرض (v.clientNo).

بالإضافة إلى ذلك، يوفر معيار SQL الطرق التالية لتعريف هذا الاتصال:

منالعميل مع ينضمعرض ضد على c.clientNo = v.clientNo

منالعميل ج أونالمعاينة استخدامرقم العميل

منعميل الانضمام الطبيعيالمعاينة

في كل حالة، تحل جملة FROM محل جملتي FROM وWHERE الأصلية. ومع ذلك، يقوم الخيار الأول بإنشاء جدول يحتوي على عمودين متطابقين من نوع ClientNo، بينما في الحالتين الأخريين، سيحتوي الجدول الناتج على عمود ClientNo واحد فقط.

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

الذي يجيبون عليه.

يختارs.branchNo، s.staffNo، fName، IName، propertyNo

منالموظفين ق، PropertyForRent ص

أينs.staffNo = p.staffNo

ترتيب حسبs.branchNo، s.staffNo، propertyNo؛

لتسهيل قراءة النتائج، يتم فرز المخرجات الناتجة باستخدام رقم القسم كمفتاح فرز رئيسي ورقم الموظف ورقم الخاصية كمفاتيح ثانوية. يتم عرض نتائج الاستعلام في الجدول. 35.

الجدول 35

نتيجة الطلب

رقم الفرع رقم الموظف اسم f أنا اسم رقم العقار
من لجنة الدراسات 14 ديفيد معقل PG16
من SG37 آن خشب الزان PG21
من SG37 آن خشب الزان ص36
BOO5 SL41 ماري لي PL94
الهيئة الفرعية للتنفيذ7 SA9 جولي هاو PA14

مثال 26.الانضمام إلى ثلاثة جداول. يتم إدراج أرقام الموظفين لكل فرع من فروع الشركة وأسماء الموظفين المسؤولين عن أي عقارات مستأجرة مع الإشارة إلى المدينة التي يقع فيها فرع الشركة وأرقام المرافق التي يكون كل موظف مسؤولاً عنها.

يختار b.branchNo، b.city، s.staffNo، fName، IName، propertyNo

منالفرع ب، الموظفين، PropertyForRent ص

أين b.branchNo = s.branchNo وs.staffNo = p.staffNo

ترتيب حسب b.branchNo, s.staffNo, propertyNo;

يجب أن يحتوي الجدول الناتج على أعمدة من ثلاثة جداول مصدر - الفرع، وفريق العمل، وPropertyForRent - لذا يجب أن ينضم الاستعلام إلى هذه الجداول. يمكن ربط جداول الفروع والموظفين باستخدام الشرط b.branchNo=*s .branchNo، مما يؤدي إلى ربط فروع الشركة بالموظفين العاملين فيها. يمكن ضم جدولي Staff وPropertyForRent باستخدام الشرط s.staffNo=p.staffNo. ونتيجة لذلك، سيتم ربط كل موظف بالعقارات المستأجرة التي يكون مسؤولاً عنها. يتم عرض نتائج الاستعلام في الجدول. 36.

الجدول 36

نتائج الاستعلام

رقم الفرع مدينة StaffMo اسم f أنا اسم رقم العقار
ب003 جلاسكو لجنة الدراسات 14 ديفيد معقل PG16
ب003 جلاسكو SG37 آن خشب الزان PG21
ب003 جلاسكو SG37 آن خشب الزان ص36
ب005 لندن SL41 جولي لي PL94
ب007 أبردين SA9 ماري هاو PA14

لاحظ أن معيار SQL يسمح باستخدام صيغة بديلة للبنيتين FROM وWHERE:

من(الفرع ب الانضمام إلى الموظفين الذين يستخدمون الفرع رقم) مثلبكالوريوس

ينضمبروبرتي فور رينت ص استخدامرقم الموظف

مثال 27.التجميع حسب أعمدة متعددة. تحديد عدد العقارات المؤجرة التي يكون كل موظف من موظفي الشركة مسؤولاً عنها.

يختارs.branchNo، S.staffNo، عدد(*) مثلعدد

من الموظفين، PropertyForRent ص

حيث S.staffNo = p.staffNo

مجموعة منs.branchNo، s.staffNo

ترتيب حسبs.branchNo, s.staffNo;

لإعداد التقرير المطلوب، عليك أولاً معرفة أي من موظفي الشركة هو المسؤول عن تأجير العقارات. يمكن حل هذه المشكلة عن طريق الانضمام إلى جدولي Staff وPropertyForRent باستخدام عمود StaffNo في عبارات FROM/WHERE. ومن ثم لا بد من تشكيل مجموعات تتكون من رقم القسم وعدد موظفيه، والتي يجب استخدام بناء GROUP BY لها. وأخيرًا، يجب فرز الجدول الناتج باستخدام جملة ORDER BY. يتم عرض نتائج الاستعلام في الجدول. 37.

الجدول 37

نتيجة الطلب

رقم الفرع رقم الموظف عدد
В00Z لجنة الدراسات 14
В00Z SG37
ب005 SL41
ب007 SA9

يصنع علاقات.الصلة هي مجموعة فرعية من مجموعة أكثر عمومية من البيانات من جدولين تسمى الديكارتي. المنتج الديكارتي لجدولين هو جدول آخر يتكون من جميع أزواج الصفوف المحتملة التي تشكل جزءًا من كلا الجدولين. مجموعة الأعمدة في الجدول الناتج هي جميع أعمدة الجدول الأول متبوعة بجميع أعمدة الجدول الثاني. إذا قمت بإدخال استعلام في جدولين دون تحديد عبارة WHERE، فستكون نتيجة الاستعلام في بيئة SQL هي المنتج الديكارتي لهذه الجداول. بالإضافة إلى ذلك، يوفر معيار ISO تنسيقًا خاصًا لبيان SELECT الذي يسمح لك بحساب المنتج الديكارتي لجدولين:

حدد (* قائمة العمود ي)

من tableNamel CROSS JOINCaYeUlte2

دعونا نلقي نظرة مرة أخرى على مثال يتم فيه إجراء اتصال العميل وعرض الجداول باستخدام عمود ClientNo المشترك عند العمل مع الجداول التي ترد محتوياتها في الجدول. 3.6 و3.8، سيحتوي المنتج الديكارتي لهذه الجداول على 20 صفًا (4 صفوف جدول العميل × 5 صفوف جدول العرض = 20 صفًا). وهذا يعادل إصدار الاستعلام المستخدم في المثال 5.24، ولكن بدون استخدام جملة WHERE. الإجراء الخاص بإنشاء جدول يحتوي على نتائج ربط جدولين باستخدام عبارة SELECT هو كما يلي.

1. يتم تشكيل المنتج الديكارتي للجداول المحددة في بناء FROM.

2. إذا كان الاستعلام يحتوي على جملة WHERE، فسيتم تطبيق شروط البحث على كل صف من جدول المنتج الديكارتي وتخزين في الجدول فقط تلك الصفوف التي تستوفي الشروط المحددة. من حيث الجبر العلائقي، تسمى هذه العملية القيدالمنتج الديكارتي.

3. بالنسبة لكل صف متبقي، يتم تحديد قيمة كل عنصر محدد في قائمة SELECT، مما يؤدي إلى ظهور صف منفصل من الجدول الناتج.

4. إذا كان الاستعلام الأصلي يحتوي على بنية SELECT DISTINCT، فستتم إزالة كافة الصفوف المكررة من الجدول الناتج.

5. إذا كان الاستعلام الذي تقوم بتنفيذه يحتوي على جملة ORDER BY،


©2015-2019 الموقع
جميع الحقوق تنتمي إلى مؤلفيها. لا يدعي هذا الموقع حقوق التأليف، ولكنه يوفر الاستخدام المجاني.
تاريخ إنشاء الصفحة: 2016-08-07



  • وظائف مجمعةتُستخدم بشكل مشابه لأسماء الحقول في عبارة SELECT، ولكن مع استثناء واحد: فهي تأخذ اسم الحقل كوسيطة. مع وظائف مجموعو متوسطيمكن استخدام الحقول الرقمية فقط. مع وظائف العد والحد الأقصى والحد الأدنىيمكن استخدام كل من الحقول الرقمية والحروف. عند استخدامها مع حقول الأحرف الأعلىو دقيقةسيتم ترجمتها إلى ما يعادل رمز ASCII ومعالجتها بالترتيب الأبجدي. تسمح بعض أنظمة إدارة قواعد البيانات (DBMS) باستخدام المجاميع المتداخلة، ولكن هذا يعد انحرافًا عن معيار ANSI مع كل العواقب المترتبة على ذلك.


على سبيل المثال، يمكنك حساب عدد الطلاب الذين أدوا الامتحانات في كل تخصص. للقيام بذلك، تحتاج إلى تشغيل استعلام مجمع حسب حقل "التخصص" وعرض اسم التخصص وعدد الصفوف في المجموعة لهذا التخصص كنتيجة. استخدام الحرف * كوسيطة للدالة COUNT يعني حساب جميع الصفوف في المجموعة.

حدد R1. الانضباط، COUNT(*)

المجموعة حسب R1.الانضباط؛

نتيجة:


اختر R1.الانضباط، العدد (*)

حيث R1. التقييم ليس فارغًا

المجموعة حسب R1.الانضباط؛

نتيجة:


لن يتم تضمينها في مجموعة الصف قبل التجميع، وبالتالي فإن عدد الصف في المجموعة الخاصة بتخصص "نظرية المعلومات" سيكون أقل بواحد.

ويمكن الحصول على نتيجة مماثلة إذا قمت بكتابة الاستعلام بالطريقة التالية:

حدد R1. الانضباط، الكونت (R1. التقييم)

المجموعة حسب R1. تأديب؛

وظيفة العدد (اسم السمة)يحسب عدد القيم المحددة في المجموعة، بدلاً من الوظيفة عدد(*)،الذي يحسب عدد الصفوف في المجموعة. في الواقع، في مجموعة تخصص "نظرية المعلومات" سيكون هناك 4 أسطر، ولكن 3 قيم محددة فقط لسمة "التقييم".


قواعد التعامل مع القيم الخالية في الوظائف المجمعة

إذا كانت أي قيم في العمود متساوية باطلعند حساب نتيجة الوظيفة، يتم استبعادها.

إذا كانت جميع القيم في العمود متساوية باطل، الذي - التي ماكس مين سوم متوسط = فارغة العد = 0 (صفر).

إذا كان الجدول فارغا العد (*) = 0 .

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

قواعد لتفسير الوظائف الإجمالية

يمكن تضمين الوظائف المجمعة في قائمة المخرجات ثم يتم تطبيقها على الجدول بأكمله.

حدد MAX (التقييم) من R1سيعطي الحد الأقصى للتقييم خلال الجلسة؛

حدد المجموع (النتيجة) من R1سيعطي مجموع جميع الدرجات للدورة؛

حدد AVG(التقييم) من R1سيعطي درجة متوسطة للجلسة بأكملها.


2؛ النتيجة: "العرض = "640"

وبالعودة مرة أخرى إلى قاعدة بيانات "الجلسة" (الجدول R1)، نجد عدد الاختبارات التي تم اجتيازها بنجاح:

حدد الكونت(*) ك تم التوصيل _ الامتحانات

أين النتيجة 2؛

نتيجة:


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

حدد R1.الانضباط، العدد (R1.التقييم المميز)

حيث R1. التقييم ليس فارغًا

المجموعة حسب R1.الانضباط؛

نتيجة:


يتم الحصول على نفس النتيجة إذا قمنا باستبعاد الشرط الصريح في الجزء WHERE، وفي هذه الحالة سيبدو الاستعلام كما يلي:

حدد R1. الانضباط، العد (المتميز R1. التقييم)

المجموعة حسب R1. تأديب؛

وظيفة العدد (التقييم المميز R1)التهم مؤكدة فقط متنوعالمعاني.

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


2 المجموعة حسب R2. المجموعة، ر1. تأديب؛ هنا، تقوم الدالة CAST() بتحويل عمود النقاط إلى نوع بيانات صالح. "العرض = 640"

حدد R2.Group، R1.Discipline، Count(*) كإجمالي، AVG(cast(Score as decimal(3,1))) كـ Average_score

من R1، R2

حيث R1. الاسم الكامل = R2. الاسم الكامل وR1. النتيجة ليست فارغة

و R1. النتيجة 2

المجموعة حسب R2. المجموعة، ر1. تأديب؛

ها هي الوظيفة يقذف()تحويل عمود التصنيف إلى نوع بيانات صالح.


لا يمكنك استخدام الدوال المجمعة في جملة WHERE لأنه يتم تقييم الشروط في هذا القسم من حيث صف واحد، ويتم تقييم الوظائف المجمعة من حيث مجموعات الصفوف.

تتيح لك جملة GROUP BY تحديد مجموعة فرعية من القيم في حقل معين من حيث حقل آخر وتطبيق دالة مجمعة على المجموعة الفرعية. وهذا يجعل من الممكن دمج الحقول والوظائف المجمعة في جملة SELECT واحدة. يمكن استخدام الوظائف المجمعة في التعبير لإخراج نتائج سطر SELECT وفي التعبير عن حالة معالجة مجموعات HAVING المشكلة. في هذه الحالة، يتم حساب كل دالة مجمعة لكل مجموعة مختارة. يمكن استخدام القيم التي تم الحصول عليها من حساب الوظائف المجمعة لعرض النتائج المقابلة أو لتكييف اختيار المجموعات.

لنقم ببناء استعلام يعرض المجموعات التي حصل فيها على أكثر من علامة سيئة في تخصص واحد في الاختبارات:


1؛ النتيجة: "العرض = "640"

حدد R2. مجموعة

من R1، R2

حيث R1. الاسم الكامل = R2. الاسم الكامل و

R1.النتيجة = 2

المجموعة حسب R2.Group، R1.Discipline

وجود العد (*) 1؛

نتيجة:


لدينا قاعدة بيانات "بنك" مكونة من جدول واحد F، والذي يخزن العلاقة F التي تحتوي على معلومات حول الحسابات في فروع بنك معين:

العثور على إجمالي الرصيد على الحسابات في الفروع. يمكنك إجراء استعلام منفصل لكل فرع عن طريق تحديد SUM (المتبقي) من الجدول لكل فرع، لكن عملية GROUP BY تسمح لك بوضعها جميعًا في أمر واحد:

يختار فرع ، مجموع( بقية )

المجموعة حسب الفرع؛

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


5000؛ تتبع الوسيطات في جملة HAVING نفس القواعد كما في جملة SELECT التي تستخدم GROUP BY . يجب أن يكون لديهم قيمة واحدة لكل مجموعة إخراج. "العرض = 640"

لنفترض أننا نختار فقط تلك الفروع التي يتجاوز إجمالي أرصدة حساباتها 5000 دولار، بالإضافة إلى إجمالي أرصدة الفروع المحددة. لعرض النتائج للفروع التي يزيد إجمالي أرصدتها عن 5000 دولار، يجب عليك استخدام جملة HAVING. تحدد جملة HAVING المعايير المستخدمة لإزالة مجموعات معينة من المخرجات، تمامًا كما تفعل جملة WHERE للصفوف الفردية.

الأمر الصحيح سيكون:

حدد الفرع، SUM(المتبقي)

مجموعة من فرع

الحصول على المبلغ ( بقية ) 5 000;

الحجج في الجملة نأخذاتبع نفس القواعد كما في الجملة يختارحيث تستخدم مجموعة من. يجب أن يكون لديهم قيمة واحدة لكل مجموعة إخراج.


سيتم حظر الأمر التالي:

حدد الفرع،SUM(المتبقي)

المجموعة حسب الفرع

تاريخ الافتتاح = 27/12/2004 ;

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

حدد الفرع،SUM(المتبقي)

حيث تاريخ الفتح = '27/12/2004'

المجموعة حسب الفرع؛


معنى هذا الاستعلام هو كما يلي: ابحث عن مجموع الأرصدة لكل فرع من فروع الحسابات المفتوحة في 27 ديسمبر 2004.

كما ذكرنا سابقًا، يمكن أن تأخذ HAVING فقط الوسائط التي لها قيمة واحدة لكل مجموعة مخرجات. من الناحية العملية، تعد المراجع إلى الوظائف المجمعة هي الأكثر شيوعًا، ولكن الحقول المحددة باستخدام GROUP BY تكون صالحة أيضًا. على سبيل المثال، نريد أن نرى إجمالي الأرصدة في حسابات الفروع في سانت بطرسبرغ وبسكوف وأوريوبينسك:

حدد الفرع، SUM(المتبقي)

من ف، س

حيث F. فرع = س. فرع

المجموعة حسب الفرع

وجود فرع في ("سانت بطرسبرغ"، "بسكوف"، "أوريوبينسك")؛

100.000؛ إذا كان الرصيد الإجمالي أكثر من 100000 دولار، فسنراه في العلاقة الناتجة، وإلا فسنحصل على علاقة فارغة. "العرض = 640"

لذلك، يمكن فقط استخدام مواصفات الأعمدة المحددة كأعمدة تجميع في جملة GROUP BY مباشرة في التعبيرات الحسابية الأصلية المضمنة في جملة التحديد الخاصة بعبارة HAVING. لا يمكن تحديد الأعمدة المتبقية إلا ضمن مواصفات الوظائف التجميعية COUNT وSUM وAVG وMIN وMAX، والتي في هذه الحالة تحسب بعض القيمة الإجمالية لمجموعة الصفوف بأكملها. نتيجة تنفيذ قسم HAVING هي جدول مجمع يحتوي فقط على مجموعات الصفوف التي تكون نتيجة حساب شرط التحديد في قسم HAVING لها TRUE. على وجه الخصوص، إذا كانت جملة HAVING موجودة في استعلام لا يحتوي على GROUP BY، فستكون نتيجة تنفيذها إما جدول فارغ أو نتيجة تنفيذ الأقسام السابقة من تعبير الجدول، ويتم التعامل معها كمجموعة واحدة بدون تجميع الأعمدة. لنلقي نظرة على مثال. لنفترض أننا نريد عرض إجمالي الأرصدة لجميع الفروع، ولكن فقط إذا كانت أكثر من 100000 دولار. في هذه الحالة، لن يحتوي استعلامنا على عمليات تجميع، ولكنه سيحتوي على قسم HAVING وسيبدو كما يلي:

حدد المجموع( بقية )

الحصول على المبلغ( بقية ) 100 000;

إذا كان الرصيد الإجمالي أكثر من 100000 دولار، فسنراه في العلاقة الناتجة، وإلا فسنحصل على علاقة فارغة.


بقيمة عمود الانضباط. سوف نحصل على 4 مجموعات يمكننا حساب بعض قيم المجموعة لها، مثل عدد الصفوف في المجموعة، الحد الأقصى أو الأدنى لقيمة عمود النتيجة. الجدول 5.7. وظائف مجمعة
وظيفة نتيجة
عدد عدد الصفوف أو قيم الحقول غير الفارغة التي حددها الاستعلام
مجموع مجموع كل القيم المحددة لهذا الحقل
متوسط الوسط الحسابي لجميع القيم المحددة لهذا الحقل
دقيقة الأصغر بين جميع القيم المحددة لهذا الحقل
الأعلى الأكبر من بين جميع القيم المحددة لهذا الحقل
ر1
الاسم الكامل تأديب درجة
مجموعة 1 بيتروف ف. قاعدة البيانات 5
سيدوروف ك. قاعدة البيانات 4
ميرونوف أ.ف. قاعدة البيانات 2
ستيبانوفا ك. قاعدة البيانات 2
كريلوفا تي إس. قاعدة البيانات 5
فلاديميروف V. A. قاعدة البيانات 5
المجموعة 2 سيدوروف ك. نظرية المعلومات 4
ستيبانوفا ك. نظرية المعلومات 2
كريلوفا تي إس. نظرية المعلومات 5
ميرونوف أ.ف. نظرية المعلومات باطل
المجموعة 3 تروفيموف بي.أ. الشبكات والإتصالات 4
إيفانوفا إي.أ. الشبكات والإتصالات 5
أوتكينا إن.في. الشبكات والإتصالات 5
المجموعة 4 فلاديميروف V. A. اللغة الإنجليزية 4
تروفيموف بي.أ. اللغة الإنجليزية 5
إيفانوفا إي.أ. اللغة الإنجليزية 3
بيتروف ف. اللغة الإنجليزية 5

وظائف مجمعةتُستخدم بشكل مشابه لأسماء الحقول في عبارة SELECT، ولكن مع استثناء واحد: فهي تأخذ اسم الحقل كوسيطة. يمكن استخدام الحقول الرقمية فقط مع الدالتين SUM وAVG. يمكن استخدام كل من الحقول الرقمية والحروفية مع وظائف COUNT وMAX وMIN. عند استخدامها مع حقول الأحرف، ستقوم MAX وMIN بترجمتها إلى رمز ASCII المكافئ ومعالجتها بالترتيب الأبجدي. تسمح بعض أنظمة إدارة قواعد البيانات (DBMS) باستخدام المجاميع المتداخلة، ولكن هذا يعد انحرافًا عن معيار ANSI مع كل العواقب المترتبة على ذلك.

على سبيل المثال، يمكنك حساب عدد الطلاب الذين أدوا الامتحانات في كل تخصص. للقيام بذلك، تحتاج إلى تشغيل استعلام تم تجميعه حسب حقل "التخصص" وعرض اسم التخصص وعدد الصفوف في المجموعة لهذا التخصص كنتيجة. إن استخدام الحرف * كوسيطة للدالة COUNT يعني حساب جميع الصفوف في المجموعة.

حدد R1.Discipline، COUNT(*) من مجموعة R1 بواسطة R1.Discipline

نتيجة:

إذا أردنا حساب عدد الأشخاص الذين اجتازوا الامتحان في أي تخصص، فإننا نحتاج إلى استبعاد القيم غير المؤكدة من النسبة الأصلية قبل التجميع. في هذه الحالة سيكون الطلب كالتالي:

نحصل على النتيجة:

في هذه الحالة، الخط مع الطالب

ميرونوف أ.ف. نظرية المعلومات باطل

لن تقع في مجموعة الصفوف قبل التجميع، وبالتالي فإن عدد الصفوف في المجموعة المراد تأديبها " نظرية المعلومات"سوف يكون 1 أقل.

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

بالعودة مرة أخرى إلى قاعدة بيانات "الجلسة" (الجداول R1، R2، R3)، نجد عدد الاختبارات التي تم اجتيازها بنجاح:

ويختلف هذا بالطبع عن تحديد حقل، حيث يتم إرجاع قيمة واحدة دائمًا، بغض النظر عن عدد الصفوف الموجودة في الجدول. دعوى وظائف مجمعةقد يكون هناك أعمدة جدول منفصلة. ولكن من أجل حساب عدد القيم المميزة لعمود معين في مجموعة، على سبيل المثال، تحتاج إلى استخدام الكلمة الأساسية DISTINCT مع اسم العمود. دعونا نحسب عدد الدرجات المختلفة التي تم الحصول عليها في كل تخصص:

نتيجة:

يمكن أن تتضمن النتيجة قيمة حقل التجميع والعديد منها وظائف مجمعةوفي شروط التجميع يمكنك استخدام حقول متعددة. وفي هذه الحالة يتم تشكيل المجموعات وفق مجموعة من حقول التجميع المحددة. يمكن تطبيق عمليات الدالة المجمعة للانضمام إلى جداول مصدر متعددة. على سبيل المثال، لنطرح السؤال: حدد لكل مجموعة وكل تخصص عدد الطلاب الذين اجتازوا الاختبار بنجاح ومتوسط ​​الدرجات في التخصص.

نتيجة:

لا يمكننا استخدام وظائف مجمعةفي جملة WHERE لأنه يتم تقييم المسندات من حيث سطر واحد، و وظائف مجمعة- من حيث مجموعات الخطوط.

تتيح لك جملة GROUP BY تحديد مجموعة فرعية من القيم في حقل معين من حيث حقل آخر وتطبيق دالة مجمعة على المجموعة الفرعية. وهذا يجعل من الممكن الجمع بين الحقول و وظائف مجمعةفي جملة SELECT واحدة. وظائف مجمعةيمكن استخدامه في التعبير لإخراج نتائج سطر SELECT وفي التعبير عن حالة المعالجة لمجموعات HAVING التي تم إنشاؤها. في هذه الحالة، يتم حساب كل دالة مجمعة لكل مجموعة مختارة. القيم التي تم الحصول عليها من الحساب وظائف مجمعة، يمكن استخدامه لعرض النتائج المقابلة أو لضبط اختيار المجموعات.

لنقم ببناء استعلام يعرض المجموعات التي حصل فيها على أكثر من علامة سيئة في تخصص واحد في الاختبارات:

في المستقبل، على سبيل المثال، لن نعمل مع قاعدة بيانات "الجلسة"، ولكن مع قاعدة بيانات "البنك"، المكونة من جدول واحد F، والذي يخزن العلاقة F التي تحتوي على معلومات حول الحسابات في فروع بنك معين:

F = (N، الاسم الكامل، الفرع، تاريخ الافتتاح، تاريخ الإغلاق، الرصيد)؛ س = (الفرع، المدينة)؛

لأنه على هذا الأساس من الممكن توضيح العمل بشكل أكثر وضوحًا مع الوظائف التجميعية والتجميع.

على سبيل المثال، لنفترض أننا نريد العثور على الرصيد الإجمالي للحسابات المصرفية. يمكنك إجراء استعلام منفصل لكل فرع عن طريق تحديد SUM(Balance) من الجدول الخاص بكل فرع. ومع ذلك، سيسمح لك GROUP BY بوضعها جميعًا في أمر واحد:

حدد الفرع، المجموع (المتبقي) من المجموعة F حسب الفرع؛

ينطبق GROUP BY وظائف مجمعةبشكل مستقل لكل مجموعة محددة باستخدام قيمة حقل الفرع. تتكون المجموعة من صفوف لها نفس قيمة حقل الفرع، و

يمكن إجراء معالجة جماعية معممة لقيم الحقول. يتم ذلك باستخدام الوظائف المجمعة. تنتج الدالات التجميعية قيمة واحدة لمجموعة جدول بأكملها. يوفر SQL الوظائف المجمعة التالية:

  • عدد- يحسب عدد صفوف الجدول ذات القيم غير الفارغة للحقل المحدد كوسيطة.
  • مجموع– حساب المجموع الحسابي لجميع القيم المحددة لحقل معين.
  • متوسط- متوسط ​​جميع القيم المحددة لهذا الحقل.
  • الأعلى- يعرض أكبر قيمة من بين جميع القيم المحددة لهذا الحقل.
  • دقيقة– يعرض أصغر قيمة من بين جميع القيم المحددة لهذا الحقل.

    استخدام الوظائف الإجمالية

    يتم استخدام الدالات التجميعية بشكل مشابه لأسماء الحقول في عبارة SELECT الخاصة بالاستعلام، مع استثناء واحد: فهي تأخذ أسماء الحقول كوسيطة. يمكن استخدام الحقول الرقمية فقط مع مجموعو متوسط. مع عدد, الأعلى، و دقيقةيمكن استخدام كل من الحقول الرقمية والحروف. عند استخدامها مع حقول الأحرف الأعلىو دقيقةسوف يترجمها إلى ما يعادل ASCII. هذا يعني انه دقيقةسوف تختار أول واحد، و الأعلىالقيمة الأخيرة بالترتيب الأبجدي.

    للعثور على إجمالي مبلغ المبيعات في جدول المبيعات علينا كتابة الاستعلام التالي:

    حدد SUM(SSum) من عمليات البيع

    ونتيجة لذلك نحصل على:

    قام هذا الاستعلام بحساب عدد القيم غير الفارغة في حقل SNum بجدول Sells. إذا قمنا بإعادة كتابة الاستعلام على النحو التالي:

    حدد العد (SDate) من عمليات البيع

    ونتيجة لذلك نحصل على:

    عدد SDate
    4

    يتم الحصول على نتائج استعلام مختلفة عند حساب ما يبدو أنه نفس الشيء لأن إحدى قيم حقل SDate فارغة ( باطل). كن حذرًا عند استخدام مثل هذه الاستعلامات.