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


18. آموزش SQL Server به زبان ساده. نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر

18. آموزش SQL Server به زبان ساده. نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر
نویسنده : امیر انصاری
در آموزشهای قبلی به نحوه مرتبط کردن جداول SQL Server با یکدیگر و همینطور به مفهوم کلید خارجی پرداختیم. همچنین فرا گرفتیم که چگونه داده های جداول دارای کلید خارجی را وارد کنیم. در این آموزش به نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر می پردازیم.

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



بازیابی اطلاعات از جداول مرتبط با یکدیگر با دستور JOIN


فرض کنیم می خواهیم گزارشی بسازیم که لیست اشخاص را از جدول تماسها (PhoneBook) بازیابی کند و در ضمن در کنار هر شخص جنسیت آن شخص را نیز نمایش بدهد. با توجه به اینکه جنسیت شخص در جدول دیگری می باشد و در جدول تماسها صرفا اعداد 1 و 2 که بیانگر شناسه جنسیت هستند وارد شده است، در حالت معمول که در آموزشهای قبلی فرا گرفتید استفاده از دستور SELECT به تنهایی نمی تواند این خواسته ما را برآورده کند.

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

یک Query جدید باز کنید و دستور زیر را در آن بنویسید و اجرا نمایید.


SELECT PhoneBook.RowID, PhoneBook.FirstName
,PhoneBook.LastName, MaleOrFemale.MaleOrFemale
FROM PhoneBook
JOIN MaleOrFemale ON PhoneBook.MaleOrFemale_ID = MaleOrFemale.RowID


18. آموزش SQL Server به زبان ساده. نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر

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

18. آموزش SQL Server به زبان ساده. نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر

همانطور که در تصویر می بینید اس کیو ال سرور قادر به بازیابی داده ها نبود و یک پیغام خطا به شما نشان می دهد.

Ambiguous column name 'RowID'.

معنای این پیغام خطا اینست که در مورد فیلد RowID ابهام دارم و نمی توانم منظورت را به درستی درک کنم.

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

ON PhoneBook.MaleOrFemale_ID = MaleOrFemale.RowID


این شرط که بعد از کلمه کلیدی ON ذکر شده است، می گوید شیوه ارتباط به این نحو است که فیلد MaleOrFemale_ID از جدول PhoneBook معادل است با فیلد RowID از جدول MaleOrFemale .
همین یک شرط کافی است تا اس کیو ال سرور بقیه مسائل را خودش تشخیص داده و مدیریت کند.

اگر در قسمت اسامی فیلدهای دستور SELECT دقت کنید، در انتهای این قسمت فیلدی هم از جدول جنسیت قرار گرفته است. آنجا که نوشته شده MaleOrFemale.MaleOrFemale ، در واقع فیلد عنوان جنسیت است که در جدول جنسیت قرار دارد.

استفاده از اسامی مستعار برای جداول در دستور SELECT


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

دستور زیر را بنویسید و اجرا کنید :


SELECT P.RowID, P.FirstName
,P.LastName, M.MaleOrFemale
FROM PhoneBook AS P
JOIN MaleOrFemale AS M ON P.MaleOrFemale_ID = M.RowID


18. آموزش SQL Server به زبان ساده. نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر

دستوری که مشاهده می کنید، دقیقا معادل دستور اول درس است که با هم مرور کردیم، خروجی اش نیز همان است. تنها تفاوتش اینست که ما از اسامی مستعار برای جداول استفاده کرده ایم. اگر خوب دقت کنید خواهید دید که ما در قسمت FROM بعد از اسم جدول PhoneBook عبارت AS P را نوشته ایم. کلمه کلیدی AS در ایجاد اسامی مستعار به ما کمک می کند. در واقع بعد از اینکه کلمه کلیدی AS را قرار دادید و سپس حرف P را بعد از آن نوشتید، در سایر جاهای دستور SELECT نیز باید از حرف P بجای PhoneBook استفاده کنید.
همین کار را در قسمت JOIN نیز انجام داده ایم. و بعد از اسم جدول MaleOrFemale یک AS قرار داده ایم و پشت سرش حرف M را نوشته ایم.
این مدل خلاصه نویسی مزایای خیلی زیادی دارد که سعی کنید به آن عادت کنید و در اسکریپت نویسی اس کیو ال سرور به این شیوه عمل نمایید. ضمن اینکه مزیت دیگرش نیز اینست که وقتی یک شخصی بیرونی به اسکریپتهای شما نگاه می کند خواندن کد برایش راحتتر می شود.

نکته : نوشتن خود کلمه کلیدی AS نیز الزامی نمی باشد و اگر بلافاصله بعد از نام جدول، نام مختصر آن را نیز بنویسید اس کیو ال سرور منظور شما را خواهد فهمید. دستور زیر دقیقا مشابه دستور بالا عمل خواهد کرد و تفاوتی با هم ندارند.

18. آموزش SQL Server به زبان ساده. نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر


آموزش قبلی : 17. آموزش SQL Server به زبان ساده. کار با جداول مرتبط شده با یکدیگر

آموزش بعدی : 19. آموزش SQL Server به زبان ساده. نحوه تهیه نسخه پشتیبان (Backup) از SQL Server



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

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

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