الاستدامة في الأعمال التجارية صعبة بدون إدارة مناسبة للبيانات. يعد بناء نظام محدد جيدًا أمرًا ضروريًا لإدارة العمليات الداخلية والخارجية. تساعد الرؤية التفصيلية لبيانات الأعمال في فهم سير العمل العام وقياس الأداء. علاوة على ذلك، فإن استخدام قواعد البيانات يوفر الوقت ويسمح بالوصول إلى المعلومات دون عناء.
ما هي قاعدة البيانات؟
إن قاعدة البيانات هي نظام منظم يُستخدم لتخزين المعلومات بطريقة آمنة. وهي توفر التصنيف وتسمح بإنشاء الجداول لفرز الأنواع المتشابهة من العناصر تحت مجموعة واحدة. توفر الجداول خيارات لسرد المعلومات في صفوف وأعمدة متعددة. ونتيجة لذلك، تتحسن جودة البيانات واتساقها. إلى جانب إمكانيات التخزين وسهولة الوصول، تلعب قواعد البيانات دورًا مهمًا في حماية الخصوصية وتأمين الأنظمة. وسواء كان ذلك بشكل مؤقت أو كجزء من عملية مبرمجة في تطبيق ما، فإن استرداد البيانات يعد أحد أهم الجوانب في إدارة قواعد البيانات.
إن الاستعلام في نظام إدارة قواعد البيانات العلاقاتي (DMS) هو أي أمر يُستخدم لاسترداد البيانات من جدول. SELECT تُستخدم عبارات تقريبًا دائمًا في استعلامات لغة الاستعلام الهيكلية (SQL). هناك عدة طرق لاسترداد المعلومات من قاعدة البيانات. بشكل عام، يفضل المطورون خيار سطر الأوامر لأنه سريع وفعال. فهو يتيح تقديم الاستعلامات بسلاسة.
في هذا الدليل، سنعرفك على MySQL ونناقش كيفية العمل مع الاستعلامات في MySQL. فلنبدأ!
المتطلبات الأساسية
لمتابعة هذا البرنامج التعليمي، ستحتاج إلى ما يلي:
-
أحدث إصدار من Ubuntu مثبت على نظامك.
-
يجب أن يمتلك مستخدمو النظام امتيازات sudo.
-
إذا واجهت صعوبة في الوصول إلى حساب sudo الخاص بك، ففكر في تغيير كلمة مرور جذر MySQL.
-
-
تم إعداد MySQL على خادمك.
الخطوة 1 — إنشاء قاعدة بيانات وإعدادها
قبل أن نبدأ ونكتب أول استعلام SQL لنا، نحتاج إلى إنشاء قاعدة بيانات وإضافة جداول إليها. بعد ذلك، سنقوم بملء الجداول باستخدام بيانات عينة. سيساعدك العمل مع قواعد البيانات على فهم الإعداد الأساسي وغرس الثقة في العمل مع الاستعلامات.
الخبرة العملية هي الطريقة الأكثر فعالية لبناء المفاهيم وفهم أهمية قواعد البيانات. في هذا الدليل، سنأخذك في جولة حول استخدام قواعد البيانات وأهميتها لحل مشكلات العالم الحقيقي. دعنا نتحقق من سيناريو لفهم كيف يمكن لقواعد البيانات أن تساعد في تنظيم السجلات بطريقة منظمة.
السيناريو: سنقوم بإنشاء قاعدة بيانات حيث تذهب مجموعة من طلاب الجامعات في إجازة للاحتفال بأعياد ميلادهم. قبل الذهاب في العطلة، يخططون للمشاركة في مسابقة سباحة ودية. كما يخطط كل صديق في المجموعة لقائمة مهام من الأنشطة لجعل رحلتهم مثيرة وممتعة.
أولاً، افتح MySQL كمستخدم جذر (root):
|
1 |
$ sudo mysql |
ثم، قم بإنشاء قاعدة بيانات عن طريق تشغيل الأمر التالي:
|
1 2 3 |
mysql> CREATE DATABASE `vacation`; Query OK, 1 row affected (0.52 sec) |
بعد ذلك، دعنا نستخدم قاعدة البيانات الخاصة بنا باستخدام الأمر التالي:
|
1 |
mysql> USE vacation; |
بعد ذلك، سنقوم بإنشاء جداول في قاعدة البيانات الخاصة بنا. قم بتسمية الجدول الأول باسم celebration. سيحتوي جدولنا على أعمدة لأسماء أصدقائنا (name)، والبطولات التي فازوا بها (wins) وأيضًا عمود لـ أفضل وقت (time):
|
1 2 3 4 5 6 7 |
mysql> CREATE TABLE celebration ( -> name varchar(50), -> wins real, -> time real -> ); Query OK, 0 rows affected (2.03 sec) |
سنقوم بعد ذلك بملء جدولنا بالبيانات:
|
1 2 3 4 5 6 7 8 9 |
mysql> INSERT INTO celebration (name, wins, time) VALUES('Austin', '4', '15.5'), ('Ivan','7','9'), ('Aisha','10','5'), ('Zane','13','7.5'); Query OK, 4 rows affected (0.29 sec) Records: 4 Duplicates: 0 Warnings: 0 |
ثم قم بإنشاء جدول آخر داخل قاعدة البيانات الخاصة بنا لتخزين معلومات حول أنشطة أعياد الميلاد المفضلة لديهم. سنقوم بإنشاء جدول يسمى vacation ويحتوي على الأعمدة التالية:
|
القائمة |
التفاصيل |
|
name: |
تخزين اسم كل صديق. |
|
birthdate: |
يتتبع تاريخ ميلاد كل فرد. |
|
activity: |
يحتفظ بسجل لنشاطهم المفضل. |
|
Destination: |
يخزن معلومات الوجهة المفضلة لكل فرد. |
|
meal: |
يتتبع الوجبة المفضلة التي يحبها الفرد. |
|
1 2 3 4 5 6 7 8 |
mysql> CREATE TABLE vacation ( name varchar(50), birthdate date, activity varchar(50), destination varchar(50), meal varchar(50) ); Query OK, 0 rows affected (0.09 sec) |
ملء الجدول بالبيانات:
|
1 2 3 4 5 6 7 8 9 10 |
mysql> CREATE TABLE vacation ( name varchar(50), birthdate date, activity varchar(50), destination varchar(50), meal varchar(50) ); Query OK, 0 rows affected (0.09 sec) Records: 4 Duplicates: 0 Warnings: 0 |
لقد انتهيت الآن من إعداد قاعدة البيانات الخاصة بك.
الخطوة 2 — البدء مع عبارات SELECT
تبدأ الاستعلامات في SQL عادةً بـ SELECT. وتُستخدم في الاستعلامات لتحديد الأعمدة في الجدول التي يجب إرجاعها مع النتائج. يجب أن يتضمن الاستعلام دائمًا أيضًا FROM، والتي تُستخدم لتحديد الجدول الذي سيقوم الاستعلام بالبحث فيه.
تتبع الاستعلامات الصيغة التالية:
|
1 |
mysql> SELECT column_to_select FROM table_to_select WHERE certain_conditions_apply; |
سنستخدم صيغة الاستعلام لإرجاع عمود meal من جدول vacation:
|
1 |
mysql> SELECT meal FROM vacation; |
سيكون مخرجنا كما يلي:
|
1 2 3 4 5 6 7 8 9 10 |
+-------+ | meal | +-------+ | Steak | | Sushi | | Fries | | Tofu | +-------+ 4 rows in set (0.00 sec) |
يمكنك أيضًا تحديد أعمدة متعددة باستخدام فاصلة للفصل بينها:
|
1 |
mysql> SELECT name, destination FROM vacation; |
المخرجات:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+-------------+ | name | destination | +--------+-------------+ | Austin | Maldives | | Ivan | Mauritius | | Aisha | Colorado | | Zane | Bora Bora | +--------+-------------+ 4 rows in set (0.00 sec) |
يمكنك أيضًا استخدام asterisk (*) إذا كنت تريد تمثيل جميع الأعمدة في الجدول:
|
1 |
mysql> SELECT * FROM celebration; |
المخرجات:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+------+ | name | wins | time | +--------+------+------+ | Austin | 4 | 15.5 | | Ivan | 7 | 9 | | Aisha | 10 | 5 | | Zane | 13 | 7.5 | +--------+------+------+ 4 rows in set (0.00 sec) |
إذا كنت تريد تصفية السجلات التي تستوفي شرطًا معينًا، فستستخدم WHERE. يتم استبعاد الصفوف التي لا تستوفي الشرط المحدد من النتائج. تستخدم عبارة WHERE الصيغة التالية:
|
1 |
mysql> . . . WHERE column_name comparison_operator value |
هو عامل مقارنة يحدد كيفية مقارنة العمود المحدد بالقيمة. تشمل عوامل المقارنة الشائعة في SQL ما يلي:
|
العامل |
الاستخدام |
|
= |
المساواة |
|
!= |
عدم المساواة |
|
< |
أصغر من |
|
> |
أكبر من |
|
<= |
أصغر من أو يساوي |
|
>= |
أكبر من أو يساوي |
|
BETWEEN |
يختبر ما إذا كانت القيمة تقع ضمن النطاق المحدد. |
|
IN |
يختبر ما إذا كانت قيمة الصف موجودة في مجموعة من القيم المحددة. |
|
EXISTS |
يختبر ما إذا كان الصف موجودًا |
|
LIKE |
يختبر ما إذا كانت القيمة تطابق السلسلة النصية المحددة |
|
IS NULL |
يختبر القيم الفارغة (null) |
|
IS NOT NULL |
يختبر جميع القيم بخلاف NULL |
إذا كنت تريد العثور على الوجهة المفضلة لعائشة، فيمكنك استخدام الاستعلام أدناه:
|
1 |
mysql> SELECT destination FROM vacation WHERE name ='عائشة'; |
سيعيد الاستعلام بعد ذلك:
|
1 2 3 4 5 6 7 |
+-------------+ | destination | +-------------+ | كولورادو | +-------------+ 1 صف في مجموعة (0.03 ثانية) |
يدعم SQL استخدام الأحرف البديلة (wildcard characters)، والتي تعد مفيدة بشكل خاص في WHERE جمل. علامات النسبة المئوية ( %) تشير إلى صفر أو أكثر من الأحرف غير المعروفة، بينما تشير الشرطات السفلية ( _) تشير إلى حرف غير معروف واحد. هذه الأحرف مفيدة إذا كنت تريد العثور على إدخال معين في جدول ولكنك غير متأكد من هذا الإدخال.
على سبيل المثال، إذا كنت قد نسيت الوجهة المفضلة لصديق وكنت تعرف فقط الحرف الذي تبدأ به، على سبيل المثال، “m.” يمكنك العثور على اسم الوجهة باستخدام الاستعلام التالي:
|
1 |
mysql> SELECT destination FROM vacation WHERE destination LIKE 'm%'; |
سيعيد الاستعلام:
|
1 2 3 4 5 6 7 8 |
+-------------+ | destination | +-------------+ | جزر المالديف | | موريشيوس | +-------------+ 2 صفوف في مجموعة (0.04 ثانية) |
عند العمل مع قواعد البيانات، قد تواجه أعمدة أو جداول بأسماء طويلة نسبياً أو صعبة القراءة. في هذه الحالات، يمكنك جعل الأسماء أكثر سهولة في القراءة باستخدام الكلمة المفتاحية AS لإنشاء اسم مستعار. الأسماء المستعارة التي تم إنشاؤها باستخدام AS صالحة فقط طوال مدة الاستعلام الذي تم إنشاؤها من أجله:
|
1 2 3 4 5 6 7 8 9 10 11 |
mysql> SELECT name AS E, destination as D, activity as A FROM vacation; +--------+-----------+-------------------+ | E | D | A | +--------+-----------+-------------------+ | أوستن | جزر المالديف | التزلج | | إيفان | موريشيوس | الطيران الشراعي | | عائشة | كولورادو | تسلق الجبال | | زين | بورا بورا | الصيد | +--------+-----------+-------------------+ 4 صفوف في مجموعة (0.00 ثانية) |
الخطوة 3 — مقدمة في الدوال التجميعية
عند العمل مع البيانات، لا ترغب دائماً في رؤية البيانات نفسها. بل تفضل الحصول على معلومات حول البيانات. من خلال إصدار استعلام SELECT، يمكنك تفسير أو إجراء حسابات على بياناتك باستخدام صيغة SQL. ويُشار إليها باسم الدوال التجميعية.
تقوم الدالة COUNT بحساب وإرجاع عدد الصفوف التي تستوفي مجموعة معينة من المعايير. على سبيل المثال، إذا كنت تريد معرفة عدد الأصدقاء الذين يفضلون الذهاب إلى جزر المالديف، يمكنك استخدام الاستعلام التالي:
|
1 |
mysql> SELECT COUNT(destination) FROM vacation WHERE destination = 'جزر المالديف'; |
سيتم إرجاع النتائج التالية:
|
1 2 3 4 5 6 7 |
+--------------------+ | COUNT(destination) | +--------------------+ | 1 | +--------------------+ 1 صف في مجموعة (0.06 ثانية) |
MIN تُستخدم للعثور على أصغر قيمة داخل عمود محدد:
|
1 |
mysql> SELECT MIN(wins) FROM celebration; |
سيقوم الاستعلام بإخراج:
|
1 2 3 4 5 6 7 |
+-----------+ | MIN(wins) | +-----------+ | 4 | +-----------+ 1 صف في مجموعة (0.02 ثانية) |
MAX تُستخدم للعثور على أكبر قيمة رقمية في عمود معين:
|
1 |
mysql> SELECT MAX(wins) FROM celebration; |
المخرج المتوقع هو:
|
1 2 3 4 5 6 7 |
+-----------+ | MAX(wins) | +-----------+ | 13 | +-----------+ 1 صف في مجموعة (0.03 ثانية) |
يمكن استخدام كل من الدالتين MIN و MAX على البيانات الرقمية والأبجدية. عند تطبيقها على عمود من قيم السلاسل النصية، فإن الدالة MIN تعيد القيمة الأولى أبجدياً.
تعيد الدالة MIN القيمة الأولى أبجدياً:
|
1 |
mysql> SELECT MIN(name) FROM celebration; |
إليك ما سيكون عليه المخرج:
|
1 2 3 4 5 6 7 |
+-----------+ | MIN(name) | +-----------+ | عائشة | +-----------+ 1 صف في مجموعة (0.00 ثانية) |
تعيد الدالة MAX القيمة الأخيرة أبجدياً:
|
1 |
mysql> SELECT MAX(name) FROM celebration; |
سيكون المخرج كالتالي:
|
1 2 3 4 5 6 7 |
+-----------+ | MAX(name) | +-----------+ | Zane | +-----------+ 1 صف في مجموعة (0.00 ثانية) |
الخطوة 4 — معالجة مخرجات الاستعلام
صيغة أخرى شائعة الاستخدام هي GROUP BY. وتُستخدم عند إجراء دالة تجميعية على عمود واحد ولكن فيما يتعلق بالقيم المطابقة في عمود آخر:
|
1 |
mysql> SELECT COUNT(name), activity FROM vacation GROUP BY activity; |
سيكون المخرج:
|
1 2 3 4 5 6 7 8 9 10 |
+-------------+-------------------+ | COUNT(name) | activity | +-------------+-------------------+ | 1 | التزلج | | 1 | الطيران الشراعي | | 1 | تسلق الجبال | | 1 | الصيد | +-------------+-------------------+ 4 صفوف في مجموعة (0.04 ثانية) |
لتصنيف نتائج الاستعلام، استخدم صيغة ORDER BY. يتم فرز القيم الرقمية تصاعديًا بشكل افتراضي، بينما يتم فرز القيم النصية أبجديًا. يسرد الاستعلام أدناه عمودي name و birthdate، ولكنه يفرز النتائج حسب birthdate:
|
1 |
mysql> SELECT name, birthdate FROM vacation ORDER BY birthdate; |
سيكون المخرج كما يلي:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------------+ | name | birthdate | +--------+------------+ | Zane | 1996-01-01 | | Aisha | 1999-07-24 | | Austin | 2002-01-07 | | Ivan | 2010-12-18 | +--------+------------+ 4 صفوف في مجموعة (0.04 ثانية) |
المخرج بترتيب تصاعدي، وللفرز بترتيب تنازلي قم بإنهاء الاستعلام بالكلمة DESC:
|
1 |
mysql> SELECT name, birthdate FROM vacation ORDER BY birthdate DESC; |
ألقِ نظرة على المخرج:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------------+ | name | birthdate | +--------+------------+ | Ivan | 2010-12-18 | | Austin | 2002-01-07 | | Aisha | 1999-07-24 | | Zane | 1996-01-01 | +--------+------------+ 4 صفوف في مجموعة (0.00 ثانية) |
تمت إضافة صيغة HAVING إلى SQL لتوفير وظيفة مماثلة لصيغة WHERE مع التوافق أيضًا مع الدوال التجميعية. الفرق بين هاتين الصيغتين هو أن WHERE مخصصة للإشارة إلى السجلات الفردية و HAVING تشير إلى سجلات المجموعات. وتحقيقًا لهذه الغاية، يجب أن تكون صيغة GROUP BY موجودة كلما تم استخدام صيغة HAVING:
|
1 |
mysql> SELECT COUNT(name), activity FROM vacation GROUP BY activity HAVING COUNT(name) >= 1; |
سيخرج الاستعلام:
|
1 2 3 4 5 6 7 8 |
+-------------+-------------------+ | COUNT(name) | activity | +-------------+-------------------+ | 1 | التزلج | | 1 | الطيران الشراعي | | 1 | تسلق الجبال | | 1 | الصيد | +-------------+-------------------+ |
الـ COUNT هو 1 للجميع لأنه لا يوجد صديقان يفضلان نفس النشاط.
الخطوة 5 — الاستعلام عن جداول متعددة
يمكن استخدام صيغة JOIN في نتيجة الاستعلام لدمج الصفوف من جدولين أو أكثر. وهي تحقق ذلك من خلال تحديد موقع عمود ذي صلة بين الجداول وفرز المخرجات بشكل مناسب.
SELECT تتبع عبارات SELECT التي تتضمن صيغة JOIN الصيغة التالية:
|
1 2 3 |
mysql> SELECT table1.column1, table2.column2 mysql> FROM table1 mysql> JOIN table2 ON table1.related_column=table2.related_column; |
إذا كنت ترغب في شراء كأس لكل من أصدقائك مقابل wins أثناء السباحة في أعياد ميلادهم، فيمكنك إنشاء استعلام يربط بين كلا الجدولين لمساعدتك في العثور على جميع المعلومات التي تريدها باستعلام واحد:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration JOIN vacation ON celebration.name=vacation.name; |
سيكون الناتج:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | +--------+------+------------+ 4 صفوف في مجموعة (0.00 ثانية) |
هذه عبارة JOIN داخلية. وذلك لأنها تحدد جميع السجلات التي تحتوي على قيم متطابقة في كلا الجدولين وتطبعها في مجموعة النتائج. لا يتم تضمين السجلات التي لا تطابق الاستعلام. يمكننا تضمين صف جديد في جداولنا لا يتوافق مع أي إدخال:
|
1 2 3 4 |
mysql> INSERT INTO celebration(name,wins,time) VALUES('Ella', '1', '120'); الاستعلام موافق, 1 صف متأثر (0.01 ثانية) |
|
1 2 3 4 |
mysql> INSERT INTO celebration(name,wins,time) VALUES('Ella', '1', '120'); الاستعلام موافق, 1 صف متأثر (0.01 ثانية) |
بعد ذلك، أعد تشغيل عبارة SELECT مع عبارة JOIN:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate -> FROM celebration -> JOIN vacation ON celebration.name=vacation.name; +--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | +--------+------+------------+ 4 صفوف في مجموعة (0.00 ثانية) |
نظرًا لأن جدول celebration لا يحتوي على أي إدخال لـ Peter وجدول vacation لا يحتوي على أي إدخال لـ Ella، فإن هذه السجلات غائبة.
يمكننا إرجاع جميع السجلات من أحد الجداول باستخدام عبارة JOIN خارجية. يمكن أن تكون هذه إما LEFT JOIN أو RIGHT JOIN. ترجع عبارة LEFT JOIN جميع السجلات من الجدول الأيسر والسجلات المتطابقة فقط من الجدول الأيمن. الجدول الأيسر في سياق عمليات الربط الخارجية هو الجدول المشار إليه بواسطة عبارة FROM، والجدول الأيمن هو أي جدول يتم الإشارة إليه بعد عبارة JOIN.
قم بتشغيل الاستعلام مرة أخرى ولكن باستخدام عبارة LEFT JOIN:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration LEFT JOIN vacation ON celebration.name=vacation.name; |
سيعيد الأمر جميع السجلات من الجدول الأيسر ( celebration) حتى لو لم يكن له سجل مطابق في الجدول الأيمن. عندما لا يكون هناك سجل مطابق في الجدول الأيمن، يتم إرجاعه كـ NULL:
|
1 2 3 4 5 6 7 8 9 10 11 |
+--------+------+------------+ | name | wins | birthdate | +--------+------+------------+ | Austin | 4 | 2002-01-07 | | Ivan | 7 | 2010-12-18 | | Aisha | 10 | 1999-07-24 | | Zane | 13 | 1996-01-01 | | Ella | 1 | NULL | +--------+------+------------+ 5 صفوف في مجموعة (0.00 ثانية) |
هذه الآن هي عبارة RIGHT JOIN:
|
1 2 3 |
mysql> SELECT celebration.name, celebration.wins, vacation.birthdate FROM celebration RIGHT JOIN vacation ON celebration.name=vacation.name; |
سيتم إرجاع جميع القيم من الجدول الأيمن (vacation). نظرًا لأن birthdate الخاص بـ Peter مسجل في الجدول الأيمن وليس في الجدول الأيسر، فإن أعمدة name و wins ستُرجع قيم NULL في تلك الصفوف:
|
1 2 3 4 5 6 7 8 9 10 11 |
+--------+------+------------+ | الاسم | الانتصارات | تاريخ الميلاد | +--------+------+------------+ | أوستن | 4 | 2002-01-07 | | إيفان | 7 | 2010-12-18 | | عائشة | 10 | 1999-07-24 | | زين | 13 | 1996-01-01 | | NULL | NULL | 1991-05-03 | +--------+------+------------+ 5 صفوف في مجموعة (0.01 ثانية) |
يمكنك استخدام عبارة UNION بدلاً من JOIN للاستعلام عن السجلات من جداول متعددة. يختلف عامل UNION عن عبارة JOIN في أنه يدمج نتائج عبارَتي SELECT في عمود واحد بدلاً من طباعة النتائج من جداول متعددة كأعمدة فريدة باستخدام عبارة SELECT واحدة.
يمكنك تشغيل هذا الاستعلام للتوضيح:
|
1 |
mysql> SELECT name FROM celebration UNION SELECT name FROM vacation; |
يزيل الاستعلام الإدخالات المكررة. هذا هو السلوك الافتراضي لعامل UNION :
|
1 2 3 4 5 6 7 8 9 10 11 12 |
+--------+ | الاسم | +--------+ | أوستن | | إيفان | | عائشة | | زين | | إيلا | | بيتر | +--------+ 6 صفوف في مجموعة (0.00 ثانية) |
لإرجاع كافة الإدخالات (بالإضافة إلى المكررة) استخدم عامل UNION ALL :
|
1 |
mysql> SELECT name FROM celebration UNION ALL SELECT name FROM vacation; |
المخرجات:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
+--------+ | الاسم | +--------+ | أوستن | | إيفان | | عائشة | | زين | | إيلا | | أوستن | | إيفان | | عائشة | | زين | | بيتر | +--------+ 10 صفوف في مجموعة (0.00 ثانية) |
الاستعلامات الفرعية هي طريقة أخرى للاستعلام من جداول متعددة. الاستعلامات الفرعية هي استعلامات يتم تضمينها داخل استعلام آخر (تُعرف أيضًا بالاستعلامات الداخلية أو المتداخلة). وهي مفيدة عندما تريد مقارنة نتائج استعلام بنتائج دالة تجميعية منفصلة.
سنستخدم مثالاً لمحاولة معرفة أي صديق فاز ببطولات سباحة أكثر من إيلا. بدلاً من الاستعلام عن عدد المباريات التي فازت بها إيلا ثم تشغيل استعلام آخر لمعرفة من فاز بمباريات أكثر من ذلك، يمكنك حساب كليهما باستعلام واحد:
|
1 2 3 4 |
mysql> SELECT name, wins FROM celebration -> WHERE wins > ( -> SELECT wins FROM celebration WHERE name = 'Ella' -> ); |
سيرجع الاستعلام:
|
1 2 3 4 5 6 7 8 9 10 |
+--------+------+ | الاسم | الانتصارات | +--------+------+ | أوستن | 4 | | إيفان | 7 | | عائشة | 10 | | زين | 13 | +--------+------+ 4 صفوف في مجموعة (0.06 ثانية) |
إذا كنت ترغب في أخذ أصدقائك في عطلة مفاجئة، يمكنك استخدام استعلام لمعرفة من لديه أكبر عدد من الانتصارات وإرجاع وجهته:
|
1 2 3 4 |
mysql> SELECT name, destination, activity, meal -> FROM vacation -> WHERE name = ( SELECT name FROM celebration -> WHERE wins = (SELECT MAX(wins) FROM celebration)); |
سيرجع الاستعلام:
|
1 2 3 4 5 6 7 |
+------+-------------+----------+------+ | الاسم | الوجهة | النشاط | الوجبة | +------+-------------+----------+------+ | زين | بورا بورا | الصيد | التوفو | +------+-------------+----------+------+ 1 صف في مجموعة (0.00 ثانية) |
تحتوي هذه العبارة على استعلام فرعي داخل استعلام فرعي.
الخاتمة
يعد إنشاء الاستعلامات أحد أكثر المهام شيوعًا في إدارة قواعد البيانات. هناك العديد من أدوات إدارة قواعد البيانات مثل phpMyAdmin و pgAdmin التي يمكنك استخدامها للعمل مع الاستعلامات وعرض نتائجها بشكل مرئي. ومع ذلك، فإن عبارة SELECT من سطر الأوامر هي الخيار الأكثر تفضيلاً نظرًا لسهولة استخدامها والتحكم الممتاز الذي توفره.
علاوة على ذلك، هناك العديد من البرامج التعليمية حول قواعد البيانات التي يمكنك استكشافها من مدونتنا:
- SQLite مقابل MySQL مقابل PostgreSQL: مقارنة بين أنظمة إدارة قواعد البيانات العلاقاتية
- حلول سريعة لإصلاح الجداول التالفة في MySQL: دليل تعليمي
- كيفية تثبيت MySQL على Centos 7
- مستخدم MySQL — إنشاء ومنح الصلاحيات
- إعداد النسخ المتماثل في MySQL على Ubuntu
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.