آموزش طراحی پرس و جو چند جدولی در اکسس
معرفی
در درس قبل یاد گرفتید که چگونه یک پرس و جو ساده با یک جدول ایجاد کنید. اکثر جستارهایی که در Access طراحی می کنید احتمالاً از چندین جدول استفاده می کنند که به شما امکان می دهد به سؤالات پیچیده تری پاسخ دهید. در این درس، نحوه طراحی و ایجاد یک پرس و جو چند جدولی را خواهید آموخت.
در طول این آموزش، از یک پایگاه داده نمونه استفاده خواهیم کرد. اگر میخواهید ادامه دهید، باید پایگاه داده نمونه Access ما را دانلود کنید. برای باز کردن مثال، باید Access را روی رایانه خود نصب کنید.
برنامه ریزی یک پرس و جو
هنگام برنامه ریزی یک پرس و جو که از بیش از یک جدول استفاده می کند، این چهار مرحله را دنبال کنید:
- دقیقاً آنچه را که می خواهید بدانید مشخص کنید. اگر بتوانید هر سوالی از پایگاه داده خود بپرسید، آن سوال چیست؟ ایجاد یک پرس و جو پیچیده تر از پرسیدن یک سوال است، اما دانستن دقیق اینکه به چه سوالی می خواهید پاسخ دهید برای ایجاد یک پرس و جو مفید ضروری است.
- هر نوع اطلاعاتی را که می خواهید در نتایج پرس و جو گنجانده شود، شناسایی کنید. کدام فیلدها حاوی این اطلاعات هستند؟
- فیلدهایی را که می خواهید در پرس و جو خود بگنجانید پیدا کنید. آنها در کدام جداول قرار دارند؟
- معیارهایی را که اطلاعات در هر زمینه باید برآورده کند، تعیین کنید. به سوالی که در مرحله اول پرسیدید فکر کنید. برای جستجوی اطلاعات خاص به کدام فیلدها نیاز دارید؟ دنبال چه اطلاعاتی میگردی؟ چگونه آن را جستجو خواهید کرد؟
این فرآیند ممکن است در ابتدا انتزاعی به نظر برسد، اما همانطور که ما در حال انجام فرآیند برنامه ریزی پرس و جو چند جدولی خود هستیم، باید درک کنید که چگونه برنامه ریزی پرس و جوهای شما می تواند ساخت آنها را بسیار آسان تر کند.
برنامه ریزی درخواست ما
بیایید این فرآیند برنامه ریزی را با درخواستی که در پایگاه داده نانوایی خود اجرا خواهیم کرد، طی کنیم. همانطور که مراحل برنامه ریزی را گام به گام مطالعه می کنید، به این فکر کنید که چگونه هر بخش از فرآیند برنامه ریزی می تواند برای سایر پرس و جوهایی که ممکن است اجرا کنید اعمال شود.
مرحله 1: مشخص کردن سوالی که می خواهیم بپرسیم
پایگاه داده نانوایی ما شامل مشتریان زیادی است که برخی از آنها هرگز سفارشی نداده اند اما در پایگاه داده ما هستند زیرا در لیست پستی ما ثبت نام کرده اند. اکثر آنها در محدوده شهر زندگی می کنند، اما برخی دیگر در خارج از شهر یا حتی خارج از ایالت زندگی می کنند. ما میخواهیم از مشتریان خارج از شهر خود که در گذشته سفارش دادهاند بخواهیم به ما مراجعه کنند و دوباره امتحان کنند، بنابراین میخواهیم چند کوپن را برای آنها پست کنیم. ما در واقع نمی خواهیم لیست ما شامل مشتریانی باشد که خیلی دور زندگی می کنند. ارسال یک کوپن برای شخصی که در منطقه ما زندگی نمی کند احتمالاً باعث نمی شود که آن شخص وارد شود. بنابراین ما فقط می خواهیم افرادی را پیدا کنیم که در شهر ما زندگی نمی کنند اما هنوز در منطقه ما زندگی می کنند.
به طور خلاصه، سؤالی که می خواهیم به سؤال ما پاسخ دهد این است: کدام مشتریان در منطقه ما زندگی می کنند، خارج از محدوده شهر هستند و در نانوایی ما سفارش داده اند؟
مرحله 2: شناسایی اطلاعات مورد نیاز
چه اطلاعاتی ممکن است بخواهیم در لیستی درباره این مشتریان ببینیم؟ بدیهی است که به نام مشتریان و اطلاعات تماس آنها نیاز داریم: آدرس، شماره تلفن و آدرس ایمیل آنها . اما چگونه میتوانیم بفهمیم که آنها سفارش دادهاند یا خیر؟ هر رکورد از یک سفارش، مشتری را که آن سفارش را ارسال کرده است، شناسایی می کند. اگر شمارههای شناسه سفارش را درج کنیم، باید بتوانیم فهرست خود را فقط به مشتریانی که قبلاً سفارش دادهاند محدود کنیم.
مرحله 3: مکان یابی جداول حاوی اطلاعات مورد نیاز ما
برای نوشتن یک پرس و جو، باید با جداول مختلف در پایگاه داده خود آشنا باشید. از کار گسترده با پایگاه داده خودمان، می دانیم که اطلاعات مشتری مورد نیاز ما در فیلدهای جدول Customers قرار دارد. شماره شناسه سفارش ما در فیلدی در جدول Orders قرار دارد. ما فقط باید این دو جدول را اضافه کنیم تا تمام اطلاعات مورد نیاز خود را پیدا کنیم.
مرحله 4: تعیین معیارهایی که درخواست ما باید جستجو کند
وقتی معیارهایی را برای یک فیلد در یک پرس و جو تعیین می کنید، اساساً فیلتری را روی آن اعمال می کنید که به پرس و جو می گوید فقط اطلاعاتی را که با معیارهای شما مطابقت دارد بازیابی کند. فهرست فیلدهایی را که در این جستار گنجانده ایم مرور کنید. چگونه و از کجا می توانیم معیارهایی را تعیین کنیم که به بهترین وجه به ما در پاسخ به سوالمان کمک کند؟
ما مشتریانی که در شهر ما، Raleigh زندگی میکنند، نمیخواهیم، بنابراین معیاری میخواهیم که همه سوابق را به جز آنهایی که Raleigh در زمینه شهر دارند، بازگرداند. ما مشتریانی را که خیلی دور زندگی می کنند نیز نمی خواهیم. همه شمارههای تلفن در منطقه با کد منطقه 919 شروع میشوند، بنابراین معیاری را نیز در نظر میگیریم که فقط سوابقی را که ورودیهای آنها از قسمت شماره تلفن با 919 شروع میشود برمیگرداند. این تضمین میکند که ما فقط کوپنها را به مشتریانی که آنقدر نزدیک زندگی می کنند که واقعاً برمی گردند و از آنها استفاده می کنند.
ما معیاری برای فیلد شناسه سفارش یا هر فیلد دیگری تعیین نخواهیم کرد زیرا میخواهیم تمام سفارشهای انجام شده توسط افرادی را ببینیم که دو معیاری را که ما تنظیم کردیم را برآورده میکنند.
برای نوشتن پرسشها، باید بتوانید معیارهایی را به زبانی تنظیم کنید که Access میفهمد. همانطور که در تصویر بالا می بینید، معیارهای ما برای شروع شماره تلفن با 919 باید به این صورت تایپ شود: مانند (“919*”) .
پیوستن به جداول در پرس و جو
آخرین چیزی که باید در هنگام طراحی پرس و جو در نظر بگیرید، نحوه پیوند دادن یا پیوستن به جداولی است که با آنها کار می کنید. هنگامی که دو جدول را به یک جستجوی Access اضافه می کنید، این همان چیزی است که در صفحه Object Relationship مشاهده خواهید کرد:
خطی که این دو جدول را به هم متصل می کند، خط اتصال نامیده می شود. ببینید چگونه خط اتصال در واقع یک فلش است؟ دلیل آن این است که ترتیبی را نشان می دهد که پرس و جو به داده های دو جدول نگاه می کند. در تصویر بالا، فلش از چپ به راست اشاره میکند، به این معنی که پرس و جو ابتدا به دادههای جدول سمت چپ نگاه میکند، سپس فقط به دادههای جدول سمت راست که مربوط به رکوردهایی است که قبلاً در جدول سمت چپ دیده شده است نگاه میکند.
میزهای شما همیشه به این شکل به هم نمی پیوندند. گاهی اوقات Access از راست به چپ به آنها می پیوندد. در هر صورت، ممکن است لازم باشد جهت اتصال را تغییر دهید تا مطمئن شوید درخواست شما حاوی اطلاعات صحیح است. جهت پیوستن می تواند بر اطلاعاتی که درخواست شما بازیابی می کند تأثیر بگذارد.
برای درک اینکه این به چه معناست، پرس و جوی را که در حال طراحی هستیم در نظر بگیرید. برای درخواست خود، باید مشتریانی را ببینیم که سفارش دادهاند، بنابراین جدول Customers و جدول Orders را اضافه کردهایم. بیایید نگاهی به برخی از داده های موجود در این جداول بیاندازیم.
وقتی به این لیست ها نگاه می کنید متوجه چه چیزی می شوید؟ اول از همه، هر سفارش در جدول Orders به شخصی در جدول Customers مرتبط است – مشتری که آن سفارش را انجام داده است. با این حال، وقتی به جدول مشتریان نگاه میکنید، میبینید که مشتریانی که چندین سفارش ثبت کردهاند به بیش از یک سفارش پیوند داده شدهاند و آنهایی که هرگز سفارشی ثبت نکردهاند با هیچ سفارشی پیوند دارند. همانطور که می بینید، حتی زمانی که دو جدول به هم مرتبط هستند، ممکن است رکوردهایی در یک جدول وجود داشته باشد که هیچ ارتباطی با هیچ رکوردی در جدول دیگر ندارند.
پس چه اتفاقی میافتد وقتی Access سعی میکند پرس و جوی ما را با اتصال فعلی، از چپ به راست اجرا کند؟ هر رکورد را از جدول به سمت چپ می کشد: جدول Customers.
سپس هر رکورد را از جدول سمت راست که با رکوردی که Access قبلاً از جدول سمت چپ گرفته است، رابطه دارد، بازیابی می کند.
از آنجایی که پیوستن ما با جدول Customers آغاز شد، درخواست ما شامل سوابقی برای همه مشتریان ما، از جمله کسانی که هرگز سفارش ندادهاند، خواهد بود. این اطلاعات بیشتر از آنچه ما نیاز داریم است. ما فقط می خواهیم سوابق مشتریانی را ببینیم که سفارش داده اند.
خوشبختانه با تغییر جهت خط اتصال می توانیم این مشکل را برطرف کنیم. اگر به جای آن جداول را از راست به چپ بپیوندیم، Access ابتدا دستورات را از جدول سمت راست، جدول Orders ما، بازیابی می کند:
سپس اکسس به جدول سمت چپ نگاه می کند و فقط سوابق مشتریانی را که به یک سفارش در سمت راست پیوند دارند، بازیابی می کند.
ما اکنون دقیقاً اطلاعات مورد نظر خود را داریم: همه مشتریانی که سفارش دادهاند. همانطور که می بینید، برای به دست آوردن اطلاعاتی که می خواستیم، مجبور شدیم جداول خود را در جهت صحیح به هم بپیوندیم.
اکنون که متوجه شدیم از کدام جهت پیوستن باید استفاده کنیم، آماده ساختن کوئری خود هستیم!
در جستار خود، ما نیاز به استفاده از پیوستن از راست به چپ داشتیم، اما جهت پیوستن صحیح جداول در جستارهای شما به اطلاعاتی که می خواهید ببینید و کجا آن اطلاعات ذخیره می شود بستگی دارد. هنگامی که جداول را به یک پرس و جو اضافه می کنید، اکسس به طور خودکار جداول را برای شما می پیوندد، اما اغلب آنها را در جهت درست به هم متصل نمی کند. به همین دلیل مهم است که همیشه اتصالات بین جداول خود را قبل از ایجاد یک پرس و جو مرور کنید.
ایجاد یک پرس و جو چند جدولی
اکنون که درخواست خود را برنامه ریزی کرده ایم، آماده طراحی و اجرای آن هستیم. اگر طرحهای مکتوب برای درخواست خود ایجاد کردهاید، حتماً در طول فرآیند طراحی پرس و جو به آنها ارجاع دهید.
برای ایجاد یک پرس و جو چند جدولی:
- دستور Query Design را از تب Create در نوار انتخاب کنید.
2. در کادر محاورهای که ظاهر میشود، هر جدولی را که میخواهید در جستار خود قرار دهید انتخاب کنید و روی افزودن کلیک کنید. برای انتخاب بیش از یک جدول می توانید کلید Ctrl را روی صفحه کلید خود فشار داده و نگه دارید. هنگامی که درخواست خود را برنامه ریزی کردیم، به این نتیجه رسیدیم که به اطلاعاتی از جداول مشتریان و سفارشات نیاز داریم، بنابراین آنها را اضافه خواهیم کرد.
3. پس از اینکه همه جداول مورد نظر خود را اضافه کردید، روی Close کلیک کنید.
4. جداول در قسمت Object Relationship ظاهر می شوند که با یک خط پیوستن به هم پیوند خورده اند. روی قسمت نازک خط اتصال بین دو جدول دوبار کلیک کنید تا جهت اتصال آن را ویرایش کنید.
5. کادر محاوره ای Join Properties ظاهر می شود. گزینه ای را برای انتخاب جهت پیوستن خود انتخاب کنید. در مثال ما، گزینه 3 را انتخاب می کنیم زیرا می خواهیم یک پیوستن از راست به چپ داشته باشیم.
6. در پنجرههای جدول، روی نام فیلدهایی که میخواهید در پرس و جو خود اضافه کنید، دوبار کلیک کنید. آنها به شبکه طراحی در قسمت پایین صفحه اضافه خواهند شد. در مثال خود، بیشتر فیلدهای جدول Customers را شامل میشویم: First Name, Last Name, Street Address, City, State, Zip Code, Phone Number. ما همچنین شماره شناسه (ID) را از جدول Orders اضافه می کنیم.
7. با وارد کردن معیارهای مورد نظر در ردیف معیارهای هر فیلد، معیارهای فیلد را تنظیم کنید. ما میخواهیم دو معیار تعیین کنیم: در قسمت City در (“Raleigh”) و در قسمت Phone Number مانند (“919*”) قرار ندارد. این مشتریانی را پیدا می کند که در Raleigh زندگی نمی کنند اما در کد منطقه 919 زندگی می کنند.
8. پس از اینکه معیارهای خود را تعیین کردید، با کلیک روی دستور Run در تب Design، کوئری را اجرا کنید.
9. نتایج پرس و جو در نمای صفحه داده پرس و جو نمایش داده می شود که شبیه یک جدول است. در صورت تمایل، درخواست خود را با کلیک کردن روی فرمان Save در نوار ابزار دسترسی سریع ذخیره کنید. هنگامی که از شما خواسته شد نام آن را نامگذاری کنید، نام مورد نظر را تایپ کنید، سپس روی OK کلیک کنید.
اکنون می دانید که چگونه یک پرس و جو چند جدولی ایجاد کنید. در درس بعدی، گزینه های طراحی پرس و جو بیشتری را پوشش خواهیم داد که می تواند پرس و جو شما را حتی قدرتمندتر کند.
چالش!
- پایگاه داده تمرین ما را باز کنید.
- یک پرس و جو جدید را تکرار کنید.
- جداول Customers و Orders را برای درج در درخواست خود انتخاب کنید.
- جهت اتصال را به راست به l eft تغییر دهید.
- فیلدهای First Name, Last Name, Zip Code را از جدول Customers به درخواست خود اضافه کنید.
- قسمت Paid را از جدول Orders به درخواست خود اضافه کنید.
- معیارهای زیر را تنظیم کنید: در قسمت Zip Code ،27609 را تایپ کنید تا فقط رکوردهایی با کد پستی 27609 برگردانده شود. در قسمت Paid Yes را تایپ کنید تا فقط مشتریانی که پرداخت کردهاند بازگردند.
- پرس و جو را اجرا کنید. اگر پرس و جو را به درستی وارد کرده باشید، نتایج شما شامل 20 رکورد از مشتریانی می شود که در کد پستی 27609 زندگی می کنند و هزینه سفارش را پرداخت کرده اند. اگر نه، روی فلش کشویی View در نوار کلیک کنید تا به نمای طراحی بازگردید و کار خود را بررسی کنید.
- درخواست را با نام Paying Customers در 27609 ذخیره کنید.