PDA

View Full Version : اظهار نظر در مورد یک سوال پایگاه داده(Query) کارشناسی ارشد 86



Microsoft.net
چهارشنبه 12 اردیبهشت 1386, 15:40 عصر
با سلام یه سوال خیلی ساده که جوابش توی کلید برام عجیب بود رو مینویسم ، لطفا نظرتونو بگین در موردش

سوال : با فرض اینکه تیبل S متعلق به مشخصات تولید کنندگان هست و تیبل SP شامل کلید اصلی تولید کننده و کلید اصلی قطعه تولید شده هست خروجی کویری زیر چیست ؟
Select s.sname from s where s.s# in (select sp.s# from sp
where sp.p# = 'p2

1) اسامی تولید کنندگان که قطعه p2 را تهیه میکنند(احتمالا با تکرار)
2) اسامی تولید کنندگان که قطعه p2 را تهیه میکنند(بدون تکرار)
3)اسامی تولید کنندگانی که فقط قطعه p2 رو تهیه میکنند
4)اسامی تولید کنندگانی که علاوه بر قطعه p2 قطعه دیگری نیز تولید میکنند

جواب کلید گزینه 1 هست ولی به نظر من که گزینه 2 درسته ؟!!

AminSobati
چهارشنبه 12 اردیبهشت 1386, 19:42 عصر
سوال : با فرض اینکه تیبل S متعلق به مشخصات تولید کنندگان هست و تیبل SP شامل کلید اصلی تولید کننده و کلید اصلی قطعه تولید شده هست خروجی کویری زیر چیست ؟


محسن جان باور کن این جمله رو حداقل 10 بار خوندم ولی نگرفتم! ضمنا علامت # اینجا نقشش چیه؟

آرام جان گل
چهارشنبه 12 اردیبهشت 1386, 20:18 عصر
سلام
ببخشید
ولی من فکر می کنم که این کویری در حقیقت نام تولید کنندگانی را میده که آی دی اونها جزء تولید کنندگان قطعه p2 نباشه
چون در کویری ما عبارت not داریم

یعنی نام تولید کنندگانی را بده که ای دی اونا در کویری داخل پرانتز نباشه
و داخل پرانتز هم تولید کنندگان p2 را داریم

یعنی اشتباه می گم؟
:متفکر:

Microsoft.net
پنج شنبه 13 اردیبهشت 1386, 00:29 صبح
در کتابهای پایگاه داده 3 تا تیبل معروف هست که همه مثالها و تست ها از اون طراحی میشه تیبل S که شامل فیلدهای Sname و S# (کلید اصلی) که متعلق به مشخصات تولید کنندگان هست- تیبل P شامل فیلد Pname (نام قطعه) و P# (کلید اصلی) - و تیبل قطعات تولید شده توسط تولید کننده ها شامل فیلد P# (کلید خارجی به قطعه مورد نظر) و S#(کلید خارجی به تولید کننده مورد نظر) و QTY (تعداد تولید شده از اون نوع)
امین جان منظور از # کلید اصلی هست که تو بعضی کتابهای تئوریک به صورت سمبولیک میاد هرچند که توی Sql غیر مجاز هست

AminSobati
پنج شنبه 13 اردیبهشت 1386, 02:08 صبح
محسن جان این Query یعنی:
اسم تولید کنندگانی که تا به حال اصلا قطعه p2 رو تولید نکرده اند.

اما چنین چیزی یا حتی شبیهش در جوابها نیست! اما اگر NOT رو برداری موضوع خیلی عوض میشه.

Developer Programmer
پنج شنبه 13 اردیبهشت 1386, 09:31 صبح
الهی من فدات بشم محسن جونم.
من هم گزینه دو رو زده بودم چون با توجه به نرمال سازی، امکان نداره "تکرار" در کار باشه.

معنی نداره شما یکبار بگین s1 قطعه p2 تولید میکنه و باردیگه دوباره بگید s1 قطعه p2 تولید میکنه. (اینکار زمانی معنی داره که جدول sp فیلدهای دیگه ای مثل وزن و رنگ رو هم داشته باشه )


Select S.sname from S where S.s# in (select SP.s# from SP where SP.p# = 'p2')

