امتلاك (SQL)

تنص إحدى HAVINGبنود لغة SQL على أن عبارة SQL SELECTيجب أن تُرجع فقط الصفوف التي تستوفي فيها القيم المُجمّعة الشروط المُحددة . [ 1 ] : 125-127

يستخدم

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

لعرض الحالة الحالية التي تشكلها العبارة GROUP BY، HAVINGيتم استخدام العبارة.

أمثلة

لإرجاع قائمة بمعرفات الأقسام التي تجاوزت مبيعاتها الإجمالية 1000 دولار في تاريخ 1 يناير 2000، بالإضافة إلى مجموع مبيعاتها في ذلك التاريخ:

حدد رقم القسم ، ومجموع ( مبلغ البيع ) من جدول المبيعات حيث تاريخ البيع = '2000-01-01' ، وقم بتجميع النتائج حسب رقم القسم، بشرط أن يكون مجموع ( مبلغ البيع ) أكبر من 1000.

بالرجوع إلى جداول العينة في مثال الربط ، فإن الاستعلام التالي سيعيد قائمة الأقسام التي تضم أكثر من موظف واحد:

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

HAVINGHAVINGيُعدّ هذا الأمر مناسبًا، ولكنه ليس ضروريًا. قد يبدو الكود المكافئ للمثال أعلاه، ولكن بدون استخدام ، كما يلي:

SELECT * FROM ( SELECT DepartmentName AS deptNam , COUNT ( * ) AS empCount FROM Employee AS emp JOIN Department AS dept ON emp . DepartmentID = dept . DepartmentID GROUP BY deptNam ) AS grp WHERE grp . empCount > 1 ;

مراجع

  1. وثائق PostgreSQL 16.1 (ملف PDF) . مجموعة تطوير PostgreSQL العالمية. 2023. تم الاطلاع عليه في 8 فبراير 2024 .