با سلام خدمت دوستان
لطفا هر چي در مورد دستورات بازيابي و تلفيق جداول و رسم نمودار در sql ميدونيد كمك كنيد ممنون.:42:
Printable View
با سلام خدمت دوستان
لطفا هر چي در مورد دستورات بازيابي و تلفيق جداول و رسم نمودار در sql ميدونيد كمك كنيد ممنون.:42:
برای بازیابی داده ها در SQL باید یک تقاضا ایجاد کرد.
تقاضا در شکل کلی خود با دو روش ایجاد می شود:
الف - استفاده از Query که از بحث ما خارج است
2- استفاده از دستور Select
>> استفاده از دستور Select
شکل کلی دستور Select بصورت زیر است:
کد:SELECT Field_List
FROM Table_List
WHERE Criteria
>> تغییر عنوان فیلدها
با استفاده از دستور SELECT می توان عنوان فیلدها را تغییر داد.
مثلا کد زیر فیلد Name را به FirstName تغییر می دهد:
کد:SELECT Name AS FirstName From MyTabel
>> استفاده از String در عنوان دستور SELECT
این کار معمولا خوانایی خروجی دستور Select رو افزایش میده.
مثلا کد زیر عبارت Name Is رو به تمام رکوردها اضافه می کند:
کد:SELECT 'Name is:' , Name From MyTabel
>> بازیابی رکوردهای مورد نظر
برای انتخاب رکوردهایی به کار میره که با شرط ما سازگاری و همخوانی دارند.
مثلا کد زیر نامهایی رو انتخاب میکنه که حرف S در اون نامها وجود داشته باشه:
کد:SELECT Name From MyTabel WHERE Name LIKE '%S%'
>> مرتب سازی داده ها
میتوان در هنگام بازیابی داده ها ، آنها را Sort کرد.
مثلا کد زیر تمام نامها رو بازیابی میکنه و اونها رو به ترتیب نزولی مرتب میکنه:
کد:SELECT Name From MyTabel ORDER BY Name DESC
>> حذف فیلدهای تکراری
از بازیابی رکوردهای تکراری می توان صرف نظر کرد.
کد زیر را ببینید:
کد:SELECT DISTINCT Name From MyTabel
>> گروه بندی فیلدها
می توان رکوردهای بازیابی شده را گروه بندی ( تلخیص ) کرد. در این حالت معمولا هدفی نهفته است. مثلا میخواهیم تعداد نامها رو بر اساس شرط بشماریم.
مثلا کد زیر تمام نامهایی را که دارای حرف S هستند رو بازیابی میکنه و در رکوردهای بازیابی شده، نامها رو به تفکیک تعداد مشخص میکنه:
اگر برای این تلخیص، خواهان اعمال شرط نیز هستید میتونید عبارت Having رو هم به انتهای کد اضافه کنید و شرط مورد نظر رو بنویسید.کد:SELECT Name , Count(Name) From MyTabel WHERE Name LIKE '%S%' GROUP By Name
>> استفاده از توابع:
توابع برای تامین هدفی خاص و معمولا در همراهی با Group By به کار می روند.
مثلا عبارت زیر مجموع نمرات هر دانشجو را برمیگرداند:
کد:SELECT Name , SUM(Grade) From MyTabel WHERE Name LIKE '%S%' GROUP By Name
توابع مهم عبارتند از:
AVG , COUNT, MAX, MIN, STDEV, STDEVP, SUM, VAR,VARP
تلفیق برای بازیابی اطلاعات از چندین جدول بکار میره. مثلا شما فرض کنید یک جدول داریم که نام دانشجوها رو در اون ذخیره کردیم. یک جدول هم داریم که واحدهایی که دانشجویان در این ترم انتخاب کرده اند رو ذخیره کرده ایم. مشخص است که یک دانشجو میتونه بیش از یک واحد انتخاب کنه و هر واحد هم میتونه توسط بیش از یک نفر انتخاب شده باشه.
خب، حالا میخواهیم واحدهایی که توسط دانشجوی X انتخاب شده رو ، بازیابی کنیم. در این حالت دو راه داریم:
1- بررسی تک تک فیلدها و شرط گذاری برای آنها ، تا نهایت تمام واحدهایی که یک یا چند دانشجوی مشخص ( معلوم الحال :31: ) انتخاب کرده اند رو بازیابی کنیم. یه لحظه فکر کن. مثلا در دانشگاهی به عظمت دانشگاه تهران، بررسی این فیلدها بصورت مجزا ، چقدر زمان بر خواهد بود.
2- استفاده از دستورات تلفیق یا همون JOIN ( بهترین و در واقع مطمئن ترین راه )
پنج روش متداول تلفیق ، در SًًQL عبارتند از :
1- تلفیق Equi Join
تساوی فیلدها رو بررسی میکنه. یعنی چه؟ یعنی فقط فیلدهایی بازیابی خواهند شد که مقدار آنها در جدولهای مختلف برابر باشه.
یه مثال میزنم. دو تا جدول داریم. جدول1 و جدول2 .
در جدول 1 دو تا فیلد داریم. فیلد شماره دانشجویی (S_Num) و فیلد نام دانشجو (Name).
در جدول 2 هم سه تا فیلد داریم. فیلد شماره دانشجویی (S_Num) و نام درس ( Study ) و نمره ( Grade).
برای بازیابی نمرات هر دانشجو از این دو جدول باید کدی مثل کد زیر نوشته بشه:
کد:SELECT Table1.S_Num , Table1.Name , Table2.Grade
FROM Table1
INNER JOIN Table2 ON Table2.S_Num = Table1.S_Num
2- تلفیق Natural
این هم تساوی فیلدها رو بررسی میکنه اما ...
اما فقط رکوردهای غیر تکراری بازیابی خواهند شد. باید به جای علامت تساوی ، علامت <> قرار دهیم.
کد:SELECT Table1.S_Num , Table1.Name , Table2.Grade
FROM Table1
کد:
INNER JOIN Table2 ON Table2.S_Num <> Table1.S_Num
3- تلفیق Cross Join
تمام رکوردهای جدولها بازیابی خواهند شد.
کد:SELECT Table1.S_Num , Table1.Name , Table2.Grade
FROM Table1
CROSS JOIN Table2
4- تلفیق Outer Join
تمام فیلدهای یک جدول و بخشی از فیلدهای جدول دیگر را بازیابی میکند. و سه نوع دارد:
Left Outer Join = بازیابی تمام رکوردهای جدول اول و رکوردهایی از جدول دوم که با جدول اول سازگارند.
Right Outer Join = بازیابی تمام رکوردهای جدول دوم و رکوردهایی از جدول اول که با جدول دوم سازگارند.
Full Outer Join = بازیابی تمام رکوردهای سازگار جدول اول و دوم.
مثال:
کد:SELECT Table1.S_Num , Table1.Name , Table2.Grade
FROM Table1
LEFT OUTER JOIN Table2 ON Table2.S_Num = Table1.S_Num
5- تلفیق Self Join
جدول رو با خودش تلفیق میکنه. به چه دردی میخوره؟ خب ، معمولا برای پیدا کردن رکوردهای تکراری یک جدول بکار میره. ( نقطه مقابل دستور DISTINCT - که در پست قبل توضیح دادم) . در این الحاق حتما باید از نامهای مستعار استفاده کرد. ( یعنی جدول رو به دو جدول مستعار تقسیم کرد )
مثلا در مثال بالا ( دیتابیس فرضی ) میخواهیم نمرات یک یا چند دانشجو رو با شماره دانشجویی مشخص بازیابی کنیم. خب میدونیم که شماره دانشجویی برای هر دانشجو یکتا هست و نمرات هم در جدول دوم بر اساس شماره دانشجویی وارد شده است . پس:
کد:SELECT NickTab1.S_Num , NickTab1.Grade
FROM Table2 NickTab1
INNER JOIN Table2 NickTab2 ON NickTab1.S_Num = NickTab2.S_Num
سلام ممنون دوست عزيز واقعا زحمت كشيدي دستت درد نكنه.نقل قول:
سلام
با تشكر
من دو تا جدول دارم كه در جدول يك عدد 1000 سه بار تكرار شده و در جدول شماره دو ، عدد 1000 يكبار تكرار شده . من قصد دارم اعداد جدول يك با جدول دو با هم كنترل و در خروجي عدد 1000 را دو بار نشان دهد .
لطفاً كمكم كنيد