كيفية كتابة Microsoft Access SQL استعلامات من الصفر

كيفية كتابة Microsoft Access SQL استعلامات من الصفر

يمكن القول إن Microsoft Access هو أقوى أداة في مجموعة Microsoft Office بأكملها ، إلا أنه يحير (وأحيانًا يخيف) مستخدمي Office المتميزين. مع منحنى تعليمي أكثر حدة من Word أو Excel ، كيف يفترض بأي شخص أن يلتف حول استخدام هذه الأداة؟ هذا الأسبوع ، سينظر Bruce Epper في بعض المشكلات التي أثارها هذا السؤال من أحد قرائنا.





يسأل القارئ:

أواجه مشكلة في كتابة استعلام في Microsoft Access ، لدي قاعدة بيانات بها جدولا منتجات يحتويان على عمود مشترك مع رمز منتج رقمي واسم منتج مرتبط ، أريد معرفة المنتجات من الجدول A التي يمكن العثور عليها في الجدول ب. أريد إضافة عمود باسم النتائج يحتوي على اسم المنتج من الجدول أ إذا كان موجودًا ، واسم المنتج من الجدول ب عندما لا يكون موجودًا في الجدول أ. هل لديك أي نصيحة؟





رد بروس:

Microsoft Access هو نظام إدارة قواعد بيانات (DBMS) مصمم للاستخدام على كل من أجهزة Windows و Mac. يستخدم محرك قاعدة بيانات Microsoft Jet لمعالجة البيانات وتخزينها. كما أنه يوفر واجهة رسومية للمستخدمين تقضي تقريبًا على الحاجة إلى فهم لغة الاستعلام الهيكلية (SQL).





SQL هي لغة الأوامر المستخدمة لإضافة وحذف وتحديث وإرجاع المعلومات المخزنة في قاعدة البيانات وكذلك تعديل مكونات قاعدة البيانات الأساسية مثل إضافة أو حذف أو تعديل الجداول أو الفهارس.

نقطة البداية

إذا لم يكن لديك بالفعل بعض الإلمام بـ Access أو RDBMS آخر ، أقترح عليك البدء بهذه الموارد قبل المتابعة:



  • إذن ما هي قاعدة البيانات؟ حيث يستخدم Ryan Dube برنامج Excel لعرض أساسيات قواعد البيانات العلائقية.
  • دليل سريع لبدء استخدام Microsoft Access 2007 وهي نظرة عامة عالية المستوى حول Access والمكونات التي تشكل قاعدة بيانات Access.
  • يلقي برنامج تعليمي سريع إلى الجداول في Microsoft Access 2007 نظرة على إنشاء أول قاعدة بيانات وجداول لتخزين بياناتك المنظمة.
  • برنامج تعليمي سريع حول الاستعلامات في Microsoft Access 2007 يبحث في وسائل إرجاع أجزاء معينة من البيانات المخزنة في جداول قاعدة البيانات.

إن وجود فهم أساسي للمفاهيم الواردة في هذه المقالات سيجعل فهم ما يلي أسهل قليلاً.

علاقات قواعد البيانات والمعايرة

تخيل أنك تدير شركة تبيع 50 نوعًا مختلفًا من الأدوات في جميع أنحاء العالم. لديك قاعدة عملاء تبلغ 1250 عميلًا وفي الشهر المتوسط ​​بيع 10000 عنصر واجهة مستخدم لهؤلاء العملاء. أنت تستخدم حاليًا جدول بيانات واحدًا لتتبع كل هذه المبيعات - جدول قاعدة بيانات واحد بشكل فعال. ويضيف كل عام آلاف الصفوف إلى جدول البيانات الخاص بك.





الصور أعلاه هي جزء من جدول تتبع الطلبات الذي تستخدمه. لنفترض الآن أن كلاً من هؤلاء العملاء يشترون أدوات منك عدة مرات في السنة بحيث يكون لديك صفوف أكثر لكليهما.





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

باستخدام قاعدة بيانات وتطبيع البيانات ، يمكننا فصل العناصر إلى جداول متعددة مثل المخزون والعملاء والأوامر.

بمجرد النظر إلى جزء العميل في مثالنا ، سنزيل عمودي اسم العميل وعنوان العميل ونضعهما في جدول جديد. في الصورة أعلاه ، قمت أيضًا بتقسيم الأشياء بشكل أفضل للوصول إلى البيانات بشكل أكثر دقة. يحتوي الجدول الجديد أيضًا على عمود للمفتاح الأساسي (ClientID) - وهو رقم سيتم استخدامه للوصول إلى كل صف في هذا الجدول.

