واضح آرشیو وب فارسی:سایت ریسک: farman-h09-10-2009, 09:46 PMبا سلام خدمت دوستان لطفا هر چي در مورد دستورات بازيابي و تلفيق جداول و رسم نمودار در sql ميدونيد كمك كنيد ممنون.:42: shalineh10-10-2009, 04:59 PMبرای بازیابی داده ها در SQL باید یک تقاضا ایجاد کرد. تقاضا در شکل کلی خود با دو روش ایجاد می شود: الف - استفاده از Query که از بحث ما خارج است 2- استفاده از دستور Select >> استفاده از دستور Select شکل کلی دستور Select بصورت زیر است: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!>> تغییر عنوان فیلدها با استفاده از دستور SELECT می توان عنوان فیلدها را تغییر داد. مثلا کد زیر فیلد Name را به FirstName تغییر می دهد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!>> استفاده از String در عنوان دستور SELECT این کار معمولا خوانایی خروجی دستور Select رو افزایش میده. مثلا کد زیر عبارت Name Is رو به تمام رکوردها اضافه می کند: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!>> بازیابی رکوردهای مورد نظر برای انتخاب رکوردهایی به کار میره که با شرط ما سازگاری و همخوانی دارند. مثلا کد زیر نامهایی رو انتخاب میکنه که حرف S در اون نامها وجود داشته باشه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!>> مرتب سازی داده ها میتوان در هنگام بازیابی داده ها ، آنها را Sort کرد. مثلا کد زیر تمام نامها رو بازیابی میکنه و اونها رو به ترتیب نزولی مرتب میکنه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!>> حذف فیلدهای تکراری از بازیابی رکوردهای تکراری می توان صرف نظر کرد. کد زیر را ببینید: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!>> گروه بندی فیلدها می توان رکوردهای بازیابی شده را گروه بندی ( تلخیص ) کرد. در این حالت معمولا هدفی نهفته است. مثلا میخواهیم تعداد نامها رو بر اساس شرط بشماریم. مثلا کد زیر تمام نامهایی را که دارای حرف S هستند رو بازیابی میکنه و در رکوردهای بازیابی شده، نامها رو به تفکیک تعداد مشخص میکنه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اگر برای این تلخیص، خواهان اعمال شرط نیز هستید میتونید عبارت Having رو هم به انتهای کد اضافه کنید و شرط مورد نظر رو بنویسید. >> استفاده از توابع: توابع برای تامین هدفی خاص و معمولا در همراهی با Group By به کار می روند. مثلا عبارت زیر مجموع نمرات هر دانشجو را برمیگرداند: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!توابع مهم عبارتند از: AVG , COUNT, MAX, MIN, STDEV, STDEVP, SUM, VAR,VARP shalineh10-10-2009, 05:44 PMتلفیق برای بازیابی اطلاعات از چندین جدول بکار میره. مثلا شما فرض کنید یک جدول داریم که نام دانشجوها رو در اون ذخیره کردیم. یک جدول هم داریم که واحدهایی که دانشجویان در این ترم انتخاب کرده اند رو ذخیره کرده ایم. مشخص است که یک دانشجو میتونه بیش از یک واحد انتخاب کنه و هر واحد هم میتونه توسط بیش از یک نفر انتخاب شده باشه. خب، حالا میخواهیم واحدهایی که توسط دانشجوی X انتخاب شده رو ، بازیابی کنیم. در این حالت دو راه داریم: 1- بررسی تک تک فیلدها و شرط گذاری برای آنها ، تا نهایت تمام واحدهایی که یک یا چند دانشجوی مشخص ( معلوم الحال :31: ) انتخاب کرده اند رو بازیابی کنیم. یه لحظه فکر کن. مثلا در دانشگاهی به عظمت دانشگاه تهران، بررسی این فیلدها بصورت مجزا ، چقدر زمان بر خواهد بود. 2- استفاده از دستورات تلفیق یا همون JOIN ( بهترین و در واقع مطمئن ترین راه ) پنج روش متداول تلفیق ، در SًًQL عبارتند از : 1- تلفیق Equi Join تساوی فیلدها رو بررسی میکنه. یعنی چه؟ یعنی فقط فیلدهایی بازیابی خواهند شد که مقدار آنها در جدولهای مختلف برابر باشه. یه مثال میزنم. دو تا جدول داریم. جدول1 و جدول2 . در جدول 1 دو تا فیلد داریم. فیلد شماره دانشجویی (S_Num) و فیلد نام دانشجو (Name). در جدول 2 هم سه تا فیلد داریم. فیلد شماره دانشجویی (S_Num) و نام درس ( Study ) و نمره ( Grade). برای بازیابی نمرات هر دانشجو از این دو جدول باید کدی مثل کد زیر نوشته بشه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! 2- تلفیق Natural این هم تساوی فیلدها رو بررسی میکنه اما ... اما فقط رکوردهای غیر تکراری بازیابی خواهند شد. باید به جای علامت تساوی ، علامت <> قرار دهیم. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! 3- تلفیق Cross Join تمام رکوردهای جدولها بازیابی خواهند شد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! 4- تلفیق Outer Join تمام فیلدهای یک جدول و بخشی از فیلدهای جدول دیگر را بازیابی میکند. و سه نوع دارد: Left Outer Join = بازیابی تمام رکوردهای جدول اول و رکوردهایی از جدول دوم که با جدول اول سازگارند. Right Outer Join = بازیابی تمام رکوردهای جدول دوم و رکوردهایی از جدول اول که با جدول دوم سازگارند. Full Outer Join = بازیابی تمام رکوردهای سازگار جدول اول و دوم. مثال: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! 5- تلفیق Self Join جدول رو با خودش تلفیق میکنه. به چه دردی میخوره؟ خب ، معمولا برای پیدا کردن رکوردهای تکراری یک جدول بکار میره. ( نقطه مقابل دستور DISTINCT - که در پست قبل توضیح دادم) . در این الحاق حتما باید از نامهای مستعار استفاده کرد. ( یعنی جدول رو به دو جدول مستعار تقسیم کرد ) مثلا در مثال بالا ( دیتابیس فرضی ) میخواهیم نمرات یک یا چند دانشجو رو با شماره دانشجویی مشخص بازیابی کنیم. خب میدونیم که شماره دانشجویی برای هر دانشجو یکتا هست و نمرات هم در جدول دوم بر اساس شماره دانشجویی وارد شده است . پس: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! farman-h10-10-2009, 10:29 PMتلفیق برای بازیابی اطلاعات از چندین جدول بکار میره. مثلا شما فرض کنید یک جدول داریم که نام دانشجوها رو در اون ذخیره کردیم. یک جدول هم داریم که واحدهایی که دانشجویان در این ترم انتخاب کرده اند رو ذخیره کرده ایم. مشخص است که یک دانشجو میتونه بیش از یک واحد انتخاب کنه و هر واحد هم میتونه توسط بیش از یک نفر انتخاب شده باشه. خب، حالا میخواهیم واحدهایی که توسط دانشجوی X انتخاب شده رو ، بازیابی کنیم. در این حالت دو راه داریم: 1- بررسی تک تک فیلدها و شرط گذاری برای آنها ، تا نهایت تمام واحدهایی که یک یا چند دانشجوی مشخص ( معلوم الحال :31: ) انتخاب کرده اند رو بازیابی کنیم. یه لحظه فکر کن. مثلا در دانشگاهی به عظمت دانشگاه تهران، بررسی این فیلدها بصورت مجزا ، چقدر زمان بر خواهد بود. 2- استفاده از دستورات تلفیق یا همون JOIN ( بهترین و در واقع مطمئن ترین راه ) پنج روش متداول تلفیق ، در SًًQL عبارتند از : 1- تلفیق Equi Join تساوی فیلدها رو بررسی میکنه. یعنی چه؟ یعنی فقط فیلدهایی بازیابی خواهند شد که مقدار آنها در جدولهای مختلف برابر باشه. یه مثال میزنم. دو تا جدول داریم. جدول1 و جدول2 . در جدول 1 دو تا فیلد داریم. فیلد شماره دانشجویی (S_Num) و فیلد نام دانشجو (Name). در جدول 2 هم سه تا فیلد داریم. فیلد شماره دانشجویی (S_Num) و نام درس ( Study ) و نمره ( Grade). برای بازیابی نمرات هر دانشجو از این دو جدول باید کدی مثل کد زیر نوشته بشه: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! 2- تلفیق Natural این هم تساوی فیلدها رو بررسی میکنه اما ... اما فقط رکوردهای غیر تکراری بازیابی خواهند شد. باید به جای علامت تساوی ، علامت <> قرار دهیم. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! 3- تلفیق Cross Join تمام رکوردهای جدولها بازیابی خواهند شد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! 4- تلفیق Outer Join تمام فیلدهای یک جدول و بخشی از فیلدهای جدول دیگر را بازیابی میکند. و سه نوع دارد: Left Outer Join = بازیابی تمام رکوردهای جدول اول و رکوردهایی از جدول دوم که با جدول اول سازگارند. Right Outer Join = بازیابی تمام رکوردهای جدول دوم و رکوردهایی از جدول اول که با جدول دوم سازگارند. Full Outer Join = بازیابی تمام رکوردهای سازگار جدول اول و دوم. مثال: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! 5- تلفیق Self Join جدول رو با خودش تلفیق میکنه. به چه دردی میخوره؟ خب ، معمولا برای پیدا کردن رکوردهای تکراری یک جدول بکار میره. ( نقطه مقابل دستور DISTINCT - که در پست قبل توضیح دادم) . در این الحاق حتما باید از نامهای مستعار استفاده کرد. ( یعنی جدول رو به دو جدول مستعار تقسیم کرد ) مثلا در مثال بالا ( دیتابیس فرضی ) میخواهیم نمرات یک یا چند دانشجو رو با شماره دانشجویی مشخص بازیابی کنیم. خب میدونیم که شماره دانشجویی برای هر دانشجو یکتا هست و نمرات هم در جدول دوم بر اساس شماره دانشجویی وارد شده است . پس: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! سلام ممنون دوست عزيز واقعا زحمت كشيدي دستت درد نكنه. skiski09-05-2010, 08:53 AMسلام با تشكر من دو تا جدول دارم كه در جدول يك عدد 1000 سه بار تكرار شده و در جدول شماره دو ، عدد 1000 يكبار تكرار شده . من قصد دارم اعداد جدول يك با جدول دو با هم كنترل و در خروجي عدد 1000 را دو بار نشان دهد . لطفاً كمكم كنيد سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1128]