خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


9. طراحی پرس و جوی چند جدولی (Multi-table Query) در اکسس 2016

9. طراحی پرس و جوی چند جدولی (Multi-table Query)  در اکسس 2016
نویسنده : امیر انصاری
در درس قبلی، شما یاد گرفتید که چگونه یک پرس و جوی ساده با یک جدول را بسازید. اکثر پرس و جوهایی که در اکسس طراحی می کنید، معمولاً از چند جدول استفاده می کنند و به شما این امکان را می دهند تا سوالات پیچیده تری را ایجاد کنید. در این درس، شما یاد خواهید گرفت تا یک پرس و جوی چند جدولی (multi-table query) را بسازید.

نرم افزار سامانه مودیان راهکار



در طول این آموزش، از یک پایگاه داده نمونه استفاده خواهیم کرد. اگر می خواهید مثالها را دقیقا مشابه آموزش پیش ببرید این فایل اکسس را از لینک زیر دانلود نمایید. برای اجرای این فایل لازم است تا اکسس 2016 روی کامپیوتر شما نصب شده باشد.

دانلود فایل اکسس مربوط به مثالهای این آموزش

طراحی پرس و جوی چند جدولی


اگر ایده خوبی نسبت به آنچه که می خواهید در جداول بیابید و همینطور چگونگی یافتن داده ها، نداشته باشید، ساختن و درک کردن پرس و جوها (Queries) می تواند کار مشکلی باشد. ایجاد یک پرس و جو (Query) تک جدولی می تواند به اندازه کافی ساده باشد، اما برای ساختن چیزی قدرتمندتر شما باید قبل از شروع طراحی برای آن برنامه ریزی صورت بدهید.

برنامه ریزی برای ایجاد یک پرس و جو (Query)


هنگامی که برای ایجاد یک پرس و جو (Query) که بیش از یک جدول را پوشش می دهد، برنامه ریزی می کنید، باید از این چهار مرحله استفاده کنید :

آن چیزی را که می خواهید بدانید، دقیقاً مشخص کنید. اگر می توانید هر گونه سوالی را از پایگاه داده (database) خود بپرسید، آن سوال چه خواهد بود؟ ساختن یک پرس و جو (Query) از پرسیدن یک سوال به مراتب پیچیده تر است، اما دانستن این که دقیقاً چه سوالی را می خواهید از پایگاه داده بپرسید، برای ایجاد یک پرس و جوی مفید، ضروری می باشد.

هر نوع اطلاعاتی را که می خواهید در نتایج پرس و جو (Query) ظاهر گردد را مشخص سازید. کدام فیلدها این اطلاعات را در خود جای داده اند؟

فیلدهایی (fields) را که می خواهید در نتایج پرس و جو (Query) نمایان شوند بیابید. کدام جدول ها این فیلدها را در خود جای داده اند؟

معیارهایی را که هر فیلد اطلاعاتی باید داشته باشد، تعیین کنید. در مورد سوالی که در مرحله 1 پرسیدید فکر کنید تا این معیارها را تعیین کنید. کدام فیلدها را برای جستجوی اطلاعاتی خاص مورد نیاز دارید؟ دنبال چه اطلاعاتی می گردید؟ چگونه این اطلاعات را مورد جستجو قرار می دهید؟

این فرآیند در ابتدا ممکن است انتزاعی به نظر برسد، اما وقتی وارد مراحل ایجاد یک پرس و جو (Query) شوید، خواهید دید که برنامه ریزی برای ساخت یک پرس و جوی چند جدولی چقدر ساختن آن پرس و جو را ساده تر و قابل درک تر خواهد ساخت.

برنامه ریزی برای ایجاد پرس و جوی ما


بیایید به صورت عملی برای ایجاد یک پرس و جو برنامه ریزی کنیم. همچنان که در مراحل برنامه ریزی برای ساخت پرس و جو پیش می روید، به این فکر کنید که چگونه هر بخشی از مراحل برنامه ریزی می تواند در پرس و جوی نهایی ایجاد شده تاثیر بگذارد.

مرحله 1 : سوالی را که می خواهیم بپرسیم، دقیقا مشخص کنیم


پایگاه داده قنادی ما دارای تعداد زیادی مشتری می باشد، خیلی از این مشتری ها هیچ سفارشی تا بحال نداشته اند، اما برای دریافت محصولات ما ثبت نام کرده اند. بیشتر آنها در محدوده فروشگاه ما زندگی می کنند، اما بقیه آنها در محدوده خارج شهر و حتی شهرهای دیگر زندگی می کنند. ما می خواهیم لیستی از مشتریانی را که خارج از شهر زندگی می کنند و قبلا سفارشی داشته اند، در اختیار داشته باشیم تا دوباره بازگردند و باز هم محصولات ما را امتحان کنند، برای همین منظور می خواهیم برای آنها کوپن هایی را ارسال کنیم. ما واقعاً نمی خواهیم برای مشتریانی که در ناحیه خیلی دوری زندگی می کنند کوپنی را ارسال کنیم، چر اکه به احتمال زیاد آنها به ما سر نخواهند زد. بنابراین ما می خواهیم اشخاصی را بیابیم که اگر چه در شهر ما زندگی نمی کنند اما در عین حال به محدوده ما نزدیک هستند.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
به طور خلاصه، سوالی را که می خواهیم پرس و جوی ما به آن پاسخ بدهد اینست : کدام مشتریان در محدوده ما زندگی می کنند، خارج از محدوده شهر هستند، و قبلاً به قنادی ما سفارش داده اند؟

مرحله 2 : شناسایی اطلاعات مورد نیاز


چه اطلاعاتی را می خواهیم در مورد این مشتریان در لیست مان ببینیم؟ بدیهی است، ما نام مشتری و اطلاعات تماس با او شامل آدرس، شماره تلفن و ایمیل را نیاز داریم. اما چگونه بدانیم که این مشتریها قبلاً سفارش داشته اند؟ هر رکورد اطلاعاتی در جدول سفارش ها دارای شناسه مشتری مربوطه که سفارش گذاری کرده است می باشد. اگر ما شناسه سفارش را در لیست خود بگنجانیم می توانیم فقط مشتریانی را لیست کنیم که تا کنون دارای سفارش بوده اند.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)

مرحله 3 : پیدا کردن جدول هایی که اطلاعات مورد نیاز ما را دارند


برای نوشتن یک پرس و جو (Query) لازم است تا با جداول موجود در پایگاه داده به خوبی آشنا باشید. از آنجا که ما مدام با پایگاه داده خودمان سر و کار داریم، قطعاً با آن آشنا هستیم و می دانیم که اطلاعات مشتریان ما در فیلدهای جدول Customers قرار دارند. همینطور می دانیم که سفارش های ما در جدول Orders قرار دارند. ما تنها نیاز داریم تا این دو جدول را در پرس و جو (Query) خود بگنجانیم تا به اطلاعات مورد نیازمان دسترسی داشته باشیم.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)

مرحله 4 : تعیین معیارهای مورد نظر که باید در جستجو لحاظ شوند


هنگامی که معیاری را برای یک فیلد در یک پرس و جو (Query) تعیین می کنید، در واقع فیلتری را روی آن فیلد قرار می دهید و در نتیجۀ آن پرس و جوی شما تنها اطلاعاتی را در خروجی نمایش می دهد که دارای آن معیارها باشند. فیلدهایی را که ما در این پرس و جو قرار داده ایم مرور کنید. چگونه و در کجاها می توانیم معیارهایی را تعیین کنیم تا به ما بهترین کمک را در یافتن پاسخ پرسشمان کنند؟

ما نمی خواهیم مشتریانی که در شهر ما (Raleigh) زندگی می کنند، در لیست ما ظاهر شوند. بنابراین نیاز به معیاری داریم تا همه مشتریان را به ما نشان بدهد و مشتریانی را که در شهر Raleigh زندگی می کنند از آنها استثناء کند. ما همچنین، نمی خواهیم تا مشتریانی را که از ما خیلی دور هستند در لیست بیایند. ما می دانیم که کلیه مشتریانی که در محدوده ما زندگی می کنند تلفن آنها با پیش شماره 919 آغاز می شود، بنابراین معیار دیگر ما این می باشد که شماره تلفن مشتری مربوطه با 919 آغاز شده باشد. این مساله متضمن اینست که کوپن های ارسالی تنها برای اشخاصی ارسال خواهند شد که به اندازه کافی به ما نزدیک هستند و شانس سر زدن آنها بیشتر است.

ما معیاری را برای سفارش ها تعیین نمی کنیم، چرا که می خواهیم کلیه سفارشاتی را ببینیم که سفارش دهنده آنها دارای معیارهایی که گفتیم باشند.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
نکته مهم : برای اینکه بتوانید معیارها را تعیین کنید، باید آنها را با زبانی بنویسید که برای نرم افزار اکسس قابل درک باشد. در این مورد در آموزش جداگانه ای به چگونگی نوشتن این معیارها خواهیم پرداخت. فعلاً مطابق مثالهای ما پیش بروید.

متصل کردن جداول در پرس و جوها (Joining tables in queries)