AminSobati
پنج شنبه 13 اردیبهشت 1386, 10:35 صبح
من فدای هر دوتای شما! بفرمایید به چه نحوی به گزینه 2 رسیدین!!

Developer Programmer
پنج شنبه 13 اردیبهشت 1386, 10:49 صبح
من فدای هر دوتای شما! بفرمایید به چه نحوی به گزینه 2 رسیدین!!محسن اشتباه نوشته بود... اصلاح کردم.
رجوع شود به پست قبلی.

جدول s: (تولید کننده)
s# کد تولیدکننده
sname نام تولیدکننده
city

جدول p : ( قطعات)
p# کد قطعه
color
weight

جدول sp:
s# کد تولید کننده
p# کد قطعه
qty - تعداد

AminSobati
پنج شنبه 13 اردیبهشت 1386, 11:02 صبح
حالا شد! اگر منظور سوال از "تکرار"، تکرار sname باشه، این Query تکرار نخواهد داشت، پس گزینه 2 درسته

Developer Programmer
پنج شنبه 13 اردیبهشت 1386, 11:15 صبح
من فدای اون دو تا چشم قشنگت بشم امین جان.

Microsoft.net
پنج شنبه 13 اردیبهشت 1386, 13:53 عصر
امین خان میبینید استادها و طراح های سوال ما کیا هستند !! یه کویری ساده رو طرف نمی تونه حل کنه اسم خودشم گذاشته استاد و طراح سوال ! اونم تو مقطع مهمی مثل کارشناسی ارشد !! حالا بیا و با 1000 امید و آرزو هی درس بخون...

راستی کویری رو اصلاح کردم یه not اضافه گذاشته بودم اشتباه تایپی بود

AminSobati
پنج شنبه 13 اردیبهشت 1386, 14:12 عصر
حالا این جزو خوباشه! ;)

hmm
جمعه 14 اردیبهشت 1386, 11:36 صبح
به نظرم سوال مشکلی نداشت
یه sub query ساده بود.
درکتابهای پایگاه داده برای اینکه نشان دهند کدام فیلد کلید است جلوی آن # میگذارند.

AminSobati
جمعه 14 اردیبهشت 1386, 12:57 عصر
به نظرم سوال مشکلی نداشت
یه sub query ساده بود.
درکتابهای پایگاه داده برای اینکه نشان دهند کدام فیلد کلید است جلوی آن # میگذارند.

البته سوال اشتباه تایپی داشت در تاپیک که اصلاح شد. اما اشکال سوال در پاسخ کلید (نظر طراح سوال) بود

someCoder
جمعه 14 اردیبهشت 1386, 22:40 عصر
امین خان میبینید استادها و طراح های سوال ما کیا هستند !! یه کویری ساده رو طرف نمی تونه حل کنه اسم خودشم گذاشته استاد و طراح سوال !اگر بخوایم منصفانه برخورد کنیم، این میتونه یه اشتباه تایپی تو پاسخنامه باشه.
اما بگردی، سوالهایی هم پیدا میشه که واقعا ضایع هستن و هیچ جور نمیشه توجیهشون کرد. مثل یکی از سوالهای 85 که آخر گفتن 3 تا گزینه درست داره و هرکس هرکدومش رو زده درسته!!!

hmm
شنبه 15 اردیبهشت 1386, 13:07 عصر
مثل یکی از سوالهای 85 که آخر گفتن 3 تا گزینه درست داره و هرکس هرکدومش رو زده درسته!!!چه امتحان سختی میشه از 4 تا سوال 3 تاش درست باشه!!!

someCoder
شنبه 15 اردیبهشت 1386, 13:58 عصر
چه امتحان سختی میشه از 4 تا سوال 3 تاش درست باشه!!!

باور کن خیلی سخت بود! چون مثلا من میدونستم هر 3 تاش درسته، اما از ترس نمره منفی هیچ کدوم رو نزده بودم

Developer Programmer
شنبه 15 اردیبهشت 1386, 14:15 عصر
چه امتحان سختی میشه از 4 تا سوال 3 تاش درست باشه!!!
تنها این سئوال نبود، چندین سئوال غلط دیگه هم داشت. هم امسال هم پارسال....
پارسال که آزمایشی شرکت کردم اما امسال توی خونه 6 ماه زندونی بودم....
تصور کن وقتی با تمام وجود درس بخونی و به یه سئوال ساده بر بخوری که اشتباه باشه و تو هرچی زور بزنی نتونی به جواب برسی... کلی وقتت تلف بشه....چه حالی بهت دست میده.؟..
نتیجه اخلاقی این که به طرز فجیعی(!) خودم رو باختم حتی ساده ترین مسائل هم یادم نمی اومد...

