معرفی
در مبحث قبلی، یاد گرفتید که چطوری یک کوئری ساده رو با یک جدول ایجاد کنید. اکثر کوئریهایی که در اکسس طراحی میشه از چندین جدول استفاده میکنن و به شما این امکان رو میدن که اطلاعات پیچیدهتری رو ازجداولتون بیرون بکشید.
طراحی یک کوئری از چند جدول:
اگه ایدهی خوبی برای نوع و نحوه جستجویی که میخواید انجام بدین نداشته باشید، استفاده از کوئری و فهم اون براتون خیلی سخت میشه. ساخت یک کوئری ساده ممکنه برای شما راحت باشه اما هر چی پیچیده تر میشه باید ایدهها و برنامهریزیهای دقیقی برای اون داشته باشید.
برنامه ریزی یک کوئری:
موقع برنامه ریزی برای ایجاد کوئری از چند جدول، باید این چهار مرحله رو طی کنید:
۱- دقیقا بدونید دنبال چی هستید و اون رو مشخص کنید. ساختن یک کوئری پیچیدهتر از سؤالهای معمولیه، اما اگه بدونید دقیقا به چه سؤالی میخواید جواب بدید، کارتون راحتتر میشه.
۲- هر نوع اطلاعاتی رو که میخواید در نتایج جستجو داشته باشید، شناسایی کنید. همچنین بدونید که کدوم فیلدها شامل این اطلاعات هستن؟
۳- فیلدهایی رو که میخواهید در کوئری وارد کنید پیدا کنید.همچنین بدونید که در کدوم جداول قرار دارن؟
۴- شاخصهایی رو که باید در هر فیلد نمایش داده بشن رو تعیین کنید. به مرحله اول فکر کنید. برای جستجوی اطلاعات خاص به کدوم فیلدها نیاز دارین؟ دنبال چی میگردین؟ چگونه باید اون رو جستجو کنید؟
این فرایند ممکنه در ابتدا خیلی خلاخصه و مختصر به نظر برسه، اما وقتی ما به روند برنامه کوئری از چند جدول میپردازیم، باید درک چگونگی برنامهریزی کوئریها رو داشته باشیم تابتونیم اونها رو خیلی ساده ایجاد کنیم.
برنامه ریزی ایجاد یک کوئری از چند جدول در قالب یک مثال:
بیایید این فرآیند برنامه ریزی رو با کوئری که در پایگاه داده قنادی اجرا کنیم. همونطور که مراحل برنامه ریزی رو قدم به قدم مطالعه میکنید، به این فکر کنید که چطوری هر بخش از فرآیند برنامهریزی میتونه برای بقیهی کوئریهایی که اجرا میکنید اعمال شه.
مرحله اول: اشاره به سوالی که میخوایم بپرسیم
پایگاهدادهی ما شامل بسیاری از مشتریهاست که بعضی از اونها تا به حال سفارشی ثبت نکردن اما در پایگاه داده ما قرار دارن، چون در لیست پستی ما ثبت نام کردن. بیشتر اونها در محدوده شهر زندگی میکنن، اما بقیه خارج از شهر یا حتی خارج از استان زندگی میکنن. ما میخوایم مشتریهای خارج از شهر رو که در گذشته ثبت سفارشکردن و سفارش رو به ما برگردونن پیدا کنیم و چندتا کوپن برای اونها ارسال کنیم. اما نمیخوایم لیست شامل مشتریانی بشه که خیلی دور زندگی میکنن.
به طور خلاصه، سؤالی که کوئری قراره بهش پاسخ بده اینه: کدوم مشتریها در استان ما زندگی میکنند، خارج از محدوده شهر هستند و سفارش خود را در نانوایی ما قرار داده اند؟
مرحله دوم: شناسایی اطلاعات مورد نیاز
چه دادههایی رو میخوایم در لیست مشتریان ببینیم؟ خب قطعا ما به نام و اطلاعات تماس اونها مثل آدرس، شماره تلفن و آدرس ایمیل نیاز داریم. اما چطوری بفهمیم که سفارشاتی ثبت کردن یا نه؟ هر رکورد ثبت سفارش مشتری رو مشخص میکنه. اگر شماره شناسهی سفارش رو در نظر بگیریم، باید بتونیم فهرست رو به مشتریانی که قبلا سفارش دادن، محدود کنیم.
مرحله سوم: یافتن جداول حاوی اطلاعات مورد نیاز
برای نوشتن یک کوئری، باید با جداول مختلف موجود در پایگاه داده خود آشنا باشید. چون در این صورت میدونیم که کدوم اطلاعات مشتری در کدوم فیلدهای جدول Customers قرار داره. شماره شناسه سفارش (Order ID numbers) در یک فیلد از جدول Orders قرار داره. همهی اطلاعات مورد نیاز ما شامل این دو جدول میشه.
مرحله چهارم: تعیین معیارهایی که کوئری باید جستجو کنه
وقتی شما معیاری برای یک فیلد در یک کوئری تعیین میکنید، اساسا درخواست فیلتر برای اون رو دارید که به کوئری اجازه میده تنها اطلاعاتی رو که با معیارهای شما مطابقت دارن، بازیابی کنه. لیست فیلدهای مورد نظر رو در این کوئری مرور کنید.
ما مشتریانی رو که در شهر Raleigh یا خیلی دور از این شهر زندگی میکنن رو نمیخوایم، پس معیارهایی رو ارائه میدیم که همه رکوردهارو به جز مشتریانی که شهر Raleigh و یا خیلی دورتر زندگی میکنن رو پیدا کنه. مثلا تمام شمارههای تلفن در این استان با کد ۹۱۹ شروع میشن، بنابراین علاوه بر معیار قبلی این معیار هم برای برگردوندن فیلدها در نظر میگیریم.
ما این معیارهارو برای فیلد شناسه سفارش یا هر فیلد دیگه تعیین نمیکنیم چون میخوایم همه سفارشات ساخته شده توسط افرادی که دو معیار مورد نظر مارو دارن پیدا کنیم.
برای نوشتن کوئری، باید بتونید معیارها رو به زبانی بنویسید که Accessاون رو درک کنه. مثلا در تصویر بالا، معیارهای ما برای شروع شماره تلفن ها با ۹۱۹ باید اینطوری نوشته بشن: مانند (“۹۱۹ *”).
اضافه کردن جداول به کوئریها:
نکته نهایی که باید هنگام طراحی یک کوئری در نظر بگیرید، اضافه یا لینک کردن جداول به کوئری هست. وقتی دو جدول رو به یک کوئری در اکسس اضافه میکنید، همون چیزیه که در Object Relationship pane مشاهده میکنید:
به خطی که دوتا جدول رو به هم متصل میکنه، خط اتصال میگن. حالا چرا خط اتصال یک فلشه؟ چون نشان میده که query به دادههای اون دو جدول نگاه میکنه. در تصویر بالا، فلش از سمت چپ به راسته، یعنی اول کوئری به داده ها در جدول سمت چپ نگاه میکنه، بعد فقط دادههایی رو از جدول راست در نظر میگیره که به فیلدهای جدول چپ مرتبط هستن.
جداول شما همیشه به این روش ملحق نمیشن. گاهی اوقات ممکنه از راست به چپ لینک بشن. در هر صورت، ممکنه یه وقت لازم باشه جهت لینک کردن رو تغییر بدین تا مطمئن بشین که کوئری شما شامل اطلاعات صحیح هست. جهت لینک کردن میتونه روی هر کدوم از اطلاعات مرتبط به کوئری شما تأثیر بذاره.
برای درک بهتر این موضوع میتونیم اینطوری بگیم که یک کوئری رو درنظر بگیرید، مثلا باید مشتریانی رو مشاهده کنید که ثبت سفارش کردن، پس الان به جداول مشتریان و سفارشات احتیاج داریم. خب حالا بیایید نگاهی به برخی از داده های موجود در این جداول بندازیم.
وقتی به این لیستها نگاه میکنید متوجه چه چیزی میشین؟ اول از همه، هر سفارش در جدول سفارشات با شخصی در جدول مشتریان (مشتری که اون سفارش رو ثبت کرده) مرتبطه. با این حال، وقتی به جدول Customers نگاه میکنید، میبیند که مشتریانی که چندین سفارش ایجاد کردن، به بیش از یک سفارش مرتبط هستند، و کسانی که هیچ سفارشی ثبت نکردن ، به هیچ سفارشی مرتبط نیستن. همونطور که میبینید، حتی اگه دو جدول به هم متصل باشن، امکان ثبت در جدول وجود داره که هیچ ارتباطی با هیچ رکوردی در جدول دیگه نداره.
بنابراین اتفاقی که میوفته اینه که هر رکورد از جدول سمت چپ که جدول مشتریانه در نظر گرفته میشه.
بعد هر رکورد رو از جدول سمت راست که ارتباطی با یک رکورد داره، بازیابی میکنه که از قبل از جدول سمت چپ گرفته شده.
از آنجا که پیوستن به جدول مشتریان آغاز شد ، کوئری ما شامل رکوردهای مربوط به همه مشتریان ما، از جمله کسانی هست که الان سفارش ندادن. این اطلاعات بیشتر از چیزیه که ما نیاز داریم. ما فقط میخوایم رکورد مشتریانی که ثبت سفارش کردن رو ببینیم.
خوشبختانه با تغییر جهت خط اتصال میتونیم این مشکل رو برطرف کنیم. اگه به جداول از راست به چپ لینک بدیم، اکسس اول دستورات رو از جدول سمت راست، یعنی جدول سفارشات برمیگردونه.
بعد اکسس به جدول سمت چپ نگاه کرده و فقط رکورد مشتریانی رو که به یک سفارش در سمت راست پیوند دارن، برمیگردونه.
الان دقیقا اطلاعات موردنظر رو داریم: کلیه مشتریانی که سفارش دادن و فقط اون دسته از مشتریان هستن. همونطور که میبینید، برای بدست آوردن اطلاعات مورد نظر مجبور شدیم به جداول خود در جهت صحیح بپیوندیم.
حالا که فهمیدین از کدوم جهت باید استفاده کنیم، میتونید کوئری خودتون رو بسازید!
در کوئری، ما باید از پیوند سمت راست به چپ استفاده کنیم، اما جهت پیوستن صحیح برای جداول در سؤالات شما بستگی به این دارد که شما چه اطلاعاتی رو میخواید ببینید و در چه مکانی ذخیره میشن. به همین دلیل مهمه که همیشه قبل از ایجاد کوئری ، نگاهی به اتصالات بین جداول بندازید.
ایجاد یک کوئری از چند جدول:
حالا که کوئری رو برنامه ریزی کردیم، آماده طراحی و اجرای اون هستیم. اگه برای کوئری خودتون برنامههای مکتوب ایجاد کردین، حتما اونها را در طی مراحل طراحی پرس و جو به آنها مراجعه کنید.
برای این کار باید:
۱- گزینه Query Design رو از تب create در نوار ابزار انتخاب کنید.
۲- در کادری که ظاهر میشه، هر جدول رو که میخواید در کوئری قرار بدین انتخاب کنید و روی add کلیک کنید. میتونید کلید Ctrl رو نگه دارید تا بیشتر از یک جدول انتخاب کنید. ما در برنامه ریزی برای کوئری، تصمیم گرفتیم از جداول Customers و Orders استفاده کنیم، بنابراین این موارد رو اضافه میکنیم.
۳- بعد از اینکه همه جداول مورد نظر خود رو اضافه کردین، روی close کلیک کنید.
۴- جداول در Object Relationship pane نمایش داده میشن، که با یک خط اتصال به هم وصل میشن. روی قسمت نازک خط اتصال بین دو جدول کلیک کنید تا جهت لینک تغییر کنه.
۵- کادر Join Properties نمایش داده میشه. یک گزینه رو انتخاب کنید تا جهت پیوستن انتخاب بشه. در این مثال ما گزینه سوم رو انتخاب میکنیم چون میخوایم از راست به چپ لینک بدیم.
۶- در پنجرههای جدول، روی نام فیلدی که میخواید در کوئری از اون استفاده کنید دوبار کلیک کنید . اونها به design grid در قسمت پایین صفحه اضافه میشن. مثلا، ما بیشتر فیلدها رو از جدول customer در نظر میگیریم: نام، نامخانوادگی، آدرس خیابان، شهر، کد پستی و شمارهتلفن . ما همچنین شماره شناسه رو از جدول جقارشات هم در نظر میگیریم.
۷- فیلد criteria رو با وارد کردن معیارهای مورد نظر در ردیف criteria در هر فیلد تنظیم کنید. ما میخوایم دوتا معیار تعیین کنیم: در فیلد شهر، کلمه رالی نباشند وهمچنین در فیلد شماره تماس اعداد به این صورت باشن ” ۹۱۹ * ” .به این ترتیب ما مشتریانی رو پیدا میکنیم که در رالی زندگی نمیکنند اما در کد منطقه ۹۱۹ زندگی میکنند.
۸- بعد از تعیین معیارها ، با کلیک بر روی دستور Run در تب Design، کوئری رو اجرا کنید.
۹- نتایج کوئری در Datasheet view که مثل جدول هست نمایش داده میشه. اگه خواستید، با کلیک روی دستور save در نوار ابزار دسترسی سریع،کوئری رو ذخیره کنید. بعد نام مورد نظر رو تایپ کنید و روی OK کلیک کنید.
حالا شما بلدین که چطوری کوئری از چند جدول ایجاد کنید. در مبحث بعدی درباره گزینههای بیشتر و اضافی طراحی کوئری صحبت میکنیم تا بتونید کوئریهای قویتری ایجاد کنید.