واحدة من أعظم فوائد استخدام قواعد البيانات العلائقية مثل MySQL هي أن هيكلها العلائقي يسمح لك بسهولة تخزين المعلومات والاستعلام عنها عبر جداول متعددة.

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

تهيئة نموذج قاعدة البيانات

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

استنساخ بوابة https://github.com/mdizak/sample-select-db.git
قرص عينة حدد ديسيبل
sudo mysql sudo mysql sampledb
mysql> حدد العدد (*) من العملاء ؛

يجب أن تحصل على نتيجة تفيد بوجود 2000 صف داخل ملف عملاء طاولة.

افتراضي / انضمام داخلي

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

كيفية الاتصال بقاعدة بيانات MySQL باستخدام Java

توفر Java JDBC كجزء من Java SDK. في هذه المقالة ، دعنا نلقي نظرة على تفاصيل الاتصال بقاعدة بيانات MySQL وتنفيذ الاستعلامات معها.

instagram viewer

على سبيل المثال ، إذا كنت ترغب في رؤية الاسم الأول والأخير للعميل ، بالإضافة إلى مبلغ الطلب والتاريخ لجميع الطلبات التي تزيد عن 1000 دولار ، يمكنك استخدام جملة SQL التالية:


تحديد
c.id ، c.first_name ، c.last_name ، o.amount ، o.created_at
من
العملاء ج ، أوامر س
أين
o.customer_id = c.id AND o.amount> = 1000 ؛

بعض الملاحظات حول الاستعلام أعلاه:

  • يتم تحديد خمسة أعمدة مختلفة ، ثلاثة من جدول العملاء واثنين من جدول الطلبات.
  • ضمن عبارة FROM ، يتم تعريف الجدولين ، ولكن يتم إلحاقهما بالحرفين "c" و "o". هذه تحدد ببساطة الأسماء المستعارة داخل SQL ، ويمكن أن تكون أي شيء تريده ، وتستخدم لتقصير استعلام SQL.
  • ال o.customer_id = c.id هو جانب الارتباط للاستعلام ، ويضمن الارتباط الصحيح بين العملاء والأوامر.

توجد أدناه طريقة مختلفة وصحيحة من الناحية التقنية لكتابة نفس الاستعلام:


تحديد
c.id ، c.first_name ، c.last_name ، o.amount ، o.created_at
من
ج عملاء INNER JOIN أوامر o
تشغيل
customer_id = c.id
أين
o المبلغ> = 1000 ؛

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

LEFT ينضم

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


تحديد
p.name ، sum (item.amount) AS المبلغ
من
Orders_items العنصر LEFT JOIN products p
تشغيل
item.product_id = p.id
تجميع حسب العنصر. product_id ترتيب حسب الكمية تنازليًا

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

حق ينضم

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

ماذا يحدث إذا كنت ترغب في الحصول على قائمة بجميع المنتجات ذات مبالغ المبيعات ، بما في ذلك المنتجات التي لم يتم طلبها؟ جرب صلة صحيحة مع الاستعلام التالي:


تحديد
p.name ، sum (item.amount) AS المبلغ
من
Orders_items البند RIGHT JOIN products p
تشغيل
item.product_id = p.id
تجميع حسب p.id ترتيب حسب القيمة DESC

هذا أفضل ، ويعيد الاستعلام الآن 22 منتجًا كاملة مع وجود كمية من ثلاثة منها لا شيء. هذا لأنه بدلاً من استخدام orders_items كجدول أساسي ينضم إلى جدول المنتجات ، فإن الصلة اليمنى تقلب الطلب وتنضم إلى جدول المنتجات في جدول Orders_items.

صلات متعددة في استعلام

قد تحتاج أحيانًا إلى ضم ثلاثة جداول أو أكثر معًا للحصول على مجموعة محددة من النتائج.

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


تحديد
c.first_name، c.last_name، o.amount، o.created_at
من
ج عملاء INNER JOIN أوامر o
تشغيل
c.id = o.customer_id INNER JOIN orders_items item
تشغيل
item.order_id = o.id
أين
item.product_id = طلب واحد بواسطة o.created_at ؛

يقوم هذا الاستعلام بإرجاع جميع طلبات الميكروويف البالغ عددها 426 ، ويعمل كما هو متوقع. يقوم أولاً بمطابقة جميع العملاء مع طلباتهم الخاصة ، ثم المزيد من الاستفسارات التي تم تعيينها بواسطة مطابقة جميع الطلبات مع الطلبات الموجودة في جدول Orders_items الذي يحتوي على منتج الميكروويف (المعرف # 1).

لا تستخدم استعلامات فرعية مع عبارات IN

كملاحظة جانبية سريعة ، بأي ثمن يجب عليك دائمًا تجنب استخدام الاستعلامات الفرعية داخل استعلامات SQL الخاصة بك مثل:

حدد اسم_الأول ، اسم_الأخير من العملاء حيث المعرف في (حدد معرف العميل من الطلبات حيث الحالة = "موافق عليه" والمبلغ <100) ؛

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

حدد c.first_name، c.last_name من العملاء c.

توفير الوقت مع SQL ينضم

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

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

بريد الالكتروني
10 طرق رائعة لإنشاء مستندات Google الجميلة

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

مواضيع ذات صلة
  • برمجة
  • SQL
  • قاعدة البيانات
عن المؤلف
مات ديزاك (13 مقالة منشورة)المزيد من Matt Dizak

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية الخاصة بنا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

خطوة أخرى أيضا…!

يرجى تأكيد عنوان بريدك الإلكتروني في البريد الإلكتروني الذي أرسلناه لك للتو.

.