جمع بندی این که : این فکر که سئوال های سراسری راحت هستن رو حتما از سرت بیرون کن (!!)

whitehat
یک شنبه 16 اردیبهشت 1386, 08:58 صبح
Select s.sname from s where s.s# in (select sp.s# from sp here sp.p# = 'p2
سوالی که برای من پیش آمده اینه که چرا گزینه 1 غلط است ؟
من Distinctی نمی بینم که مسئله تکرار نداشته باشه! مشابه این سوال فکر کنم در کنکور دوسال پیش هم بود و نکته سوال عدم استفاده از Distinct بود

مهدی نان شکری
یک شنبه 16 اردیبهشت 1386, 10:01 صبح
در مورد این سوال درسته که ما s# رو کلید در نظر گرفتیم ولی ممکنه دو تا تولید کننده در بانک باشن که نام های یکسانی داشته باشند و هر دو تا شون هم مثلا کالای P1 رو تولید کنن. در این صورت گزینه 2 آیا درست خواهد بود یا گزینه 1 درسته؟
دوما ممکنه این دستور رکورد هایی رو نمایش بده که علاوه بر کالای P1 کالای دیگه ای هم تولید می کنن. مثلا S1 کالای P1 و p2 رو تولید می کنه و در این لیست ظاهر خواهد شد.
لااقل این طوری بگم اگه من تو این آزمون بودم شاید بیخیال می شدم و یا شانسی یکی رو می زدم. خدا به دادتون برسه

AminSobati
یک شنبه 16 اردیبهشت 1386, 10:05 صبح
Select s.sname from s where s.s# in (select sp.s# from sp here sp.p# = 'p2
سوالی که برای من پیش آمده اینه که چرا گزینه 1 غلط است ؟
من Distinctی نمی بینم که مسئله تکرار نداشته باشه! مشابه این سوال فکر کنم در کنکور دوسال پیش هم بود و نکته سوال عدم استفاده از Distinct بود

اگر Join داشته باشیم، بدون Distinct تکرار خواهیم داشت. در مثال زیر، Query اول و دوم تکرار ندارند ولی سومی داره:


use northwind
go

select * from customers where customerid in
(select customerid from orders where shipcountry='uk')

select * from customers where exists
(select * from orders where customerid=customers.customerid and shipcountry='uk')

select * from customers join orders
on customers.customerid=orders.customerid
where orders.shipcountry='uk'

Developer Programmer
یک شنبه 16 اردیبهشت 1386, 10:59 صبح
ولی ممکنه دو تا تولید کننده در بانک باشن که نام های یکسانی داشته باشند
ببین، معمولا ما نمیآیم. فقط اسم و فامیل رو ذخیره کنیم؛ بلکه از مواردی مثل شماره ملی هم استفاده میکنیم...
(اگه اینکار رو نکنی بلایی که سرمن اومد سر تو هم میاد!! یعنی یکبار که واسه یه مسافرت از مرز خارج میشدیم، یقه من رو گرفتن که ممنوع الخروجی! تا اینکه فرداش استعلام کردن و دیدن که فقط تشابه اسمی بوده!)
ضمن اینکه اصلا جالب نیست بنویسم آقای بهرامی شامپو ملایم تولید میکنه؛ بهتره به حاش بنویسیم شرکت پاکسان شامپو ملایم تولید میکنه. این یعنی اینکه تقریبا ممکن نیست اسم تکراری داشته باشی

من Distinctی نمی بینم که مسئله تکرار نداشته باشه!
به نظر من یکی اینکه ساختار جدول طوریه که دوبار نمیگه فلانی p2 تولید میکنه
ضمن اینکه تصور میکنم در مجموعه تکرار بی معنیه

Microsoft.net
یک شنبه 16 اردیبهشت 1386, 20:26 عصر
میگم حالا کسی به این سوال اعتراض کرده یا نه ؟! من که همین چند روز پیش بهش برخوردم و حدس زدم که مورد داره