خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
18. آموزش SQL Server به زبان ساده. نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر
در آموزشهای قبلی به نحوه مرتبط کردن جداول SQL Server با یکدیگر و همینطور به مفهوم کلید خارجی پرداختیم. همچنین فرا گرفتیم که چگونه داده های جداول دارای کلید خارجی را وارد کنیم. در این آموزش به نحوه بازیابی اطلاعات از جداول مرتبط با یکدیگر می پردازیم.
فرض کنیم می خواهیم گزارشی بسازیم که لیست اشخاص را از جدول تماسها (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
در این دستور چند نکته وجود دارد که به آنها می پردازیم. اولین نکته اینست که اگر دقت کنید، در هنگام نوشتن اسامی فیلدهای جدول، ابتدا نام جدول را قرار داده ایم و سپس یک نقطه (.) قرار داده ایم و بعد از آن نام فیلد را ذکر کرده ایم. دلیل این مساله اینست که در هنگام کار با چند جدول اس کیو ال سرور متوجه شود منظور ما کدام فیلد از کدام جدول است.
البته اس کیو ال سرور در این زمینه تا حدودی هوشمند می باشد، اما به هیچ وجه توصیه نمی کنیم که بر هوشمندی اس کیو ال سرور تکیه کنید و حتما در این گونه مواقع نام جدول را در ابتدای اسامی فیلدها، مشابه روش بالا ذکر کنید.
دلیل دیگر تاکید ما بر ذکر نام جدول اینست که بعضی وقتها اس کیو ال سرور هم نمی تواند منظور شما را متوجه بشود. بعنوان مثال ما هم در جدول جنسیت و هم در جدول تماسها، فیلد RowID را داریم. طبیعتا چون داریم با هر دوی این جدولها در یک دستور کار می کنیم اس کیو ال سرور از درک منظور ما در این مورد عاجز خواهد بود. به تصویر زیر که ما در آن تعمدا نام جدول را از ابتدای فیلد RowID حذف کرده ایم، دقت کنید.
همانطور که در تصویر می بینید اس کیو ال سرور قادر به بازیابی داده ها نبود و یک پیغام خطا به شما نشان می دهد.
حالا به قسمت JOIN دستور می پردازیم. دستور JOIN که در بالا شیوه نگارشش را دیدید، کارش اینست که اطلاعات را از جداول مرتبط با یک جدول استخراج کند. دستور JOIN برای اینکه درست کار کند باید ابتدا شیوه ارتباط را برایش معرفی نماییم. اگر به انتهای دستور JOIN نگاه کنید یک شرط برابری به شکل زیر قرار داده شده است:
این شرط که بعد از کلمه کلیدی ON ذکر شده است، می گوید شیوه ارتباط به این نحو است که فیلد MaleOrFemale_ID از جدول PhoneBook معادل است با فیلد RowID از جدول MaleOrFemale .
همین یک شرط کافی است تا اس کیو ال سرور بقیه مسائل را خودش تشخیص داده و مدیریت کند.
اگر در قسمت اسامی فیلدهای دستور SELECT دقت کنید، در انتهای این قسمت فیلدی هم از جدول جنسیت قرار گرفته است. آنجا که نوشته شده MaleOrFemale.MaleOrFemale ، در واقع فیلد عنوان جنسیت است که در جدول جنسیت قرار دارد.
اگر به دستور بالا دقت کنید، نوشتن اسامی جداول، که ظاهرا ناگزیر از آن نیز هستیم حجم دستور ما را افزایش داده است، ضمن اینکه ممکن است منجر به سختتر خواندن این دستور شود. در ادامه با استفاده از تکنیک تعیین نام مستعار برای جداول این حجم از کدها را کاهش خواهیم داد و در ضمن کدها را نیز خواناتر خواهیم کرد.
دستور زیر را بنویسید و اجرا کنید :
SELECT P.RowID, P.FirstName
,P.LastName, M.MaleOrFemale
FROM PhoneBook AS P
JOIN MaleOrFemale AS M ON P.MaleOrFemale_ID = M.RowID
دستوری که مشاهده می کنید، دقیقا معادل دستور اول درس است که با هم مرور کردیم، خروجی اش نیز همان است. تنها تفاوتش اینست که ما از اسامی مستعار برای جداول استفاده کرده ایم. اگر خوب دقت کنید خواهید دید که ما در قسمت FROM بعد از اسم جدول PhoneBook عبارت AS P را نوشته ایم. کلمه کلیدی AS در ایجاد اسامی مستعار به ما کمک می کند. در واقع بعد از اینکه کلمه کلیدی AS را قرار دادید و سپس حرف P را بعد از آن نوشتید، در سایر جاهای دستور SELECT نیز باید از حرف P بجای PhoneBook استفاده کنید.
همین کار را در قسمت JOIN نیز انجام داده ایم. و بعد از اسم جدول MaleOrFemale یک AS قرار داده ایم و پشت سرش حرف M را نوشته ایم.
این مدل خلاصه نویسی مزایای خیلی زیادی دارد که سعی کنید به آن عادت کنید و در اسکریپت نویسی اس کیو ال سرور به این شیوه عمل نمایید. ضمن اینکه مزیت دیگرش نیز اینست که وقتی یک شخصی بیرونی به اسکریپتهای شما نگاه می کند خواندن کد برایش راحتتر می شود.
آموزش قبلی : 17. آموزش SQL Server به زبان ساده. کار با جداول مرتبط شده با یکدیگر
آموزش بعدی : 19. آموزش SQL Server به زبان ساده. نحوه تهیه نسخه پشتیبان (Backup) از 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
در این دستور چند نکته وجود دارد که به آنها می پردازیم. اولین نکته اینست که اگر دقت کنید، در هنگام نوشتن اسامی فیلدهای جدول، ابتدا نام جدول را قرار داده ایم و سپس یک نقطه (.) قرار داده ایم و بعد از آن نام فیلد را ذکر کرده ایم. دلیل این مساله اینست که در هنگام کار با چند جدول اس کیو ال سرور متوجه شود منظور ما کدام فیلد از کدام جدول است.
البته اس کیو ال سرور در این زمینه تا حدودی هوشمند می باشد، اما به هیچ وجه توصیه نمی کنیم که بر هوشمندی اس کیو ال سرور تکیه کنید و حتما در این گونه مواقع نام جدول را در ابتدای اسامی فیلدها، مشابه روش بالا ذکر کنید.
دلیل دیگر تاکید ما بر ذکر نام جدول اینست که بعضی وقتها اس کیو ال سرور هم نمی تواند منظور شما را متوجه بشود. بعنوان مثال ما هم در جدول جنسیت و هم در جدول تماسها، فیلد RowID را داریم. طبیعتا چون داریم با هر دوی این جدولها در یک دستور کار می کنیم اس کیو ال سرور از درک منظور ما در این مورد عاجز خواهد بود. به تصویر زیر که ما در آن تعمدا نام جدول را از ابتدای فیلد RowID حذف کرده ایم، دقت کنید.
همانطور که در تصویر می بینید اس کیو ال سرور قادر به بازیابی داده ها نبود و یک پیغام خطا به شما نشان می دهد.
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
دستوری که مشاهده می کنید، دقیقا معادل دستور اول درس است که با هم مرور کردیم، خروجی اش نیز همان است. تنها تفاوتش اینست که ما از اسامی مستعار برای جداول استفاده کرده ایم. اگر خوب دقت کنید خواهید دید که ما در قسمت FROM بعد از اسم جدول PhoneBook عبارت AS P را نوشته ایم. کلمه کلیدی AS در ایجاد اسامی مستعار به ما کمک می کند. در واقع بعد از اینکه کلمه کلیدی AS را قرار دادید و سپس حرف P را بعد از آن نوشتید، در سایر جاهای دستور SELECT نیز باید از حرف P بجای PhoneBook استفاده کنید.
همین کار را در قسمت JOIN نیز انجام داده ایم. و بعد از اسم جدول MaleOrFemale یک AS قرار داده ایم و پشت سرش حرف M را نوشته ایم.
این مدل خلاصه نویسی مزایای خیلی زیادی دارد که سعی کنید به آن عادت کنید و در اسکریپت نویسی اس کیو ال سرور به این شیوه عمل نمایید. ضمن اینکه مزیت دیگرش نیز اینست که وقتی یک شخصی بیرونی به اسکریپتهای شما نگاه می کند خواندن کد برایش راحتتر می شود.
نکته : نوشتن خود کلمه کلیدی AS نیز الزامی نمی باشد و اگر بلافاصله بعد از نام جدول، نام مختصر آن را نیز بنویسید اس کیو ال سرور منظور شما را خواهد فهمید. دستور زیر دقیقا مشابه دستور بالا عمل خواهد کرد و تفاوتی با هم ندارند.
آموزش قبلی : 17. آموزش SQL Server به زبان ساده. کار با جداول مرتبط شده با یکدیگر
آموزش بعدی : 19. آموزش SQL Server به زبان ساده. نحوه تهیه نسخه پشتیبان (Backup) از SQL Server
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: