PDA

View Full Version : Read my online article and vote it



AminSobati
پنج شنبه 02 شهریور 1385, 11:33 صبح
سلام به همه دوستان عزیز،
این یک مقاله هستش که امیدوارم مطلبش مورد توجهتون قرار بگیره:
http://www.sqlservercentral.com/columnists/asobati/2561.asp
ولی مایلم دوستان هموطن هم نظر بدن و بصورت فارسی در اینجا خودمون بحث کنیم...

AminSobati
شنبه 04 شهریور 1385, 20:41 عصر
سلام حمید جان،
قید کردن ستون امتحانها در فهرست Select تاثیری روی عملکرد Join نداره عزیزم. نمیدونم منظور شما رو درست متوجه شدم یا نه...

hmm
یک شنبه 05 شهریور 1385, 07:35 صبح
عالی بود امین خان
از offام معذرت میخوام

حمیدرضاصادقیان
یک شنبه 05 شهریور 1385, 08:13 صبح
سلام.استاد من اشتباه نوشته بودم ببخشید.
حالا یک سوال . با outerjoin مشکلی که هست اینه که jack که امتحان xml رو داده برای ما نمایش نمیده در صورتی که ما میخوایم فقط کسانی که Sql دادند نمایش داده نشوند.برای این مورد باید چیکار کرد؟

odiseh
یک شنبه 05 شهریور 1385, 09:07 صبح
سلام

بسیار عالی و مفید بود ....

odiseh
یک شنبه 05 شهریور 1385, 13:25 عصر
آقای ثباتی سلام
لطفا اگه برایتان ممکنه باز هم از این جور مقاله های آموزشی ایجاد کرده و به اعضاء سایت معرفی کنید بسیار آموزنده اند.

با تشکر فراوان و آرزوی توفیق روز افزون

AminSobati
دوشنبه 06 شهریور 1385, 23:15 عصر
از توجه همه دوستان عزیزم قدردانی میکنم!...


سلام.استاد من اشتباه نوشته بودم ببخشید.
حالا یک سوال . با outerjoin مشکلی که هست اینه که jack که امتحان xml رو داده برای ما نمایش نمیده در صورتی که ما میخوایم فقط کسانی که Sql دادند نمایش داده نشوند.برای این مورد باید چیکار کرد؟

حمید رضا جان صورت مسئله رو واضح تر توضیح بدین لطفا. اگر همه امتحانات غیر از SQL رو بخوایم:


SELECT s.*, se.* FROM Students s
JOIN StudentExam se
ON s.StID=se.StID
WHERE se.ExamName<>'SQL Server'

حمیدرضاصادقیان
سه شنبه 07 شهریور 1385, 10:29 صبح
سلام ممنون استاد. لطف میکنین یک توضیح کلی خودتون بفرمایید در باره این متن

tayebeh
چهارشنبه 08 شهریور 1385, 11:53 صبح
با سلام

فرض کنید دو جدول داشته باشیم که یکی مشخصات دانشجو و دیگری درسهای گرفته شده توسط هریک از آنها باشد . بطور مثال :

نام -----شماره دانشجویی
جک ----- 1
آنا ------2
باب -----3

شماره دانشجویی ------- نام درس
Sqlserver--------------------1
2---------------------vb.net
2---------------------c#.net
1----------------------xml

خوب حالا مسئله اینجاست که اگر بخواهیم ، لیست کسانی را که sqlserver نداشته اند ، را بدست بیاوریم چیکار کنیم ؟
جواب :

SELECT s.* FROM Students s
JOIN StudentExam se
ON s.StID=se.StID
WHERE se.ExamName<>'SQL Server'

اگر بخواهیم از این کوئری استفاده کنیم ، مطمئنا به جواب نمی رسیم . چرا ؟

چون وقتی ما از join برای دو جدول استفاده می کنیم در واقع رکوردهای ما بصورت زیر نمایش داده می شوند .

نام -----------شماره دانشجویی ------- شماره دانشجویی -----------نام درس
جک--------------1-----------------------------1---------------------------sqlserver
آنا---------------2-----------------------------2--------------------------vb.net
آنا---------------2-----------------------------2--------------------------c#.net
جک-------------1-----------------------------1--------------------------xml

خوب حالا از رکوردهای بالا ، می خواهیم کسانی را که sqlserver نداشته اند ، پیدا کنیم . خوب نتیجه این می شود :

آنا
آنا
جک

اگر دقت کنیم می بینیم که با اینکه جک sqlserver گذرانده ،‌ولی دوباره اسمش ظاهر می شود . چونکه در رکورد چهارم از join جک ، xml دارد . به همین خاطر نباید از کوئری بالا استفاده کرد و همانطور که در ادامه مقاله آمده باید از این کوئری استفاده کنیم :

SELECT s.* FROM Students s LEFT JOIN
(SELECT StID FROM StudentExam WHERE ExamName='SQL Server') se
ON s.StID=se.StID
WHERE se.StID IS NULL

با تشکر از آقای ثباتی که این نکات ظریف رو به ما گوشزد می کنند.
بای