شما عضو این انجمن نبوده یا وارد نشده اید. لطفا برای مشاهده کامل انجمن و استفاده از آن وارد شوید یا ثبت نام کنید .

امتیاز موضوع:
امتیاز موضوع:
  • 33 رأی - میانگین امتیازات: 3.09
  • 1
  • 2
  • 3
  • 4
  • 5
استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
#1
مطالبی که تا این لحظه از بخش آموزش مقدماتی MySQL فرا گرفته ایم معمولا برای حالت های متداول و کار با جداول به صورت مجزا کافی خواهند بود، اما در برنامه نویسی های پیشرفته تر و در طراحی ساختار برنامه های پیچیده نیاز به نوشتن پرس و جوهای ترکیبی و برقراری تعامل بیشتر بین جداول موجود در دیتابیس است، این نیاز سبب شده که قابلیت دیگری تحت عنوان JOIN (و مشتقات آن) به دستورات MySQL اضافه شود که به کمک آن می توان پرس و جوهای ترکیبی نوشت و بین جداول مختلف ارتباط برقرار کرد، در ادامه راجب آن بیشتر خواهیم گفت.

ساخت جداول فرضی با دستور CREATE

برای درک بهتر نحوه عملکرد دستور JOIN پیش از هر چیز لازم است که چند جدول و ستون فرضی با مقادیری از پیش تعریف شده بسازیم که در زیر پرس و جوی آن را ملاحظه می کنید.
نکته: پیش از اجرای کدهای زیر باید از طریق برنامه phpMyAdmin دیتابیسی با نام فرضی test بسازید، دقت کنید که Collation دیتابیس بر روی utf8_persian_ci تنظیم شده باشد.

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

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *

همان طور که ملاحظه می کنید بین دو جدول در ستون های skill و language ارتباطی متقابل وجود دارد (هر دو ستون عناوین مربوط به زبان های برنامه نویسی را در خود دارند)، بنابراین به فرض اگر بخواهیم مسابقه ای بین افراد هم مهارت برگزار کنیم و نیاز به محاسبه تعداد رقبای اسامی موجود در جدول اول باشد، به ناچار باید در پرس و جوی خود هم از اصلاعات جدول اول (اسامی و مهارت آنها) و هم از اطلاعات جدول دوم (مهارت و تعداد شرکت کننده) استفاده کنیم، هرچند این کار با نوشتن دو پرس و جو نیز امکانپذیر است، اما حرفه ای تر آن است که به کمک JOIN و مشتقات آن (INNER JOIN، LEFT JOIN، RIGHT JOIN، OUTER JOIN) یک پرس و جوی ترکیبی نوشته و به هدف خود برسیم، بدین ترتیب می توان نوشت:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *

که خروجی دستور بالا به صورت نمونه زیر خواهد بود.
*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *

نکته: برای تعریف شرط در هنگام استفاده از دستور JOIN (و مشتقات آن)، از عبارت ON استفاده می شود.
برای آشنایی بیشتر با JOIN و مشتقات آن، در ادامه به صورت موردی این دستور را بررسی می کنیم.

حالت INNER JOIN

حالت اول از مشتقات دستور JOIN به صورت INNER JOIN می باشد، در این حالت می توان به مواردی مشترک از هر دو جدول دسترسی داشت، نتیجه پرس و جو شامل برخی موارد از جدول اول به همراه برخی موارد دیگر از جدول دوم (بر اساس شرط تعیین شده) خواهد بود، مثال:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
خروجی این حالت به صورت زیر خواهد بود.

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
ملاحظه می کنید که با اجرای پرس و جوی بالا ردیف های زیر از جدول اول:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
و ردیف های زیر از جدول دوم به عنوان خروجی برگردانده می شوند:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
حالت LEFT JOIN

نوع دیگر از مشتقات دستور JOIN به صورت LEFT JOIN است که در این حالت تمام ردیف های جدول اول صرف نظر از شرط تعیین شده به همراه ردیف های جدول دوم (بر اساس شرط تعیین شده) به عنوان خروجی برگردانده می شوند، مثال:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
خروجی پرس و جوی بالا به صورت زیر خواهد بود.

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
نکته: ردیف هایی که در جدول دوم بر اساس شرط تعریف شده انتخاب نشوند، با مقدار NULL برگردانده می شوند.

حالت RIGHT JOIN

مشابه حالت LEFT JOIN، حالت RIGHT JOIN است که در این صورت ردیف ها از جدول دوم صرف نظر از شرط تعیین شده انتخاب و ردیف های جدول اول بر اساس شرط انتخاب می شوند، مثال:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *

خروجی پرس و جوی بالا به صورت زیر خواهد بود.

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
حالت OUTER JOIN

حالت آخر از مشتقات JOIN به صورت OUTER JOIN یا FULL JOIN است که در این صورت می توان دو پرس و جوی مبتنی بر JOIN را با عبارت کلیدی UNION (اجتماع) به هم مرتبط نمود، مثال:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
نتیجه پرس و جوی بالا به صورت زیر خواهد بود.

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
ثبت دامنه و فروش هاست، سامانه پیامک، طراحی سایت، خدمات شبکه
دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
  | دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.

sms: 10004673  - 500021995
پاسخ
 سپاس شده توسط elshan


موضوعات مرتبط با این موضوع…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش کار با پایگاه داده MySQL در PHP: othersnn 0 121 ۹۷/۱۰/۲۵، ۱۲:۳۳ عصر
آخرین ارسال: othersnn
  حذف مقادیر از MySQL با دستور DELETE saberi 0 1,005 ۹۴/۶/۲۳، ۰۷:۵۹ عصر
آخرین ارسال: saberi
  به روز رسانی ردیف ها در MySQL با UPDATE saberi 0 1,033 ۹۴/۶/۲۳، ۰۷:۵۳ عصر
آخرین ارسال: saberi
  توابع تجمعی (Aggregate Functions) در MySQL saberi 0 1,061 ۹۴/۶/۲۳، ۰۷:۴۳ عصر
آخرین ارسال: saberi
  استفاده از ORDER و GROUP در MySQL saberi 0 931 ۹۴/۶/۲۳، ۰۷:۳۶ عصر
آخرین ارسال: saberi
  نحوه استفاده از WHERE در MySQL saberi 0 983 ۹۴/۶/۲۳، ۰۷:۳۰ عصر
آخرین ارسال: saberi
  انتخاب ردیف ها با دستور SELECT FROM در MySQL saberi 0 996 ۹۴/۶/۲۳، ۰۷:۲۵ عصر
آخرین ارسال: saberi
  نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL saberi 0 1,056 ۹۴/۶/۲۳، ۰۷:۲۱ عصر
آخرین ارسال: saberi
  نگاهی به MySQL، پرکاربردترین سیستم مدیریت پایگاه داده saberi 0 1,185 ۹۴/۶/۲۳، ۰۷:۱۸ عصر
آخرین ارسال: saberi
  ساخت دیتابیس، جدول و ردیف با دستور CREATE در MySQL saberi 0 1,280 ۹۴/۶/۲۳، ۰۷:۱۵ عصر
آخرین ارسال: saberi

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان