بهار آموزش با تخفیف های شگفت انگیز توسینسو بهار آموزش با تخفیف های شگفت انگیز توسینسو
مانده تا پایان تخفیف
مشاهده دوره ها
0

کوئری زدن روی چند جدول

با سلام و احترام خدمت دوستان

چند تا جدول دارم که برای کوئری زدن نیاز به راهنمایی دوستان دارم.

4 جدول به نام های t1 و t2 و t3 و t4 داریم که هرکدام دارای یک کلید اصلی هست

کلید اصلی این 4 جدول را در یک جدول دیگری به نام tablekeys ذخیره می کنیم

برای ذخیره سازی اطلاعات هیچ مشکلی نیست.

قسمت مورد سوال در جستجو هست:

برای هرکدام از 4 جدول بتوانم یک شرط اعمال کنم(دستور where برای هرکدام از جدول های t1 تا t4 داشته باشم)

فرضا جدول t1 مشخصات فردی(اسم - سن - جنسیت)

جدول t2 مشخصات تحصیلی ( رشته تحصیلی - مقطع - معدل )

جدول t3 سابقه کار(مدت زمان سابقه - دوره تدریس شده)

جدول t4 مشخصات خانواده تحت پوشش(نام فرزند- تاریخ تولد)

که هر جدول دارای یک کلید اصلی است و برای هر "فرد" کلیدهای اصلی اطلاعاتش از جداول چهارگانه در جدول tablekeys ذخیره شده

حال می خواهم کوئری بزنم که افرادی که دارای اسم "حسین" و معدل بالای 18 و مدت سابقه بالای 4 سال و تعداد فرندان کمتر از 3 باشند را برایم انتخاب کند.

لطفا راهنمایی کنید

پیشاپیش تشکر می کنم.

در ضمن از sql server 2008 استفاده می کنم.

پرسیده شده در 1395/03/11 توسط

6 پاسخ

0

سلام مجدد

دوست عزیز prober

از شما ممنون بابت اینکه با دقت سوال بنده رو مطالعه کردید

ایراداتی که براتون پیش اومده بود را رفع کردم(تا جایی که متوجه شدم)

دوست عزیز monafallah

می شه لطفا با یک لینک از join روی 4 جدول و یا با یک مثال بنده رو راهنمایی کنید(متاسفانه آشنایی چندانی با دستور join ندارم)

با سپاس فراوان

پاسخ در 1395/03/11 توسط
0

دوست عزیز شما تا دقیقا فیلدهای جدول هات رو مشخص نکنی نمیتونی کوئری بنویسی. برای مثال شما در جدول t3 گفتی مدت زمان سابقه و دوره های تدریس شده. فیلدی با عنوان دوره های تدریس شده چه معنی داره آیا منظور شما اینه که عنوان فیلد باشه دوره (نه دوره ها) تدریس شده که بعد رکوردهای جدول t3 شامل هر تعداد دوره که افراد مختلف دارند باشه و یا می تونه منظور شما فیلدی با عنوان «تعداد دوره های تدریس شده» باشه که فقط حاوی یک عدد به ازای هر فرد خواهد بود. پس دقیق مشخص کنید . همین مسئله در مورد جدول t4 هم برای فیلد تعداد فرزندان هست که با توجه به اینکه میخواین تولد هر فرزند نیز در جدول درج بشه پس اصولا عنوان فیلد شما باید چیزی مثلا با عنوان «نام فرزند» باشه نه تعداد فرزندان. کلا دسته بندی اطلاعاتتون توی این 4 جدول مشکل داره و همینطور عناوین فیلدها.

جداکردن اطلاعات تحصیلی یک فرد از مشخصات فردی زمانی منطقی هست که قرار باشه تمام دوره های تحصیلی فرد به همراه معدل هر دوره در جدول بیاد اما اگه قرار باشه که فرض بر این باشه که یک نفر آدم فقط قراره یک رشته تحصیلی و یک معدل واسش وارد دیتابیس بشه که معنی نداره یه جدول مجزا. چون کوئری هاتون بیخودی پیچیده میشه و همینطور دچار افزونگی داده (فیلد ID به عنوان کلیدخارجی در جدول دوم) خواهد شد. و اما اگه قرار باشه هر نفر چندین رشته و معدل واسش درج بشه خوب منطقی هست که جدول 2 وجود داشته باشه اما این با کوئری نهایی شما یه خرده تناقض داره چون توی کوئری اصلا نگفته چه رشته ای چه دوره تحصیلی ای و فقط گفته معدل . میشه نه که نشه اما معنی جالبی نمیده.

پاسخ در 1395/03/11 توسط
0

با سلام

شما میتونید این 4 جدول رو با استفاده از جدول tablekeys , join کنید و در where شرایط را اعمال کنید

پاسخ در 1395/03/11 توسط
0

با سلام خدمت شما دوست عزیز

راه حل سوال بالا جوابش این میشه البته به شرطی که در جدول t4 یک فیلد تعداد فرزندان کنید و در جدول tableKeys تمامی جداول به آن relation داشته باشن و داخل جداولتون داده وارد کرده باشین

اگر این شرایط رو اجرا کنین و در یک newquery دستور زیر را وارد کنید بهتون خروجی میده

SELECT t1.name, t2.moadel, t3.modatzaman, t4.tedadFarzandan

FROM t1 INNER JOIN

TableKeys ON t1.id = TableKeys.idT1 INNER JOIN

t2 ON TableKeys.idT2 = t2.id INNER JOIN

t3 ON TableKeys.idT3 = t3.id INNER JOIN

t4 ON TableKeys.idT4 = t4.id

where t1.name LIKE N 'hosein' AND t2.moadel>18 AND t3.modatzaman>4 AND t4.tedadFarzandan<3

پاسخ در 1395/03/16 توسط
0

اساتید عزیز لطفا یه عنایتی بفرمایید.

با تشکر

پاسخ در 1395/03/13 توسط

پاسخ شما