آخرین نکته ای که در مورد طراحی یک پرس و جو (Query) باید در نظر بگیرید، چگونگی متصل کردن (Join) جداول به یکدیگر می باشد. وقتی دو جدول را به یک پرس و جو (Query) اضافه می کنید، آنچیزی را که در پنجره ارتباطات اشیاء (Object Relationship pane) خواهید دید، مشابه تصویر زیر می باشد :

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
خطی که دو جدول را به یکدیگر مرتبط کرده است خط اتصال (join line) نامیده می شود. خط اتصال در واقع یک فلش است. در تصویر بالا، فلش مربوط به خط اتصال از سمت چپ به سمت راست اشاره می کند، معنای آن این می باشد که پرس و جو (Query) ابتدا اطلاعات موجود در جدول سمت چپ را بررسی می کند، و سپس اطلاعات جدول سمت راست را که مرتبط با جدول سمت چپ می باشند بررسی می کند.

جدول های شما همیشه به این شکل مرتبط نمی شوند. بعضی وقتها اکسس آنها را از سمت راست به چپ ارتباط می دهد. در هر صورت، شما نیاز خواهید داشت تا مسیر ارتباط را تغییر بدهید تا مطمئن شوید که پرس و جوی (Query) شما اطلاعات صحیحی را نشان خواهد داد. جهت ارتباط بر روی اطلاعاتی که پرس و جوی (Query) شما بازیابی خواهد کرد، تاثیر می گذارد.

برای درک بهتر این موضوع، پرس و جویی را که ما در حال طراحی آن هستیم در نظر بگیرید. در پرس و جوی ما می خواهیم تا مشتریانی را که دارای سفارش می باشند ببینیم، بنابراین جداول مشتریان (Customers) و سفارش ها (Orders) را به پرس و جو اضافه می کنیم. بیایید به برخی داده هایی که در این جدول ها هستند نگاهی بیندازیم.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
وقتی به این لیست ها نگاه می کنید، چه چیزی را متوجه می شوید؟ اول از همه، هر سفارش در جدول سفارش ها (Orders) به یک شخص در جدول مشتریان (Customers) مرتبط می باشد و مشخص می شود که کدام مشتری این سفارش را داده است. با این حال، وقتی به جدول مشتریان (Customers) نگاه کنید، شما مشتریانی را خواهید دید که ممکن است چندین سفارش داشته باشند و یا اینکه اصلاً هیچ سفارشی نداشته باشند. همانطور که می بینید، حتی زمانی که دو جدول در ارتباط با یکدیگر باشند، ممکن است رکوردهایی داشته باشیم که به هیچ رکوردی در جدول دیگر مرتبط نباشند.

بنابراین وقتی که اکسس سعی می کند تا یک پرس و جو را با ارتباط فعلی (ارتباط چپ به راست) اجرا کند، چه اتفاقی خواهد افتاد؟ اکسس کلیه اطلاعات جدول سمت چپ ما را که در اینجا جدول مشتریان می باشد، استخراج می کند.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
سپس اکسس هر رکورد از جدول سمت راست را که در ارتباط با رکورد جدول سمت چپ باشد، بازیابی می کند.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
از آنجایی که پرس و جوی (Query) ما از جدول مشتریان (Customers) آغاز شده است، در نتایج پرس و جوی ما تمامی رکوردهای مربوط به مشتریان، شامل آنهایی که سفارشی هم نداشته اند، لیست می گردند. این اطلاعات بیشتر از آن چیزی است که ما نیاز داریم. در اینجا ما نیاز داریم تا فقط مشتریانی را که دارای سفارش می باشند، مشاهده کنیم.

خوشبختانه ما می توانیم با تغییر دادن مسیر خط اتصال (join line) این مشکل را حل کنیم. اگر ما خط اتصال را از سمت راست به چپ بگیریم، اکسس ابتدا سفارش ها را بازیابی می کند.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
سپس اکسس جدول سمت چپ را بررسی می کند و تنها مشتریان مربوط به هر سفارش را لیست خواهد کرد.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
در حال حاضر دقیقاً اطلاعاتی را که می خواهیم در اختیار داریم : همه مشتریانی که دارای سفارش هستند و فقط همان مشتری ها لیست می شوند. همانطور که می بینید ما مجبور شدیم تا برای رسید به اطلاعاتی که مورد نظرمان است، جداول را در مسیر درستی به یکدیگر پیوند بدهیم.

حالا که فهمیدیم از چه مسیری باید اتصال جداول را برقرار کنیم، آماده هستیم تا پرس و جوی (Query) خود را بسازیم.

