PDA

View Full Version : سوال در مورد دستور SQL



emad_67
جمعه 13 مهر 1386, 12:09 عصر
سلام
من دستور select رو به این شکل نوشتم


"SELECT au_lname,au_fname FROM authors " +
"WHERE au_lname LIKE 'B*' ";

مشکل اصلی هم قست WHERE هست. با اینکه توی دیتابیس نام هایی هست که با حرف B شروع بشه ولی وقتی برنامه رو اجرا میکنم هیچی نشون داده نمیشه. میخواستم ببینم این دستوری که نوشتم درسته؟

ghafoori
جمعه 13 مهر 1386, 13:34 عصر
دوست عزیز بجای * از % استفاده کنید

emad_67
جمعه 13 مهر 1386, 14:28 عصر
با تشکر
یه سوال دیگه هم برام پیش اومد
میخوام بدونم مثلا وقتی مینویسن که داده ها براساس دو فیلد مرتب بشه یعنی چی؟
مثل این


"SELECT au_lname,au_fname FROM authors " +
"ORDER BY au_lname,au_fname";

مثلا تو این باید داده ها بر اساس فیلد های au_lname و au_fname مرتب بشن ولی در واقع وقتی برنامه رو اجرا میکنم هیچ فرقی با این کد نمیکنه


"SELECT au_lname,au_fname FROM authors " +
"ORDER BY au_lname";

قاعدتا هم باید همین جوری باشه آخه معنی نداره که داده ها رو بخوایم بر اساس دو فیلد مرتب کنیم چون اینجوری هر کدوم رو که بریم مرتب کنیم اون یکی به هم میخوره
ولی پس چرا بعضی جاها اینجوری مینویسن؟

hdv212
جمعه 13 مهر 1386, 19:46 عصر
خب چرا دیگه، وقتی مینویسی

ORDER BY au_lname,au_fname
ابتدا رکوردها بر اساس فیلد au_lname مرتب سازی میشن، بعد از این مرحله، دوباره رکوردهایی که براساس au_lname مرتب سازی شده بودن، براساس فیلد دوم هم مرتب سازی میشن، به این مثال دقت کن با فرض اینکه ID,au_lname,au_fname سه فیلد از یه جدول هستن، نحوه مرتب سازیشون رو ببین :

ID - au_lname - au_fname
1 - def - hij
2 - abc - mno
3 - abc - def

Order By au_lname :
2 - abc - mno
3 - abc - def
1 - def - hij

ORDER BY au_lname,au_fname :
3 - abc - def
2 - abc - mno
1 - def - hij

emad_67
جمعه 13 مهر 1386, 20:55 عصر
آقا شرمنده من بازم متوجه نشدم :لبخند:
مگه شما نمیگید که ابتدا بر اساس lname مرتب میشه و بعد رکورد های مرتب شده مجددا بر اساس fname مرتب میشه؟
پس چرا تو حالت سوم به این صورت شده


ORDER BY au_lname,au_fname :
3 - abc - def
2 - abc - mno
1 - def - hij

الان اینجوری که بر اساس fname مرتب نیست.
نباید اینجوری بشه ؟


ORDER BY au_lname,au_fname :
3 - abc - def
1 - def - hij
2 - abc - mno

someCoder
جمعه 13 مهر 1386, 21:02 عصر
فقط در صورتی که مشخصه اول برابر بود، مشخصه دوم بررسی میشه.
مثال بهتر اینه که جدول لیگ فوتبال رو میخوای مرتب کنی و مثلا میگی بر اساس امتیاز + تفاضل گل
این یعنی اینکه مرتب سازی بر اساس امتیاز هست و اگر مساوی بود امتیاز دو تیم، تفاضل گلشون بررسی بشه

hdv212
جمعه 13 مهر 1386, 21:37 عصر
فقط در صورتی که مشخصه اول برابر بود، مشخصه دوم بررسی میشه.
دقیقا همینی هست که دوستمون گفت، ببین اگه فرض کنیم مرتب سازی به صورت صعودی انجام میگیره، بین رکورد اول و دوم فیلد lname که یکی هست، هیچکدوم بر دیگری ارجحیت نداره، ولی فیلد fname این دو رکورد با هم متفاوت هست و فیلد fname رکورد اول از فیلد fname رکورد دوم کوچیکتره، پس باید جابجا بشن که در اینجا شدن.