مشاهده نسخه کامل
: معرفي دستورات بازيابي و تلفيق جداول و رسم نمودار در sql
farman-h
09-10-2009, 21:46
با سلام خدمت دوستان
لطفا هر چي در مورد دستورات بازيابي و تلفيق جداول و رسم نمودار در sql ميدونيد كمك كنيد ممنون.:42:
shalineh
10-10-2009, 16:59
برای بازیابی داده ها در 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
shalineh
10-10-2009, 17:44
تلفیق برای بازیابی اطلاعات از چندین جدول بکار میره. مثلا شما فرض کنید یک جدول داریم که نام دانشجوها رو در اون ذخیره کردیم. یک جدول هم داریم که واحدهایی که دانشجویان در این ترم انتخاب کرده اند رو ذخیره کرده ایم. مشخص است که یک دانشجو میتونه بیش از یک واحد انتخاب کنه و هر واحد هم میتونه توسط بیش از یک نفر انتخاب شده باشه.
خب، حالا میخواهیم واحدهایی که توسط دانشجوی 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-h
10-10-2009, 22:29
تلفیق برای بازیابی اطلاعات از چندین جدول بکار میره. مثلا شما فرض کنید یک جدول داریم که نام دانشجوها رو در اون ذخیره کردیم. یک جدول هم داریم که واحدهایی که دانشجویان در این ترم انتخاب کرده اند رو ذخیره کرده ایم. مشخص است که یک دانشجو میتونه بیش از یک واحد انتخاب کنه و هر واحد هم میتونه توسط بیش از یک نفر انتخاب شده باشه.
خب، حالا میخواهیم واحدهایی که توسط دانشجوی 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 - که در پست قبل توضیح دادم) . در این الحاق حتما باید از نامهای مستعار استفاده کرد. ( یعنی جدول رو به دو جدول مستعار تقسیم کرد )
مثلا در مثال بالا ( دیتابیس فرضی ) میخواهیم نمرات یک یا چند دانشجو رو با شماره دانشجویی مشخص بازیابی کنیم. خب میدونیم که شماره دانشجویی برای هر دانشجو یکتا هست و نمرات هم در جدول دوم بر اساس شماره دانشجویی وارد شده است . پس:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام ممنون دوست عزيز واقعا زحمت كشيدي دستت درد نكنه.
سلام
با تشكر
من دو تا جدول دارم كه در جدول يك عدد 1000 سه بار تكرار شده و در جدول شماره دو ، عدد 1000 يكبار تكرار شده . من قصد دارم اعداد جدول يك با جدول دو با هم كنترل و در خروجي عدد 1000 را دو بار نشان دهد .
لطفاً كمكم كنيد
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.