مقدمة
عند العمل مع قواعد البيانات العلائقية ولغة الاستعلامات البنيوية (SQL)، يمكنك تخزين البيانات وإدارتها واسترجاعها من نظام إدارة قواعد البيانات العلائقية. تستطيع لغة SQL استرجاع البيانات سليمة كما تم تخزينها في قاعدة البيانات.
يمكن للغة SQL أيضًا إجراء العمليات الحسابية ومعالجة البيانات باستخدام الدوال. على سبيل المثال، يمكنك استخدام الدوال لاسترجاع أسعار المنتجات مقربةً إلى أقرب دولار، أو حساب متوسط عدد مرات شراء المنتج، أو تحديد عدد الأيام المتبقية حتى انتهاء ضمان المنتج.
في هذا البرنامج التعليمي، ستستخدم وظائف SQL المختلفة لإجراء العمليات الحسابية، ومعالجة السلاسل والتواريخ، وحساب الملخصات باستخدام وظائف التجميع.
المتطلبات الأساسية
لاتباع هذا الدليل، تحتاج إلى جهاز كمبيوتر يعمل بنظام إدارة قواعد بيانات علائقية (RDBMS) قائم على لغة SQL. تم التحقق من صحة التعليمات والأمثلة الواردة في هذا الدليل باستخدام البيئة التالية:
- خادم يعمل بنظام Ubuntu 20.04 مع مستخدم غير جذري يتمتع بامتيازات إدارية وجدار حماية مُكوّن باستخدام UFW، كما هو موضح في دليل الإعداد الأولي للخادم لنظام Ubuntu 20.04.
- تم تثبيت MySQL وتأمينه على الخادم، كما هو موضح في دليل "كيفية تثبيت MySQL على Ubuntu 20.04". يفترض هذا الدليل استخدام مستخدم MySQL غير الجذر الذي تم إنشاؤه باستخدام العملية الموضحة في الخطوة 3.
- مقدمة أساسية لتنفيذ استعلامات SELECT لاختيار البيانات من قاعدة البيانات، كما هو موضح في دليل "كيفية تحديد الصفوف من الجداول في SQL".
ملاحظة: تستخدم العديد من أنظمة إدارة قواعد البيانات العلائقية (RDBMS) تطبيقها الخاص للغة SQL. على الرغم من أن الأوامر الموضحة في هذا الدليل تعمل في معظم أنظمة إدارة قواعد البيانات العلائقية، إلا أن صيغة SQL القياسية تحدد عددًا محدودًا من الدوال. بالإضافة إلى ذلك، يختلف دعم الصيغة القياسية بين محركات قواعد البيانات المختلفة. قد تختلف الصيغة أو المخرجات الدقيقة إذا قمت باختبارها على نظام آخر غير MySQL.
ستحتاج أيضًا إلى قاعدة بيانات تحتوي على جداول محملة ببيانات نموذجية لتتمكن من استخدام الدوال. ننصحك بمراجعة قسم "الاتصال بـ MySQL وإعداد قاعدة بيانات نموذجية" للاطلاع على تفاصيل الاتصال بخادم MySQL وإنشاء قاعدة البيانات التجريبية المستخدمة في الأمثلة الواردة في هذا الدليل.
الاتصال بقاعدة بيانات MySQL وإعداد قاعدة بيانات نموذجية
في هذا القسم، ستتصل بخادم MySQL وتنشئ قاعدة بيانات نموذجية حتى تتمكن من اتباع الأمثلة الواردة في هذا الدليل.
إذا كان نظام قاعدة بيانات SQL الخاص بك يعمل على خادم بعيد، فقم بتسجيل الدخول إلى خادمك عبر SSH:
ssh sammy@your_server_ipثم افتح بيئة خادم MySQL، بدلاً من سامي أدخل اسم مستخدم MySQL الخاص بك:
mysql -u sammy -pأنشئ قاعدة بيانات باسم "المكتبة":
CREATE DATABASE bookstore;إذا تم إنشاء قاعدة البيانات بنجاح، فستتلقى مخرجات مشابهة لما يلي:
Output
Query OK, 1 row affected (0.01 sec)لاختيار قاعدة بيانات المكتبة، قم بتشغيل أمر USE:
USE bookstore;سوف ترى الناتج التالي:
Output
Database changedبعد اختيار قاعدة البيانات، يمكنك إنشاء جداول نموذجية فيها. في هذا الدليل، سنستخدم مكتبة افتراضية تبيع مجموعة متنوعة من الكتب لمؤلفين مختلفين.
يحتوي جدول الجرد على معلومات حول الكتب المتوفرة في المكتبة. ويتضمن الأعمدة التالية:
- book_id: يحتوي هذا العمود على معرّف كل كتاب، وهو معرّف من نوع البيانات int. يصبح هذا العمود المفتاح الأساسي للجدول، وتُمثّل كل قيمة فيه معرّفًا فريدًا للصف المقابل.
- المؤلف: يحتوي هذا العمود على اسم مؤلف الكتاب، معبراً عنه باستخدام نوع البيانات varchar بحد أقصى 50 حرفًا.
- العنوان: يحتوي هذا العمود على عنوان الكتاب الذي تم شراؤه، معبراً عنه باستخدام نوع بيانات varchar بحد أقصى 200 حرف.
- تاريخ_التقديم: يستخدم هذا العمود نوع بيانات التاريخ لتسجيل تاريخ تقديم كل كتاب من قبل المكتبة.
- المخزون: يحتوي هذا العمود على عدد الكتب الموجودة في مخزون المكتبة باستخدام نوع البيانات العددية الصحيحة.
- السعر: يخزن هذا العمود سعر التجزئة للكتاب باستخدام نوع البيانات العشرية بحد أقصى 5 قيم قبل الفاصلة العشرية وقيمتين بعدها.
قم بإنشاء جدول العينة باستخدام الأمر التالي:
CREATE TABLE inventory (
book_id int,
author varchar(50),
title varchar(200),
introduction_date date,
stock int,
price decimal(5, 2),
PRIMARY KEY (book_id)
);إذا تمت طباعة الإخراج التالي، فقد تم إنشاء الجدول:
Output
Query OK, 0 rows affected (0.00 sec)ثم قم بتحميل جدول المشتريات ببعض البيانات النموذجية عن طريق تنفيذ عملية INSERT INTO التالية:
INSERT INTO inventory
VALUES
(1, 'Oscar Wilde', 'The Picture of Dorian Gray', '2022-10-01', 4, 20.83),
(2, 'Jane Austen', 'Pride and Prejudice', '2022-10-04', 12, 42.13),
(3, 'Herbert George Wells', 'The Time Machine', '2022-09-23', 7, 21.99),
(4, 'Mary Shelley', 'Frankenstein', '2022-07-23', 9, 17.43),
(5, 'Mark Twain', 'The Adventures of Huckleberry Finn', '2022-10-01', 14, 23.15);تُضيف عملية INSERT INTO خمسة كتب بالقيم المُحددة إلى جدول المخزون. يُظهر الناتج التالي أنه تمت إضافة جميع الصفوف الخمسة:
Output
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
وبذلك، تكون جاهزًا لمتابعة بقية الدليل والبدء في استخدام الدوال في لغة SQL.
فهم وظائف SQL
الدوال هي تعابير مُسماة تأخذ قيمة واحدة أو أكثر، وتُجري عمليات حسابية أو تحويلات على البيانات، وتُعيد قيمة جديدة كنتيجة. يُمكن تشبيه دوال SQL بالدوال الرياضية. على سبيل المثال، تأخذ الدالة log(x) القيمة x وتُعيد لوغاريتم x.
على سبيل المثال، إذا كنت ترغب في استرداد جميع عناوين الكتب مع أسعارها، مرتبة من الأغلى إلى الأرخص، يمكنك تشغيل الأمر التالي:
SELECT title, price, introduction_date FROM inventory ORDER BY price DESC;ستحصل على مخرجات مشابهة لما يلي:
Output
+------------------------------------+-------+-------------------+
| title | price | introduction_date |
+------------------------------------+-------+-------------------+
| Pride and Prejudice | 42.13 | 2022-10-04 |
| The Adventures of Huckleberry Finn | 23.15 | 2022-10-01 |
| The Time Machine | 21.99 | 2022-09-23 |
| The Picture of Dorian Gray | 20.83 | 2022-10-01 |
| Frankenstein | 17.43 | 2022-07-23 |
+------------------------------------+-------+-------------------+
5 rows in set (0.000 sec)في هذا الأمر، عنوان، سعر و تاريخ التقديم هذه هي أسماء الأعمدة، وفي المخرجات، تعرض قاعدة البيانات القيم السليمة المسترجعة من تلك الأعمدة لكل كتاب: العنوان الكامل للكتاب، والسعر، وتاريخ وصول الكتاب إلى المكتبة.
مع ذلك، قد ترغب في استرجاع القيم من قاعدة البيانات بعد معالجتها أو تعديلها. قد يهمك مثلاً أسعار الكتب مقربةً لأقرب دولار، أو عناوين الكتب بأحرف كبيرة، أو سنة النشر دون الشهر أو اليوم. هنا يأتي دور الدالة.
يمكن تصنيف دوال SQL بشكل عام إلى عدة مجموعات، وذلك بحسب نوع البيانات التي تعمل عليها. وهذه هي الدوال الأكثر استخدامًا:
- الدوال الرياضية: الدوال التي تعمل على القيم العددية وتجري العمليات الحسابية، مثل التقريب واللوغاريتمات والجذور التربيعية والقوى.
- وظائف معالجة السلاسل النصية: وظائف تعمل على السلاسل النصية وحقول النصوص التي تقوم بتحويل النصوص، مثل تحويل النص إلى أحرف كبيرة، أو اقتطاعه، أو استبدال الكلمات في القيم.
- دوال التاريخ والوقت: دوال تعمل على حقول التاريخ. تُجري هذه الدوال عمليات حسابية وتحويلية، مثل إضافة عدد من الأيام إلى تاريخ معين أو طرح سنة من تاريخ كامل.
- الدوال التجميعية: حالة خاصة من الدوال الرياضية التي تعمل على القيم التي تم الحصول عليها من صفوف متعددة، مثل حساب متوسط السعر لجميع الصفوف.
ملاحظة: تُوسّع معظم قواعد البيانات العلائقية، بما فيها MySQL، مجموعة الدوال القياسية المُعرّفة في معيار SQL، بإضافة عمليات خاصة بمحرك قاعدة البيانات. تعمل العديد من الدوال خارج مجموعة دوال SQL القياسية بطريقة متشابهة عبر قواعد بيانات متعددة، بينما تختص دوال أخرى بنظام إدارة قواعد بيانات علائقية واحد وخصائصه الفريدة. يمكنك الرجوع إلى وثائق قاعدة البيانات التي اخترتها لمعرفة المزيد عن الدوال التي توفرها. في حالة MySQL، يمكنك الاطلاع على المزيد حول الدوال المُدمجة ومراجع المعاملات.
يوضح المثال التالي الصيغة العامة لاستخدام دالة وهمية غير موجودة باسم EXAMPLE لتعديل نتائج قيم الأسعار في قاعدة بيانات مخزون مكتبة باستخدام استعلام SELECT:
SELECT EXAMPLE(price) AS new_price FROM inventory;
تأخذ الدالة (مثال) اسم العمود (السعر) كوسيط بين قوسين. يُخبر هذا الجزء من الاستعلام قاعدة البيانات بتشغيل الدالة (مثال) على قيم السعر في العمود وإرجاع نتائج هذه العملية. يُخبر AS new_price قاعدة البيانات بتعيين اسم مؤقت (new_price) للقيم المحسوبة أثناء الاستعلام. باستخدام هذا الاسم، يمكنك تحديد نتائج الدالة في المخرجات والإشارة إلى القيم المحسوبة باستخدام عبارات WHERE و ORDER BY.
في القسم التالي، ستستخدم الدوال الرياضية لإجراء العمليات الحسابية الشائعة.
استخدام الدوال الرياضية
تتعامل الدوال الرياضية مع القيم العددية، مثل سعر كتاب أو عدد الكتب المتوفرة في قاعدة البيانات النموذجية. ويمكن استخدامها لإجراء عمليات حسابية في قاعدة البيانات لتخصيص النتائج وفقًا لاحتياجاتك.
يُعدّ التقريب أحد أكثر استخدامات الدوال الرياضية شيوعًا في لغة SQL. لنفترض أنك تحتاج إلى استرجاع أسعار جميع الكتب، ولكنك تريد فقط تقريب القيم إلى أقرب دولار. للقيام بذلك، يمكنك استخدام الدالة دائري استخدم الدالة التي تقوم بعملية التقريب.
قم بتشغيل الأمر التالي:
SELECT title, price, ROUND(price) AS rounded_price FROM inventory;
سوف ترى إخراجًا مشابهًا لما يلي:
Output
+------------------------------------+-------+---------------+
| title | price | rounded_price |
+------------------------------------+-------+---------------+
| The Picture of Dorian Gray | 20.83 | 21 |
| Pride and Prejudice | 42.13 | 42 |
| The Time Machine | 21.99 | 22 |
| Frankenstein | 17.43 | 17 |
| The Adventures of Huckleberry Finn | 23.15 | 23 |
+------------------------------------+-------+---------------+
5 rows in set (0.000 sec)يُعيد الأمر أعلاه قيم الأعمدة. عنوان و سعر مع عمود مؤقت السعر_المقرب وهذا ينتج عن الدالة ROUND(price) تأخذ هذه الدالة وسيطًا واحدًا، وهو اسم العمود (هنا، سعر) ويقوم بتقريب القيم في ذلك العمود في الجدول إلى أقرب عدد صحيح.
يمكن لدالة ROUND أيضًا قبول وسائط إضافية تحدد عدد المنازل العشرية التي يجب إجراء التقريب إليها، بالإضافة إلى العمليات الحسابية بدلًا من اسم العمود. على سبيل المثال، نفّذ الاستعلام التالي:
SELECT title, price, ROUND(price * stock, 1) AS stock_price FROM inventory;
سوف تحصل على النتيجة التالية:
Output
+------------------------------------+-------+-------+-------------+
| title | stock | price | stock_price |
+------------------------------------+-------+-------+-------------+
| The Picture of Dorian Gray | 4 | 20.83 | 83.3 |
| Pride and Prejudice | 12 | 42.13 | 505.6 |
| The Time Machine | 7 | 21.99 | 153.9 |
| Frankenstein | 9 | 17.43 | 156.9 |
| The Adventures of Huckleberry Finn | 14 | 23.15 | 324.1 |
+------------------------------------+-------+-------+-------------+
5 rows in set (0.000 sec)تنفيذ ROUND(Price * Stock, 1) يقوم البرنامج أولاً بضرب سعر الكتاب الواحد في عدد الكتب المتوفرة، ثم يُقرّب السعر الناتج إلى منزلة عشرية واحدة. وستُعرض النتيجة في العمود المؤقت Stock_Price.
تتضمن وظائف MySQL الرياضية الأخرى الدوال المثلثية، والجذور التربيعية، والأسس، واللوغاريتمات، والدوال الأسية. يمكنك معرفة المزيد عن استخدام الدوال الرياضية في SQL من خلال الدليل التعليمي "كيفية استخدام التعبيرات الرياضية ووظائف التجميع في SQL".
في القسم التالي، ستتعامل مع النصوص من قاعدة البيانات باستخدام وظائف SQL.
استخدام وظائف النص
يمكن استخدام دوال النصوص في لغة SQL لمعالجة وتغيير قيم السلاسل النصية. على سبيل المثال، قد ترغب في استرجاع أسماء الكتب بطريقة أكثر تنظيمًا عن طريق إزالة المسافات الزائدة من بداية ونهاية عناوينها.
للقيام بذلك، يمكنك استخدام الدالة تقليم استخدم هذه الدالة لإزالة جميع المسافات والأحرف الزائدة في بداية ونهاية السلسلة النصية.
خذ بعين الاعتبار المثال التالي:
SELECT LOWER(title) AS title_lowercase FROM inventory;
يتم عرض المخرجات التالية على الشاشة:
Output
+------------------------------------+
| title_lowercase |
+------------------------------------+
| the picture of dorian gray |
| pride and prejudice |
| the time machine |
| frankenstein |
| the adventures of huckleberry finn |
+------------------------------------+
5 rows in set (0.001 sec)
تأخذ دالة SQL المسماة LOWER وسيطًا واحدًا وتحول محتواه إلى أحرف صغيرة. ومن خلال العمود المستعار AS title_downcase، تُعرض البيانات الناتجة في عمود مؤقت يحمل الاسم title_downcase.
استرجع الآن جميع المؤلفين، هذه المرة مع تحويل الأحرف إلى أحرف كبيرة. جرّب تشغيل استعلام SQL التالي:
SELECT UPPER(author) AS author_uppercase FROM inventory;
سوف تحصل على النتيجة التالية:
Output
+----------------------+
| author_uppercase |
+----------------------+
| OSCAR WILDE |
| JANE AUSTEN |
| HERBERT GEORGE WELLS |
| MARY SHELLEY |
| MARK TWAIN |
+----------------------+
5 rows in set (0.000 sec)بدلاً من استخدام دالة LOWER، استخدمتَ دالة UPPER، التي تعمل بطريقة مشابهة ولكنها تحوّل النص إلى أحرف كبيرة. يمكن استخدام كلتا الدالتين لضمان اتساق حالة الأحرف عند استرجاع البيانات.
من دوال معالجة النصوص المفيدة الأخرى دالة CONCAT، التي تأخذ عدة وسائط تحتوي على قيم نصية وتدمجها معًا. جرّب استرجاع أسماء المؤلفين وعناوين الكتب في عمود واحد. للقيام بذلك، نفّذ الأمر التالي:
SELECT CONCAT(author, ': ', title) AS full_title FROM inventory;
يُنتج هذا الأمر المخرجات التالية:
Output +------------------------------------------------+ | full_title | +------------------------------------------------+ | Oscar Wilde: The Picture of Dorian Gray | | Jane Austen: Pride and Prejudice | | Herbert George Wells: The Time Machine | | Mary Shelley: Frankenstein | | Mark Twain: The Adventures of Huckleberry Finn | +------------------------------------------------+ 5 rows in set (0.001 sec)
تقوم دالة CONCAT بدمج عدة سلاسل نصية، وتُنفَّذ بثلاثة وسائط. الوسيط الأول، author، يشير إلى عمود author الذي يحتوي على اسم المؤلف. الوسيط الثاني، :، هو قيمة نصية اختيارية لفصل أسماء المؤلفين وعناوين الكتب بنقطتين رأسيتين. الوسيط الأخير، title، يشير إلى عمود title الذي يحتوي على عناوين الكتب.
ونتيجة لهذا الاستعلام، يتم إرجاع المؤلفين والعناوين في عمود مؤقت يسمى full_title، والذي يتم دمجه مباشرة بواسطة محرك قاعدة البيانات.
تتضمن وظائف السلاسل النصية الأخرى المدمجة في MySQL وظائف للبحث عن السلاسل النصية واستبدالها، واسترجاع السلاسل الفرعية، وإضافة الحشوات وحذف المسافات الزائدة من قيم السلاسل النصية، وتطبيق التعابير النمطية، وغيرها. يمكنك معرفة المزيد حول استخدام وظائف SQL لدمج قيم متعددة في البرنامج التعليمي "كيفية معالجة البيانات باستخدام وظائف CAST وتعبيرات الدمج في SQL". كما يمكنك الرجوع إلى قسم "وظائف السلاسل النصية ومعاملاتها" في وثائق MySQL.
في القسم التالي، ستستخدم وظائف SQL لمعالجة التواريخ من قاعدة البيانات.
استخدام وظائف التاريخ والوقت
تتيح لك دوال التاريخ والوقت في لغة SQL معالجة القيم المخزنة في الأعمدة التي تحتوي على التواريخ والطوابع الزمنية أثناء تنفيذ استعلامات SQL. ويمكن استخدامها لاستخراج أجزاء من معلومات التاريخ، أو إجراء عمليات حسابية على التاريخ، أو تنسيق التواريخ والطوابع الزمنية إلى تنسيقات الإخراج المطلوبة.
لنفترض أنك بحاجة إلى تقسيم تاريخ نشر الكتاب إلى السنة والشهر واليوم بشكل منفصل بدلاً من وجود عمود تاريخ واحد في الناتج.
حاول تشغيل الأمر التالي:
SELECT introduction_date, YEAR(introduction_date) as year, MONTH(introduction_date) as month, DAY(introduction_date) as day FROM inventory;
سوف ترى إخراجًا مشابهًا لما يلي:
Output
+-------------------+------+-------+------+
| introduction_date | year | month | day |
+-------------------+------+-------+------+
| 2022-10-01 | 2022 | 10 | 1 |
| 2022-10-04 | 2022 | 10 | 4 |
| 2022-09-23 | 2022 | 9 | 23 |
| 2022-07-23 | 2022 | 7 | 23 |
| 2022-10-01 | 2022 | 10 | 1 |
+-------------------+------+-------+------+
5 rows in set (0.000 sec)تستخدم عبارة SQL هذه ثلاث دوال منفصلة: YEAR وMONTH وDAY. تأخذ كل دالة اسم العمود الذي تُخزَّن فيه التواريخ كمعامل، وتستخرج جزءًا واحدًا فقط من التاريخ الكامل: السنة، أو الشهر، أو اليوم، على التوالي. باستخدام هذه الدوال، يمكنك الوصول إلى أجزاء التاريخ الفردية في استعلامات SQL.
من الوظائف المفيدة الأخرى لمعالجة التواريخ دالة DATEDIFF، التي تتيح لك حساب عدد الأيام بين تاريخين. الآن، تحقق من عدد الأيام التي انقضت بين تاريخ إصدار كل كتاب والتاريخ الحالي.
قم بتشغيل الاستعلام التالي:
SELECT introduction_date, DATEDIFF(introduction_date, CURRENT_DATE()) AS days_since FROM inventory;
يتم عرض المخرجات التالية على الشاشة:
Output
+-------------------+------------+
| introduction_date | days_since |
+-------------------+------------+
| 2022-10-01 | -30 |
| 2022-10-04 | -27 |
| 2022-09-23 | -38 |
| 2022-07-23 | -100 |
| 2022-10-01 | -30 |
+-------------------+------------+
5 rows in set (0.000 sec)تأخذ دالة DATEDIFF وسيطين: تاريخ البداية وتاريخ النهاية. تحسب هذه الدالة عدد الأيام التي تفصل بين هذين التاريخين. إذا كان تاريخ النهاية أسبق، فقد تكون النتيجة عددًا سالبًا. في هذا المثال، الوسيط الأول هو اسم عمود introduction_date، الذي يحتوي على التواريخ في جدول المخزون. أما الوسيط الثاني فهو دالة أخرى تُسمى CURRENT_DATE، والتي تُمثل تاريخ النظام الحالي. عند تشغيل هذا الاستعلام، يتم استرجاع عدد الأيام بين هذين التاريخين، وتُخزن النتائج في عمود مؤقت يُسمى days_since.
ملاحظة: دالة DATEDIFF ليست جزءًا من مجموعة دوال SQL القياسية الرسمية. مع أن العديد من قواعد البيانات تدعم هذه الدالة، إلا أن صيغتها تختلف غالبًا بين محركات قواعد البيانات المختلفة. يتبع هذا المثال صيغة MySQL الأصلية.
تتضمن وظائف معالجة التواريخ الأخرى المدمجة في MySQL إضافة وطرح الفترات الزمنية والتواريخ، وتنسيق التواريخ للغات المختلفة، واسترجاع أسماء الأيام والأشهر، أو إنشاء قيم تواريخ جديدة. يمكنك معرفة المزيد حول التعامل مع التواريخ في SQL من خلال دليل "كيفية التعامل مع التواريخ والأوقات في SQL". كما يمكنك الرجوع إلى وظائف التاريخ والوقت في وثائق MySQL.
في القسم التالي، ستتعلم كيفية استخدام الدوال التجميعية.
استخدام الدوال التجميعية
في جميع الأمثلة السابقة، استخدمتَ دوال SQL لتطبيق تحويلات أو عمليات حسابية على قيم أعمدة فردية في صف، يُمثل كتابًا في مكتبة. يوفر SQL طريقة لإجراء عمليات حسابية على صفوف متعددة لمساعدتك في الحصول على معلومات إجمالية حول مجموعة البيانات بأكملها.
- تتضمن الدوال التجميعية الأساسية في لغة SQL ما يلي:
- AVG هو متوسط القيم التي يتم إجراء الحسابات عليها.
- COUNT لعدد القيم التي يتم إجراء العمليات الحسابية عليها.
- MAX تعني القيمة القصوى.
- الحد الأدنى للقيمة.
- المجموع هو مجموع جميع القيم.
يمكنك تضمين عدة دوال تجميعية في استعلام SELECT الخاص بك. تخيل أنك تريد التحقق من عدد الكتب المعروضة في مكتبة، وأعلى سعر لكل كتاب متاح، ومتوسط السعر في جميع الكتب المعروضة. للقيام بذلك، نفّذ العبارة التالية:
SELECT COUNT(title) AS count, MAX(price) AS max_price, AVG(price) AS avg_price FROM inventory;
يُنتج هذا الأمر المخرجات التالية:
Output
+-------+-----------+-----------+
| count | max_price | avg_price |
+-------+-----------+-----------+
| 5 | 42.13 | 25.106000 |
+-------+-----------+-----------+
1 row in set (0.001 sec)يستخدم الاستعلام أعلاه ثلاث دوال تجميعية في آن واحد. تقوم دالة COUNT بحساب عدد الصفوف التي يبحث عنها الاستعلام. في هذا المثال، تم تمرير العنوان كوسيط، ولكن بما أن عدد الصفوف سيكون متساوياً لكل عمود مُحدد، يمكنك استخدام أي اسم عمود آخر كوسيط للدالة. تحسب دالة MAX القيمة القصوى من عمود السعر: هنا، اسم العمود مهم، لأن الحساب يتم على القيم الموجودة في ذلك العمود. أما الدالة الأخيرة فهي دالة AVG، التي تحسب متوسط جميع الأسعار من عمود السعر.
يؤدي استخدام الدوال التجميعية بهذه الطريقة إلى إرجاع صف إلى قاعدة البيانات يحتوي على أعمدة مؤقتة تمثل قيم العمليات الحسابية التجميعية. تُستخدم صفوف المصدر داخليًا في الحساب، ولكنها لا تُعاد عبر الاستعلام. في هذا المثال، استخدمتَ الدوال التجميعية لحساب القيم الإحصائية من جدول المخزون بأكمله دفعة واحدة، مع مراعاة جميع الصفوف في الملخص.
باستخدام لغة SQL، يمكنك أيضًا تقسيم صفوف الجدول إلى مجموعات، ثم حساب مجموع كل مجموعة على حدة. على سبيل المثال، يمكنك حساب متوسط سعر الكتب لمؤلفين مختلفين لمعرفة أي مؤلف نشر أغلى الكتب. يمكنك معرفة المزيد عن تجميع الصفوف لإجراء مثل هذه الحسابات في الدرس التعليمي "كيفية استخدام GROUP BY وORDER BY في SQL". كما يمكنك معرفة المزيد عن استخدام الدوال التجميعية في الدرس التعليمي "كيفية استخدام التعبيرات الرياضية ودوال التجميع في SQL".
نتيجة
في هذا الدليل، تعلمت كيفية استخدام الدوال في لغة SQL لإجراء العمليات الحسابية على البيانات وإنشاء استعلامات أكثر تعقيدًا. تساعدك هذه الدوال على معالجة البيانات بطرق مختلفة والحصول على نتائج أفضل. ضع في اعتبارك أن الصيغة الدقيقة للغة SQL قد تختلف باختلاف نوع نظام إدارة قواعد البيانات العلائقية (RDBMS) الذي تستخدمه.









