- تساعدنا جملة SQL في استرداد مجموعة أو حزم من السجلات من الجدول.
- تساعدنا جملة SQL على تحديد شرط على الأعمدة أو سجلات الجدول.
الجمل المختلفة المتوفرة في لغة الاستعلام الهيكلية هي كما يلي:
- حيث الشرطية
- المجموعة حسب البند
- وجود بند
- الترتيب حسب البند
دعونا نرى كل جملة واحدة تلو الأخرى مع مثال. سوف نستخدم قاعدة بيانات MySQL لكتابة الاستعلامات في الأمثلة.
1. أين البند
يتم استخدام جملة WHERE في SQL مع استعلام SELECT، وهو أحد أوامر لغة معالجة البيانات. حيث يمكن استخدام جمل لتحديد عدد الصفوف التي سيتم عرضها في مجموعة النتائج، فهي تساعد بشكل عام في تصفية السجلات. تقوم بإرجاع فقط تلك الاستعلامات التي تفي بالشروط المحددة لعبارة WHERE. حيث يتم استخدام جملة في عبارة SELECT، UPDATE، DELETE، وما إلى ذلك.
جملة WHERE مع استعلام SELECT
يتم استخدام رمز النجمة مع جملة WHERE في استعلام SELECT لاسترداد كافة قيم الأعمدة لكل سجل من الجدول.
بناء جملة حيث مع استعلام تحديد لاسترداد كافة قيم الأعمدة لكل سجل من جدول:
SELECT * FROM TABLENAME WHERE CONDITION;
إذا أردنا فقط استرداد الأعمدة الانتقائية وفقًا للمتطلبات، فسنستخدم بناء الجملة أدناه:
SELECT COLUMNNAME1, COLUMNNAME2 FROM TABLENAME WHERE CONDITION;
خذ بعين الاعتبار جدول الموظفين الذي يحتوي على البيانات التالية:
معرف_E | اسم | مرتب | مدينة | تعيين | تاريخ_الانضمام | عمر |
---|---|---|---|---|---|---|
1 | ساكشي كوماري | 50000 | مومباي | مدير المشروع | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75000 | دلهي | مهندس نظم | 2019-12-24 | 23 |
3 | أنوجا شارما | 40000 | جايبور | مدير | 2021-08-15 | 26 |
4 | أنوشكا تريباثي | 90000 | مومباي | مختبري البرمجيات | 2021-06-13 | 24 |
5 | روشا جاجتاب | 45000 | بنغالور | مدير المشروع | 2020-08-09 | 23 |
6 | روتوجا ديشموخ | 60000 | بنغالور | مدير | 2019-07-17 | 26 |
7 | صوت بافيسكار | 55000 | جايبور | مهندس نظم | 2021-10-10 | 24 |
8 | هناك الشيخ | 45000 | بيون | مهندس برمجيات | 2020-09-10 | 26 |
9 | سواتي كوماري | 50000 | بيون | مختبري البرمجيات | 2021-01-01 | 25 |
10 | مايوري باتل | 60000 | مومباي | مدير المشروع | 2020-10-02 | 24 |
أحد عشر | Simran Khanna | 45500 | كولهابور | الموارد البشرية | 2019-01-02 | 26 |
12 | شيفاني واغ | 50500 | دلهي | مطور برامج | 2016-09-10 | 25 |
13 | كيران ماهيشواري | 50000 | ناشيك | الموارد البشرية | 12-12-2013 | 23 |
14 | تيجال جاين | 40000 | دلهي | مدير المشروع | 2017-11-10 | 25 |
خمسة عشر | Mohini Shah | 38000 | بيون | مطور برامج | 2019-03-05 | عشرين |
مثال 1:
اكتب استعلامًا لاسترداد جميع سجلات الموظف الذي يكون راتب الموظف فيه أكبر من 50000.
استفسار:
mysql> SELECT * FROM employees WHERE Salary > 50000;
سيعرض الاستعلام أعلاه جميع السجلات الخاصة بالموظف حيث يكون راتب الموظف أكبر من 50000. لن يتم عرض راتب أقل من 50000 وفقًا للشروط.
سوف تحصل على الإخراج التالي:
وفقًا للمخرجات المتوقعة، يتم عرض تلك السجلات فقط عندما يكون راتب الموظف أكبر من 50000. هناك ستة سجلات في جدول الموظف تستوفي الشرط المحدد.
مثال 2:
اكتب استعلامًا لتحديث سجل الموظف وقم بتعيين الاسم المحدث كـ 'Harshada Sharma' حيث يكون اسم مدينة الموظف هو جايبور.
استفسار:
mysql> UPDATE employees SET Name = 'Harshada Sharma' WHERE City = 'Jaipur';
سيؤدي الاستعلام أعلاه إلى تحديث اسم الموظف إلى 'هارشادا شارما'، حيث مدينة الموظف هي جايبور.
للتحقق من تحديث السجلات أم لا، سنقوم بتشغيل استعلام تحديد.
mysql> SELECT * FROM employees;
يوجد سجل واحد فقط في جدول الموظف حيث مدينة الموظف هي 'جايبور'. معرف السجل هو 3، وهو ما يفي بالشرط المحدد. وبالتالي، وفقًا للشرط المحدد، تم الآن تغيير اسم الموظف بمعرف الموظف 3 إلى 'هارشادا شارما'.
مثال 3:
اكتب استعلامًا لحذف سجل موظف حيث يكون تاريخ انضمام الموظف هو '12-12-2013'.
استفسار:
mysql> DELETE FROM employees WHERE Date_of_Joining = '2013-12-12';
سيؤدي الاستعلام أعلاه إلى حذف تفاصيل الموظف الذي تاريخ انضمامه هو '12-12-2013'.
للتحقق من نتائج الاستعلام أعلاه، سنقوم بتنفيذ استعلام التحديد.
جافا مقارنة السلسلة
mysql> SELECT *FROM employees;
يوجد سجل واحد فقط في جدول الموظف حيث يكون تاريخ انضمام الموظف هو '12-12-2013'. معرف السجل هو 13، وهو ما يفي بالشرط المحدد. وبالتالي، وفقًا للشرط المحدد، يتم الآن حذف الموظف بمعرف الموظف 13 من جدول الموظف.
2. المجموعة حسب البند
يتم استخدام جملة Group By لترتيب أنواع مماثلة من السجلات في المجموعات في لغة الاستعلام الهيكلية. يتم استخدام جملة التجميع حسب في لغة الاستعلام الهيكلية مع بيان التحديد. يتم وضع المجموعة حسب الجملة بعد عبارة المكان في عبارة SQL. يتم استخدام جملة Group By خصيصًا مع الدالة التجميعية، أي max ()، min ()، avg ()، sum ()، count () لتجميع النتيجة بناءً على عمود واحد أو أكثر.
بناء جملة جملة Group By:
SELECT * FROM TABLENAME GROUP BY COLUMNNAME;
سيحدد بناء الجملة أعلاه جميع البيانات أو السجلات من الجدول، ولكنه سيرتب كل تلك البيانات أو السجلات في المجموعات بناءً على اسم العمود الوارد في الاستعلام.
بناء جملة Group By مع الوظائف التجميعية:
SELECT COLUMNNAME1, Aggregate_FUNCTION (COLUMNNAME) FROM TABLENAME GROUP BY COLUMNNAME;
دعونا نفهم جملة Group By بمساعدة الأمثلة.
خذ بعين الاعتبار جدول الموظفين الذي يحتوي على البيانات التالية:
معرف_E | اسم | مرتب | مدينة | تعيين | تاريخ_الانضمام | عمر |
---|---|---|---|---|---|---|
1 | ساكشي كوماري | 50000 | مومباي | مدير المشروع | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75000 | دلهي | مهندس نظم | 2019-12-24 | 23 |
3 | أنوجا شارما | 40000 | جايبور | مدير | 2021-08-15 | 26 |
4 | أنوشكا تريباثي | 90000 | مومباي | مختبري البرمجيات | 2021-06-13 | 24 |
5 | روشا جاجتاب | 45000 | بنغالور | مدير المشروع | 2020-08-09 | 23 |
6 | روتوجا ديشموخ | 60000 | بنغالور | مدير | 2019-07-17 | 26 |
7 | صوت بافيسكار | 55000 | جايبور | مهندس نظم | 2021-10-10 | 24 |
8 | هناك الشيخ | 45000 | بيون | مهندس برمجيات | 2020-09-10 | 26 |
9 | سواتي كوماري | 50000 | بيون | مختبري البرمجيات | 2021-01-01 | 25 |
10 | مايوري باتل | 60000 | مومباي | مدير المشروع | 2020-10-02 | 24 |
أحد عشر | Simran Khanna | 45500 | كولهابور | الموارد البشرية | 2019-01-02 | 26 |
12 | شيفاني واغ | 50500 | دلهي | مطور برامج | 2016-09-10 | 25 |
13 | كيران ماهيشواري | 50000 | ناشيك | الموارد البشرية | 12-12-2013 | 23 |
14 | تيجال جاين | 40000 | دلهي | مدير المشروع | 2017-11-10 | 25 |
خمسة عشر | Mohini Shah | 38000 | بيون | مطور برامج | 2019-03-05 | عشرين |
مثال 1:
اكتب استعلامًا لعرض كافة سجلات جدول الموظفين مع تجميع النتائج بناءً على عمود العمر.
استفسار:
mysql> SELECT * FROM employees GROUP BY Age;
سيعرض الاستعلام أعلاه جميع سجلات جدول الموظفين ولكن مجمعة حسب عمود العمر.
سوف تحصل على الإخراج التالي:
مثال 2:
قم بكتابة استعلام لعرض كافة سجلات جدول الموظفين مجمعة حسب الوظيفة والراتب.
استفسار:
mysql> SELECT * FROM employees GROUP BY Salary, Designation;
سيعرض الاستعلام أعلاه جميع سجلات جدول الموظفين ولكن مجمعة حسب عمود الراتب والتعيين.
سوف تحصل على الإخراج التالي:
أمثلة على جملة Group By باستخدام الوظائف التجميعية
مثال 1:
اكتب استعلامًا لسرد عدد الموظفين الذين يعملون في تعيين معين وقم بتجميع النتائج حسب تعيين الموظف.
استفسار:
mysql> SELECT COUNT (E_ID) AS Number_of_Employees, Designation FROM employees GROUP BY Designation;
سيعرض الاستعلام أعلاه التعيين مع عدد الموظفين العاملين على هذا التعيين. سيتم تجميع كل هذه النتائج حسب عمود التعيين.
سوف تحصل على الإخراج التالي:
وفقًا للمخرجات المتوقعة، يتم عرض التعيين مع عدد الموظفين المعنيين.
مثال 2:
اكتب استعلامًا لعرض مجموع راتب الموظف حسب المدينة مجمعة حسب عمر الموظف.
استفسار:
mysql> SELECT SUM (Salary) AS Salary, City FROM employees GROUP BY City;
سيقوم الاستعلام أعلاه أولاً بحساب مجموع رواتب العاملين في كل مدينة، ثم سيعرض مجموع الراتب مع الراتب المعني ولكن مجمعاً حسب عمود العمر.
سوف تحصل على الإخراج التالي:
حسب المخرجات المتوقعة يتم عرض مجموع راتب الموظف حسب المدينة التي ينتمي إليها الموظف. إذا كان هناك موظفان ينتميان إلى نفس المدينة، فسيكونان في مجموعة واحدة.
3. وجود بند:
عندما نحتاج إلى وضع أي شروط على عمود الجدول، نستخدم جملة WHERE في SQL. ولكن إذا أردنا استخدام أي شرط في عمود في جملة Group By في ذلك الوقت، فسنستخدم جملة HAVING مع جملة Group By لشروط العمود.
بناء الجملة:
TABLENAME GROUP BY COLUMNNAME HAVING CONDITION;
خذ بعين الاعتبار جدول الموظفين الذي يحتوي على البيانات التالية:
معرف_E | اسم | مرتب | مدينة | تعيين | تاريخ_الانضمام | عمر |
---|---|---|---|---|---|---|
1 | ساكشي كوماري | 50000 | مومباي | مدير المشروع | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75000 | دلهي | مهندس نظم | 2019-12-24 | 23 |
3 | أنوجا شارما | 40000 | جايبور | مدير | 2021-08-15 | 26 |
4 | أنوشكا تريباثي | 90000 | مومباي | مختبري البرمجيات | 2021-06-13 | 24 |
5 | روشا جاجتاب | 45000 | بنغالور | مدير المشروع | 2020-08-09 | 23 |
6 | روتوجا ديشموخ | 60000 | بنغالور | مدير | 2019-07-17 | 26 |
7 | صوت بافيسكار | 55000 | جايبور | مهندس نظم | 2021-10-10 | 24 |
8 | هناك الشيخ | 45000 | بيون | مهندس برمجيات | 2020-09-10 | 26 |
9 | سواتي كوماري | 50000 | بيون | مختبري البرمجيات | 2021-01-01 | 25 |
10 | مايوري باتل | 60000 | مومباي | مدير المشروع | 2020-10-02 | 24 |
أحد عشر | Simran Khanna | 45500 | كولهابور | الموارد البشرية | 2019-01-02 | 26 |
12 | شيفاني واغ | 50500 | دلهي | مطور برامج | 2016-09-10 | 25 |
13 | كيران ماهيشواري | 50000 | ناشيك | الموارد البشرية | 12-12-2013 | 23 |
14 | تيجال جاين | 40000 | دلهي | مدير المشروع | 2017-11-10 | 25 |
خمسة عشر | Mohini Shah | 38000 | بيون | مطور برامج | 2019-03-05 | عشرين |
مثال 1:
اكتب استعلامًا لعرض اسم الموظفين والراتب والمدينة التي يزيد فيها الحد الأقصى لراتب الموظف عن 40000 وقم بتجميع النتائج حسب التعيين.
استفسار:
mysql> SELECT Name, City, MAX (Salary) AS Salary FROM employees GROUP BY Designation HAVING MAX (Salary) > 40000;
سوف تحصل على الإخراج التالي:
يوضح الناتج أعلاه أن اسم الموظف وراتبه ومدينة الموظف حيث يكون راتب الموظف أكبر من 40000 مجمعة حسب التعيين. (يتم وضع الموظفين الذين يحملون تسميات مماثلة في مجموعة واحدة، ويتم وضع الموظفين الذين لديهم تسميات أخرى بشكل منفصل).
مثال 2:
قم بكتابة استعلام لعرض اسم الموظفين والمنصب حيث يكون مجموع راتب الموظف أكبر من 45000 وتجميع النتائج حسب المدينة.
استفسار:
mysql> SELECT Name, Designation, SUM (Salary) AS Salary FROM employees GROUP BY City HAVING SUM (Salary) > 45000;
سوف تحصل على الإخراج التالي:
يُظهر الإخراج أعلاه اسم الموظف وتعيينه وراتبه. مجموع الراتب أكبر من 45000 مجمعة حسب المدينة. (يتم وضع الموظفين الذين لديهم مدن متشابهة في مجموعة واحدة ويتم وضع الموظفين الذين لديهم مدينة مختلفة غير متشابهة بشكل منفصل).
4. الترتيب حسب البند
عندما نريد فرز أي شيء في SQL، نستخدم جملة ORDER BY. ستساعدنا عبارة ORDER BY في SQL على فرز البيانات بناءً على العمود المحدد في الجدول. وهذا يعني أنه سيتم فرز جميع البيانات المخزنة في العمود المحدد الذي نقوم بتنفيذ جملة ORDER BY عليه. سيتم عرض قيم الأعمدة المقابلة بالتسلسل الذي حصلنا فيه على القيم في الخطوة السابقة.
كما نعلم جميعًا، فإن الفرز يعني إما بالترتيب التصاعدي أو الترتيب التنازلي. بنفس الطريقة، يقوم ORDER BY CLAUSE بفرز البيانات بترتيب تصاعدي أو تنازلي وفقًا لمتطلباتنا. سيتم فرز البيانات بترتيب تصاعدي كلما الكلمة الأساسية ASC يتم استخدامه مع ORDER by جملة، و الكلمة المفتاحية DESC سيتم فرز السجلات بترتيب تنازلي.
افتراضيًا، سيتم إجراء الفرز في SQL باستخدام جملة ORDER BY بترتيب تصاعدي إذا لم نذكر ترتيب الفرز.
قبل الانتقال إلى مثال جملة ORDER BY لفرز السجلات، سنلقي نظرة أولاً على بناء الجملة بحيث يكون من السهل علينا استعراض المثال.
بناء جملة جملة ORDER BY بدون الكلمة الأساسية asc وdesc:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMNAME;
بناء جملة جملة ORDER BY للفرز بترتيب تصاعدي:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME ASC;
بناء جملة جملة ORDER BY للفرز بترتيب تنازلي:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME DESC;
لنفترض أن لدينا جدول للموظفين يحتوي على البيانات التالية:
معرف_E | اسم | مرتب | مدينة | تعيين | تاريخ_الانضمام | عمر |
---|---|---|---|---|---|---|
1 | ساكشي كوماري | 50000 | مومباي | مدير المشروع | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75000 | دلهي | مهندس نظم | 2019-12-24 | 23 |
3 | أنوجا شارما | 40000 | جايبور | مدير | 2021-08-15 | 26 |
4 | أنوشكا تريباثي | 90000 | مومباي | مختبري البرمجيات | 2021-06-13 | 24 |
5 | روشا جاجتاب | 45000 | بنغالور | مدير المشروع | 2020-08-09 | 23 |
6 | روتوجا ديشموخ | 60000 | بنغالور | مدير | 2019-07-17 | 26 |
7 | صوت بافيسكار | 55000 | جايبور | مهندس نظم | 2021-10-10 | 24 |
8 | هناك الشيخ | 45000 | بيون | مهندس برمجيات | 2020-09-10 | 26 |
9 | سواتي كوماري | 50000 | بيون | مختبري البرمجيات | 2021-01-01 | 25 |
10 | مايوري باتل | 60000 | مومباي | مدير المشروع | 2020-10-02 | 24 |
أحد عشر | Simran Khanna | 45500 | كولهابور | الموارد البشرية | 2019-01-02 | 26 |
12 | شيفاني واغ | 50500 | دلهي | مطور برامج | 2016-09-10 | 25 |
13 | كيران ماهيشواري | 50000 | ناشيك | الموارد البشرية | 12-12-2013 | 23 |
14 | تيجال جاين | 40000 | دلهي | مدير المشروع | 2017-11-10 | 25 |
خمسة عشر | Mohini Shah | 38000 | بيون | مطور برامج | 2019-03-05 | عشرين |
مثال 1:
اكتب استعلامًا لفرز السجلات بالترتيب التصاعدي لتعيين الموظف من جدول الموظفين.
استفسار:
mysql> SELECT * FROM employees ORDER BY Designation;
هنا في استعلام SELECT، يتم تطبيق عبارة ORDER BY على العمود 'Designation' لفرز السجلات، لكننا لم نستخدم الكلمة الأساسية ASC بعد جملة ORDER BY للفرز بترتيب تصاعدي. لذا، افتراضيًا، سيتم فرز البيانات بترتيب تصاعدي إذا لم نحدد كلمة رئيسية تصاعدية.
سوف تحصل على الإخراج التالي:
وفقًا للمخرجات المتوقعة، يتم عرض السجلات بترتيب تصاعدي لتعيين الموظف.
مثال 2:
قم بكتابة استعلام لعرض اسم الموظف وراتبه بالترتيب التصاعدي لراتب الموظف من جدول الموظفين.
استفسار:
متى خرج ويندوز 7
mysql> SELECT Name, Salary FROM employees ORDER BY Salary ASC;
هنا في استعلام SELECT، يتم تطبيق عبارة ORDER BY على عمود 'الراتب' لفرز السجلات. لقد استخدمنا الكلمة الأساسية ASC لفرز راتب الموظف بترتيب تصاعدي.
سوف تحصل على الإخراج التالي:
يتم عرض كافة السجلات بالترتيب التصاعدي لراتب الموظف.
مثال 3:
اكتب استعلامًا لفرز البيانات بترتيب تنازلي لاسم الموظف المخزن في جدول الموظفين.
استفسار:
mysql> SELECT * FROM employees ORDER BY Name DESC;
لقد استخدمنا هنا جملة ORDER BY مع استعلام SELECT المطبق على عمود الاسم لفرز البيانات. لقد استخدمنا الكلمة الأساسية DESC بعد جملة ORDER BY لفرز البيانات بترتيب تنازلي.
سوف تحصل على الإخراج التالي:
يتم عرض كافة السجلات بترتيب تنازلي لاسم الموظف.