PDA

View Full Version : گرفتن کوئری از یک جدول



OMID_BNT
پنج شنبه 24 مرداد 1392, 23:38 عصر
سلام خسته نباشید (فکر میکنم عنوان نامناسب باشه)
تصویر گویای سوالم هست

109153
لطفا اگر نیاز است رابطه ای بین جداول برقرار بشه اونم توضیح بدهید

لینک تصویر http://bia2delroba.persiangig.com/sql.png (http://bia2delroba.persiangig.com/sql.png)

کینک کمکی تصویر http://uploadpic.ir/images/sql.png (http://uploadpic.ir/images/sql.png)

لینک کمکی دو تصویر http://www.uplooder.net/img/image/98/bd92ca8f9755a116b7e71050821b470e (http://www.uplooder.net/img/image/98/bd92ca8f9755a116b7e71050821b470e/sql.png)/sql.png (http://www.uplooder.net/img/image/98/bd92ca8f9755a116b7e71050821b470e/sql.png)





فکر میکنم عکس ضمیمه شده گویا همه چی هست
ما 3 جدول داریم که در انها نام و کد هر نام وجود دارد یک جدول چهارمی داریم که بر اساس سه جدول قبل پر میشود فقط با کد

حالا ما یه کوئری میخوایم فقط از جدول 4 بگییریم و بااون جدول 5 رو ایجاد کنیم
مهمترین بخش گرفتن کوئری است

جدول 5 رو میخوام داخله یک دیتاگرید ویو تو سی شارپ نمایش بدم

f_naderi
جمعه 25 مرداد 1392, 00:38 صبح
سلام
نمی دونم منظورتونو درست متوجه شدم یا نه.
کلید اصلی: در جداول 1 تا 3 ، کدهای اختصاص داده شده کلید اصلی هر جدول هستند.
در جدول 4 هر سه کد ، کلید اصلی هستند(کلید ترکیبی)
Select name_s,name_l,name_t,nomre from teacher,lesson,student,register where nomre>15 and teacher.code_t=register.code_t and lesson.code_l=register.code_l and student.code_s=register.code_s

sajadsobh
جمعه 25 مرداد 1392, 00:47 صبح
واسه هر کدوم از جدول های teacher, student, lesson, register باید یه فیلد ID داشته باشی که کلید اصلی باشه. بعدش باید کلیدهای اصلی هر کدوم از جدول های teacher, student, lesson در جدول register بعنوان کلید خارجی قرار بدی که نتیجه اش میشه این:

http://uploadpic.ir/images/diagram.jpg

واسه اون query هم که گفتی بهتره یه view درست کنی که با این query ساخته میشه:


SELECT Students.StudentName, Lessons.LessonName, Teachers.TeacherName, Register.Grade
FROM Lessons INNER JOIN
Register ON Lessons.ID = Register.Lesson_ID INNER JOIN
Students ON Register.Student_ID = Students.ID INNER JOIN
Teachers ON Register.Teacher_ID = Teachers.ID
WHERE (Register.Grade >= 15)

OMID_BNT
جمعه 25 مرداد 1392, 14:07 عصر
سلام با تشکر فراوان
ممکن هست کد رو یه توضیح هم بدید

sajadsobh
جمعه 25 مرداد 1392, 22:07 عصر
خب اول از همه اینکه باید جستجو رو روی جدول Register انجام بدی و چون این جدول فقط شامل ID های جدول دیگه ست پس باید یه جور پیوند بین این جدول و جدول های دیگه برقرار کنی. از عبارت INNER JOIN برای برقراری پیوند بین جدول ها استفاده میکنیم که در قسمت FROM از دستور SELECT می نویسیم.
حالا ما فیلدهایی که میخوایم ایناست: نام دانش آموز از جدول Students، نام درس از جدول Lessons، نام استاد از جدول Teachers و نمره که از همین جدول Register هستش.
پس دستور SELECT رو اینجوری می نویسیم:

SELECT Students.StudentName, Lessons.LessonName, Teachers.TeacherName, Register.Grade

الان یعنی ما اون فیلدها که میخواستیم رو دروخواست کردیم.
حالا چون باید مشخص بشه که این فیلدها از کدوم جدول ها هست. پس باید بین اونها پیوند برقرار کنیم و در ضمن باید بدونی که برای یک پیوند باید یه چیز مشترک بین جدولها وجود داشته باشه که اونم کلیدهای خارجی هستند. در جدول Register سه تا کلید خارجی وجود داره که همون Student_ID، Lesson_ID، Teacher_ID هستند. حالا باید بین این چند تا جدول پیوند برقرار بشه. برای اینکه بین جدول Register و Student ارتباط برقرار بشه اینو می نویسیم:

FROM Register INNER JOIN Students ON Register.Student_ID = Sudents.ID

چون Student_ID کلید خارجی تو جدول Register هستش و همون مقدار ID در جدول Sudents رو داره پس باید Register.Student_ID=Sudents.ID رو بکار ببریم.

حالا میخوایم ادامه بدیم و این جدول رو به Lessons وصل کنیم، پس در ادامه می نویسیم:

INNER JOIN Lessons ON Lessons.ID = Register.Lesson_ID

و به همین صورت جدول Teacher رو به Register پیوند میدیم.

INNER JOIN Teachers ON Teacher.ID = Register.Teacher_ID

در آخر هم چون باید فقط اونا که 15 به بالا گرفتند رو نشون بده از شرط WHERE (Register.Grade >= 15) استفاده می کنیم. اگه 15 رو میخوایم نشون نده باید علامت = رو بردارید.