در مثال ما، ما نیاز داریم تا ارتباط جداول را از سمت راست به چپ برقرار کنیم، اما سمت صحیح ارتباط در اتصال بین جداول موجود در یک پرس و جو، بستگی به اطلاعاتی دارد که شما می خواهید مشاهده نمایید، و همینطور بستگی به این دارد که داده های شما چگونه ذخیره شده باشند. وقتی که جداولی را به پرس و جو اضافه می کنید، اکسس به صورت اتوماتیک جداول را با یکدیگر مرتبط می کند، اما غالباً آنها را در مسیر درستی پیوند نمی دهد. بنابراین مهم است که همواره قبل از ایجاد پرس و جوی مورد نظرتان، مسیرهای اتصال جداول را مرور و بازبینی نمایید.

ایجاد پرس و جوی چند جدولی (multi-table query)


حالا که پرس و جوی خود را برنامه ریزی کرده ایم، آماده هستیم تا آن را بسازیم و اجرا کنیم. اگر برنامه ریزی انجام شده برای ساخت پرس و جو را نوشته اید، مطمئن شوید که در فرآیند ساخت پرس و جو به آنها مراجعه می کنید.

روش ایجاد یک پرس و جوی چند جدولی


در تب Create دستور Query Design را انتخاب کنید.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
در کادر محاوره ای باز شده، جداولی را که می خواهید به پرس و جوی شما اضافه شوند، انتخاب کرده و بر روی دکمه Add کلیک کنید. با پایین نگهداشتن دکمه Ctrl در صفحه کلید می توانید همزمان چندین جدول را نیز انتخاب نمایید. وقتی که برای ساختن این پرس و جو برنامه ریزی می کردیم، تصمیم گرفتیم تا از جداول Customers و Orders استفاده کنیم، بنابراین در اینجا این دو جدول را به پرس و جویمان اضافه می کنیم.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
بعد از اینکه جداول مورد نظر را اضافه کردید بر روی دکمه Close کلیک کنید.

جداول مربوطه در پنجره ارتباطات اشیاء (Object Relationship pane) ظاهر می شوند، ضمن اینکه با یک خط اتصال (join line) به یکدیگر مرتبط شده اند. بر روی آن خط نازک دوبار کلیک کنید تا بتوانید مسیر ارتباط (join direction) را ویرایش نمایید.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
کادر محاوره ای Join Properties نمایان می شود. یکی از گزینه های مربوط به چگونگی ارتباط را انتخاب کنید. در این مثال ما گزینه 3 را انتخاب می کنیم، چرا که می خواهیم مسیر ارتباط ما از سمت راست به چپ باشد.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
حالا در جداول بر روی اسامی فیلدها دوبار کلیک کنید تا در نتایج پرس و جو ظاهر شوند. در این مثال ما از جدول مشتریان فیلدهای زیر را انتخاب می کنیم.

First Name, Last Name, Street Address, City, State, Zip Code, Phone Number

همچنین از جدول سفارش ها فیلد ID number را انتخاب می کنیم.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
در قسمت criteria معیارهای جستجو را تعیین نمایید. معیارهایی که ما برای این پرس و جو برنامه ریزی کرده ایم به شرح زیر می باشد :

City : Not in ("Raleigh")

Phone Number : Like ("919*")

این معیارهای مشتریانی را می یابند که در شهر Raleigh زندگی نمی کنند و در عین حال پیش شماره تلفن آنها 919 می باشد.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
بعد از اینکه معیارها را تعیین کردید، پرس و جو را اجرا (Run) کنید. برای اجرا کردن پرس و جو بر روی دستور Run که در تب Design قرار دارد، کلیک کنید.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
نتایج پرس و جو به شما نمایش داده می شوند. اگر می خواهید این پرس و جو (Query) را ذخیره کنید در نوار ابزار دسترسی سریع (Quick Access Toolbar) بر روی دستور save کلیک کنید. یک کادر محاوره ای باز می شود و از شما نامی را درخواست می کند، نامی را به پرس و جو تخصیص بدهید و بر روی OK کلیک کنید.

9. طراحی پرس و جوی چند جدولی (Multi-table Query)
حالا شما می دانید که چگونه می توان یک پرس و جوی چند جدولی (multi-table query) را بسازید. در درس بعدی شما را با گزینه های بیشتری در مورد طراحی پرس و جوها آشنا خواهیم کرد تا بتوانید پرس و جوهای قدرتمندتری را نیز بسازید.


آموزش قبلی : 8. طراحی یک پرس و جوی (Query) ساده

آموزش بعدی : 10. گزینه های بیشتر برای طراحی پرس و جو (Query)

نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.