في الجدول الأصلي حيث أزلنا هذه البيانات ، سنضيف عمودًا لمفتاح خارجي (ClientID) وهو ما يرتبط بالصف المناسب الذي يحتوي على المعلومات الخاصة بهذا العميل المحدد.

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

كميزة إضافية ، يقلل هذا أيضًا من إجمالي كمية التخزين المستهلكة.

أنواع الانضمام

يعرّف SQL خمسة أنواع مختلفة من الصلات: الداخلي ، واليسار الخارجي ، واليمين الخارجي ، والجزء الخارجي الكامل ، والتقاطع. تعتبر الكلمة الأساسية الخارجية اختيارية في عبارة SQL.

يسمح Microsoft Access باستخدام INNER (افتراضي) و LEFT OUTER و RIGHT OUTER و CROSS. لا يتم دعم FULL OUTER على هذا النحو ، ولكن باستخدام LEFT OUTER و UNION ALL و RIGHT OUTER ، يمكن تزويرها على حساب المزيد من دورات وحدة المعالجة المركزية وعمليات الإدخال / الإخراج.

يحتوي ناتج صلة CROSS على كل صف من الجدول الأيسر مقترنًا بكل صف من الجدول الأيمن. المرة الوحيدة التي رأيت فيها استخدام رابط CROSS هو أثناء اختبار تحميل خوادم قاعدة البيانات.

دعنا نلقي نظرة على كيفية عمل الصلات الأساسية ، ثم سنقوم بتعديلها لتناسب احتياجاتنا.

لنبدأ بإنشاء جدولين ، ProdA و ProdB ، بخصائص التصميم التالية.

يعد 'الترقيم التلقائي' عددًا صحيحًا طويلًا متزايدًا يتم تعيينه تلقائيًا للإدخالات عند إضافتها إلى الجدول. لم يتم تعديل خيار النص ، لذلك سيقبل سلسلة نصية يصل طولها إلى 255 حرفًا.

الآن ، قم بتزويدهم ببعض البيانات.

لإظهار الاختلافات في كيفية عمل أنواع الانضمام الثلاثة ، قمت بحذف الإدخالات 1 و 5 و 8 من ProdA.

التالي، إنشاء استعلام جديد عبر الذهاب الى إنشاء> تصميم الاستعلام . حدد كلا الجدولين من مربع حوار إظهار الجدول و انقر فوق إضافة ، من ثم قريب .

انقر فوق ProductID في الجدول ProdA ، واسحبه إلى ProductID في الجدول ProdB وحرر زر الماوس لإنشاء العلاقة بين الجداول.

انقر بزر الماوس الأيمن فوق السطر بين الجداول التي تمثل العلاقة بين العناصر و حدد الانضمام إلى الخصائص .

بشكل افتراضي ، يتم تحديد نوع الصلة 1 (الداخلي). الخيار 2 هو صلة خارجية يسارية و 3 هو صلة خارجية يمين.

سننظر في الانضمام الداخلي أولاً ، لذا انقر فوق 'موافق' لرفض مربع الحوار.

في مصمم الاستعلام ، حدد الحقول التي نريد رؤيتها من القوائم المنسدلة.

عندما نقوم بتشغيل الاستعلام (علامة التعجب الحمراء في الشريط) ، سيُظهر حقل ProductName من كلا الجدولين بالقيمة من الجدول ProdA في العمود الأول و ProdB في العمود الثاني.

لاحظ أن النتائج تظهر فقط القيم التي يكون فيها ProductID متساويًا في كلا الجدولين. على الرغم من وجود إدخال لـ ProductID = 1 في جدول ProdB ، إلا أنه لا يظهر في النتائج نظرًا لأن ProductID = 1 غير موجود في الجدول ProdA. الأمر نفسه ينطبق على ProductID = 11. وهو موجود في جدول ProdA ولكن ليس في جدول ProdB.

باستخدام الزر عرض على الشريط والتبديل إلى طريقة عرض SQL ، يمكنك رؤية استعلام SQL الذي تم إنشاؤه بواسطة المصمم المستخدم للحصول على هذه النتائج.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

