رابطه‌ها را قانونمند کنیم

در شماره پیش در مورد برقراری ارتباط بین جداول در پایگاه داده MySql مطالبی را ارائه کردیم و گفتیم اگر بخواهیم داده‌ها را از دو جدول مرتبط به هم بیرون بکشیم چه روشی وجود دارد. روشی که هفته پیش ذکر کردیم، روشی ساده‌ بود که از منطق ریاضی و روابط بین مجموعه‌ها به دست آمده بود. در بعضی جاها برای بهتر شدن عبارات پرس و جو نیاز است از کلمات کلیدی متفاوت استفاده کنیم. این کلمات کلیدی از استاندارد‌های زبان SQL است، اما در بعضی از موتور‌های پایگاه داده با کمی تغییر می‌توان آنها را به کار برد. از آنجا که بحث ما در مورد MySql است، سعی شده در این شماره درباره عبارات پرس و جو مخصوص MySql‌ توضیح دهیم.
کد خبر: ۵۴۳۹۹۷

قبل از هر چیز جداولی را که هفته پیش ایجاد کردیم مرور می‌کنیم؛ دو جدول داشتیم (user و course) که رابطه بین آنها ۱ به N بود، یعنی هر کاربر می‌تواند یک درس اختیار کند و هر درس می‌تواند توسط دانشجویان مختلف برداشته شود. انواع JOIN‌‌ها را در زیر با مثال توضیح می‌دهیم و بررسی خواهیم کرد هر کدام در چه شرایطی مورد استفاده قرار خواهند گرفت.

۱ـ INNER JOIN: مجموعه‌ای را که در تمام جداول دخیل در عبارت پرس و جو است به شما می‌دهد، به عبارت ساده‌تر در همان جداول که بالا توضیح داده شد تمام رکورد‌هایی را که در هر دو جدول یک اشتراک دارند در خروجی مشخص می‌کند، اگر بخواهیم عبارت آن را بنویسیم به این صورت است:

SELECT user.name, course.name

FROM `user`

INNER JOIN `course` on user.course = course.id;

عبارت بالا نشان می‌دهد قرار است اسم درس و نام کاربر در خروجی ظاهر شود و قرار است تمام کاربرانی که درسی را برداشته‌اند در خروجی همراه اسم درسشان ظاهر شوند، عبارت INNER JOIN دو جدول user و course‌ دخیل بوده و قرار است خروجی از نوع ​ INNER JOIN باشد و سطرها در شرط user.course = course.id  صدق کنند.

نکته: همان‌طور که در شماره پیش گفتیم در عبارات پرس و جو اگر فیلد‌هایی را که شرایط یکسانی دارند مثل کلید‌های خارجی و کلید‌های داخلی برابر قرار ندهیم، نتیجه ضرب دکارتی دو مجموعه را حساب خواهد کرد. در مثال بالا شرط آخر بعد از on این موضوع را نشان می‌دهد.

۲ـ LEFT JOIN: این پرس و جو دقیقا مثل بالایی عمل می‌کند اما یک تفاوت دارد، این تفاوت را با مثال نشان می‌دهیم؛ فرض کنید قرار است مشخص کنید چه کاربرانی چه درس‌هایی را برنداشته‌اند. اگر مانند بالا بنویسیم، تمام کاربرانی که درس دارند در خروجی می‌آید، اما شما اگر به‌جای INNER JOIN از عبارت LEFT JOIN استفاده کنید، خروجی شما و پردازش عبارت پرس‌و‌جو این‌گونه تفسیر می‌شود که تمام کاربران را می‌آورد، سپس جلوی اسم آنها نام درسی را که برداشته‌اند ذکر می‌کند. اگر هم درسی برنداشته باشند عبارت null جای نام درس آنها قرار خواهد گرفت.

۳ـ RIGHT JOIN: در این پرس و جو نیز باز شبیه بالا عمل می‌شود، اما به جای جدول سمت چپ (user)، جدول سمت راست یعنی course ملاک است؛ یعنی تمام درس‌ها را در خروجی می‌آورد و اگر کسی آن درس را برنداشته باشد جای نام کاربری عبارت null را قرار خواهد داد.

نکته: منـــــظور از جدول سمت راست یا چپ چیست؟ عبــــارت زیر را در نظر داشته باشید:

« table1» join-type« table2»

نام جدولی که قبل از join ذکر شود جدول سمت راست و جدولی که بعد از آن آورده شود، جدول سمت چپ حساب خواهد شد.

۴ـ OUTTER JOIN(FULL OUTER JOIN): در این پرس و جو تمامی رکوردهای دو جدول را صرف نظر از هیچ رابطه منطقی بین آنها در خروجی می‌آورد. اگر بخواهیم به زبان ساده آن را توضیح دهیم اشتراک بین LEFT JOIN و RIGHT JOIN است، این نوع JOIN در MySql نیز به همین منوال پیاده می‌شود، مانند عبارت زیر:

SELECT user.name, course.name

FROM 'user'

LEFT JOIN `course` on user.course = course.id

UNION

SELECT user.name, course.name

FROM 'user'

RIGHT JOIN `course` on user.course = course.id;

در تمام مثال‌های بالا JOIN بین دو جدول ایجاد کردیم. شما می‌توانید بین چند جدول هم JOIN ایجاد کنید؛ منتها توجه داشته باشید که JOIN‌‌ها در پایگاه داده سربار زیادی دارند اما استفاده از آنها اجتناب‌ناپذیر است. پس در نوع رابطه بین جداول و استفاده از JOIN‌ها دقت داشته باشید.

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها