الإعلانات
يمكن القول أن Microsoft Access هو أقوى أداة في مجموعة Microsoft Office بأكملها ، ولكنه يخفي (وأحيانًا يخيف) مستخدمي الطاقة في Office. باستخدام منحنى تعليمي أكثر حدة من Word أو Excel ، كيف يمكن لأي شخص أن يلف رأسه حول استخدام هذه الأداة؟ هذا الاسبوع، بروس إبر سنلقي نظرة على بعض القضايا التي أثارها هذا السؤال من أحد قرائنا.
يسأل القارئ:
أواجه مشكلة في كتابة استعلام في Microsoft Access.
لقد حصلت على قاعدة بيانات تحتوي على جدولين للمنتج يحتويان على عمود مشترك برمز منتج رقمي واسم منتج مرتبط.
أرغب في معرفة المنتجات من الجدول أ التي يمكن العثور عليها في الجدول ب. أريد إضافة عمود باسم النتائج يحتوي على اسم المنتج من الجدول أ إذا كان موجودًا ، واسم المنتج من الجدول ب عندما لا يكون موجودًا في الجدول أ.
هل لديك اي نصيحة؟
رد بروس:
Microsoft Access هو نظام إدارة قواعد البيانات (DBMS) مصمم للاستخدام على أجهزة Windows و Mac. ويستخدم محرك قاعدة بيانات Microsoft Jet لمعالجة البيانات وتخزينها. كما يوفر واجهة رسومية للمستخدمين مما يلغي الحاجة إلى فهم لغة الاستعلام الهيكلية (SQL) تقريبًا.
SQL هي لغة الأوامر المستخدمة لإضافة وحذف وتحديث وإرجاع المعلومات المخزنة في قاعدة البيانات وكذلك تعديل مكونات قاعدة البيانات الأساسية مثل إضافة أو حذف أو تعديل الجداول أو المؤشرات.
نقطة البداية
إذا لم يكن لديك بالفعل بعض الإلمام بـ Access أو RDBMS آخر ، أقترح أن تبدأ بهذه الموارد قبل المتابعة:
- إذن ما هي قاعدة البيانات؟ إذن ما هي قاعدة البيانات ، على أي حال؟ [MakeUseOf يوضح]بالنسبة لمبرمج أو متحمس للتكنولوجيا ، فإن مفهوم قاعدة البيانات شيء يمكن اعتباره أمرًا مسلمًا به حقًا. ومع ذلك ، بالنسبة لكثير من الناس ، فإن مفهوم قاعدة البيانات نفسها غريب بعض الشيء ... اقرأ أكثر حيث يستخدم Ryan Dube Excel لإظهار أساسيات قواعد البيانات العلائقية.
- دليل سريع للبدء مع Microsoft Access 2007 دليل سريع للبدء مع Microsoft Access 2007 اقرأ أكثر وهو نظرة عامة عالية المستوى حول Access والمكونات التي تتضمن قاعدة بيانات Access.
- برنامج تعليمي سريع للجداول في Microsoft Access 2007 برنامج تعليمي سريع للجداول في Microsoft Access 2007 اقرأ أكثر يلقي نظرة على إنشاء أول قاعدة بيانات وجداول لتخزين بياناتك المنظمة.
- برنامج تعليمي سريع حول الاستعلامات في Microsoft Access 2007 برنامج تعليمي سريع حول الاستعلامات في Microsoft Access 2007 اقرأ أكثر يبحث في الوسائل لإرجاع أجزاء معينة من البيانات المخزنة في جداول قاعدة البيانات.
إن الحصول على فهم أساسي للمفاهيم المقدمة في هذه المقالات سيجعل الهضم أسهل قليلاً.
علاقات قواعد البيانات والتطبيع
تخيل أنك تدير شركة تبيع 50 نوعًا مختلفًا من الأدوات في جميع أنحاء العالم. لديك قاعدة عملاء تبلغ 1250 عميلًا ، وفي الشهر المتوسط تبيع 10000 أداة مصرفية لهؤلاء العملاء. أنت تستخدم حاليًا جدول بيانات واحد لتتبع كل هذه المبيعات - بشكل فعال جدول قاعدة بيانات واحد. ويضيف كل عام آلاف الصفوف إلى جدول البيانات.
الصور أعلاه هي جزء من جدول بيانات تتبع الطلب الذي تستخدمه. لنفترض الآن أن كلا من هؤلاء العملاء يشترون أدوات منك عدة مرات في السنة ، لذلك لديك المزيد من الصفوف لكليهما.
إذا تزوجت جوان سميث من Ted Baines وأخذت لقبه ، يجب تغيير كل صف يحتوي على اسمها الآن. تتفاقم المشكلة إذا حدث أن لديك عميلان مختلفان بالاسم "جوان سميث". لقد أصبح من الصعب جدًا الحفاظ على اتساق بيانات مبيعاتك بسبب حدث شائع إلى حد ما.
باستخدام قاعدة بيانات وتطبيع البيانات ، يمكننا فصل العناصر إلى جداول متعددة مثل المخزون والعملاء والأوامر.
بمجرد النظر إلى جزء العميل من مثالنا ، سنزيل أعمدة اسم العميل وعنوان العميل ونضعها في جدول جديد. في الصورة أعلاه ، قمت أيضًا بتقسيم الأشياء بشكل أفضل للوصول إلى بيانات أكثر دقة. يحتوي الجدول الجديد أيضًا على عمود للمفتاح الأساسي (ClientID) - رقم سيتم استخدامه للوصول إلى كل صف في هذا الجدول.
في الجدول الأصلي حيث أزلنا هذه البيانات ، نضيف عمودًا لمفتاح خارجي (ClientID) وهو ما يرتبط بالصف المناسب الذي يحتوي على معلومات هذا العميل المحدد.
الآن ، عندما تغير جوان سميث اسمها إلى جوان بينز ، يجب إجراء التغيير مرة واحدة فقط في جدول العميل. ستسحب كل مرجع آخر من الجداول المرتبطة اسم العميل المناسب وتقريرًا يبحث عما اشترته جوان ستحصل السنوات الخمس الأخيرة على جميع الطلبات تحت اسمها قبل الزواج وأسمائها دون الحاجة إلى تغيير طريقة التقرير ولدت.
كميزة إضافية ، يقلل هذا أيضًا من إجمالي سعة التخزين المستهلكة.
أنواع الانضمام
يحدد SQL خمسة أنواع مختلفة من الصلات: INNER و LEFT OUTER و RIGHT OUTER و FULL OUTER و CROSS. الكلمة الأساسية OUTER اختيارية في عبارة 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 (INNER). الخيار 2 عبارة عن وصلة LEFT OUTER و 3 عبارة عن وصلة RIGHT OUTER.
سنلقي نظرة على الانضمام إلى INNER أولاً ، لذا انقر فوق موافق لرفض مربع الحوار.
في مصمم الاستعلام ، حدد الحقول التي نريد رؤيتها من القوائم المنسدلة.
عندما نقوم بتشغيل الاستعلام (علامة التعجب الحمراء في الشريط) ، فسوف يعرض الحقل ProductName من كلا الجدولين مع القيمة من الجدول ProdA في العمود الأول و ProdB في العمود الثاني.
لاحظ أن النتائج تظهر فقط القيم حيث يكون ProductID متساويًا في كلا الجدولين. على الرغم من وجود إدخال لـ ProductID = 1 في الجدول ProdB ، إلا أنه لا يظهر في النتائج نظرًا لأن ProductID = 1 غير موجود في الجدول ProdA. الأمر نفسه ينطبق على ProductID = 11. موجود في الجدول ProdA ولكن ليس في الجدول ProdB.
باستخدام الزر عرض على الشريط والتبديل إلى عرض SQL ، يمكنك مشاهدة استعلام SQL الذي تم إنشاؤه بواسطة المصمم المستخدم للحصول على هذه النتائج.
SELECT ProdA.ProductName، ProdB.ProductName من 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 من ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID؛
جرب نفس الشيء مع النوع الثالث من الصلات (RIGHT OUTER).
تظهر النتائج كل شيء من جدول ProdB أثناء عرض قيم فارغة (تعرف باسم NULL) حيث لا يحتوي جدول ProdA على قيمة مطابقة. حتى الآن ، هذا يقربنا من النتائج المرجوة في سؤال قرائنا.
SELECT ProdA.ProductName، ProdB.ProductName من ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID؛
استخدام الدالات في الاستعلام
قد يتم أيضًا إرجاع نتائج دالة كجزء من استعلام. نريد أن يظهر عمود جديد باسم "النتائج" في مجموعة النتائج لدينا. ستكون قيمته هي محتوى عمود ProductName في الجدول ProdA إذا كانت ProdA تحتوي على قيمة (ليست فارغة) ، وإلا يجب أن تؤخذ من الجدول ProdB.
يمكن استخدام دالة IF (IIF) الفورية لتوليد هذه النتيجة. تأخذ الوظيفة ثلاث معلمات. الأول هو شرط يجب تقييمه إلى قيمة صواب أو خطأ. المعلمة الثانية هي القيمة التي يتم إرجاعها إذا كان الشرط صحيحًا ، والمعلمة الثالثة هي القيمة التي سيتم إرجاعها إذا كان الشرط خطأ.
تبدو بنية الوظائف الكاملة لحالتنا كما يلي:
IIF (ProdA.ProductID Is Null، ProdB.ProductName، ProdA.ProductName)
لاحظ أن معلمة الشرط لا تتحقق من المساواة. لا تحتوي قيمة Null في قاعدة بيانات على قيمة يمكن مقارنتها بأي قيمة أخرى ، بما في ذلك Null أخرى. بمعنى آخر ، لا يساوي 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 كيفية تعلم Microsoft Access: 5 موارد مجانية على الإنترنت كيفية تعلم Microsoft Access: 5 موارد مجانية على الإنترنتهل عليك إدارة كمية كبيرة من البيانات؟ يجب أن تبحث في Microsoft Access. يمكن أن تساعدك مواردنا الدراسية المجانية في البدء وتعلم المهارات اللازمة لمشاريع أكثر تعقيدًا. اقرأ أكثر .
كان بروس يلعب بالإلكترونيات منذ السبعينيات ، وأجهزة الكمبيوتر منذ أوائل الثمانينيات ، ويجيب بدقة على الأسئلة حول التكنولوجيا التي لم يستخدمها أو يشاهدها طوال الوقت. كما أنه يزعج نفسه بمحاولة العزف على الجيتار.