بالعودة إلى Design View ، قم بتغيير نوع الصلة إلى 2 (LEFT OUTER). قم بتشغيل الاستعلام لرؤية النتائج.

كما ترى ، يتم تمثيل كل إدخال في جدول ProdA في النتائج بينما تظهر فقط تلك الموجودة في ProdB التي تحتوي على إدخال ProductID مطابق في الجدول ProdB في النتائج.

تعد المساحة الفارغة في عمود ProdB.ProductName قيمة خاصة (NULL) نظرًا لعدم وجود قيمة مطابقة في الجدول ProdB. سيثبت هذا أهميته لاحقًا.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

جرب نفس الشيء مع النوع الثالث من الصلة (RIGHT OUTER).

تُظهر النتائج كل شيء من جدول ProdB أثناء عرض قيم فارغة (تُعرف باسم NULL) حيث لا يحتوي جدول ProdA على قيمة مطابقة. حتى الآن ، هذا يجعلنا أقرب إلى النتائج المرجوة في سؤال القارئ.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

استخدام الوظائف في الاستعلام

يمكن أيضًا إرجاع نتائج دالة كجزء من استعلام. نريد أن يظهر عمود جديد باسم 'النتائج' في مجموعة النتائج الخاصة بنا. ستكون قيمته هي محتوى عمود ProductName في الجدول ProdA إذا كان ProdA يحتوي على قيمة (ليست NULL) ، وإلا يجب أخذها من جدول ProdB.

يمكن استخدام دالة IF (IIF) لتوليد هذه النتيجة. تأخذ الوظيفة ثلاث معلمات. الأول شرط يجب تقييمه بقيمة صواب أو خطأ. المعلمة الثانية هي القيمة التي سيتم إرجاعها إذا كان الشرط صحيحًا ، والمعلمة الثالثة هي القيمة التي سيتم إرجاعها إذا كان الشرط خطأ.

يبدو بناء الوظيفة الكاملة لموقفنا كما يلي:

IIF(ProdA.ProductID Is Null, ProdB.ProductName,ProdA.ProductName)

لاحظ أن معلمة الشرط لا تتحقق من المساواة. لا تحتوي القيمة الخالية في قاعدة البيانات على قيمة يمكن مقارنتها بأي قيمة أخرى ، بما في ذلك قيمة خالية أخرى. بمعنى آخر ، لا يساوي Null Null. أبدا. لتجاوز هذا ، نتحقق بدلاً من ذلك من القيمة باستخدام الكلمة الأساسية 'Is'.

كان بإمكاننا أيضًا استخدام 'Is Not Null' وتغيير ترتيب المعلمات True و False للحصول على نفس النتيجة.

عند وضع هذا في مصمم الاستعلام ، يجب عليك كتابة الوظيفة بأكملها في الحقل: الإدخال. للحصول عليه لإنشاء عمود 'النتائج' ، تحتاج إلى استخدام اسم مستعار. للقيام بذلك ، استهل الوظيفة بـ 'النتائج:' كما هو موضح في لقطة الشاشة التالية.

سيكون كود SQL المكافئ للقيام بذلك:

SELECT ProdA.ProductName, ProdB.ProductName, IIF(ProdA.ProductID Is Null,ProdB.ProductName,ProdA.ProductName) AS Results FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

الآن ، عندما نقوم بتشغيل هذا الاستعلام ، فسوف ينتج عنه هذه النتائج.

كيفية تغيير المستخدم الافتراضي في الكروم

نرى هنا لكل إدخال حيث يحتوي الجدول ProdA على قيمة ، تنعكس هذه القيمة في عمود النتائج. إذا لم يكن هناك إدخال في جدول ProdA ، فسيظهر الإدخال من ProdB في النتائج وهو بالضبط ما طلبه القارئ.

لمزيد من الموارد لتعلم Microsoft Access ، تحقق من Joel Lee's How to Learn Microsoft Access: 5 Free Online Resources.

يشارك يشارك سقسقة بريد الالكتروني هل يستحق الترقية إلى Windows 11؟

تم إعادة تصميم Windows. لكن هل هذا كافٍ لإقناعك بالانتقال من Windows 10 إلى Windows 11؟

اقرأ التالي
مواضيع ذات صلة
  • إنتاجية
  • اسأل الخبراء
نبذة عن الكاتب بروس إيبير(13 مقالة منشورة)

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

المزيد من Bruce Epper

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

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

انقر هنا للاشتراك