50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

دستورات JOIN در SQL

سلام خدمت همه دوستان

یه مشکل من دارم وقتی که در حالت دیزاین میخوام دوتا جدول رو باهم relationship بدم درست عمل نمیکنم خواستم عیب کارم رو بهم بگید

من دو تا جدول course و student دارم

سلام خدمت همه دوستان
یه مشکل من دارم وقتی که در حالت دیزاین میخوام دوتا جدول رو باهم relationship بدم درست عمل نمیکنم خواستم عیب کارم رو بهم بگید
من دو تا جدول course  و student دارم

||https://tosinso.com/files/get/0243f4ba-fded-4d82-a6de-fbe39128792a||

||https://tosinso.com/files/get/ca8df3fe-796b-4517-9ff9-71f35349459d||

وقتی میرم رو حالت relationship نمیتونم ارتباط بدم.
یعنی برام در قسمت primary key table و foreign key table فقط یه جدول course رو برام میاره در صورتی که در primary key باید جدول course و در قسمت foreign key باید جدول student رو بیاره که اینطور نیست

||https://tosinso.com/files/get/259436f1-40cb-4e51-ae2e-9024da99f197||

نمیدونم مشکل من از چیه
لطفا منو راهنمایی کنید

سلام خدمت همه دوستان
یه مشکل من دارم وقتی که در حالت دیزاین میخوام دوتا جدول رو باهم relationship بدم درست عمل نمیکنم خواستم عیب کارم رو بهم بگید
من دو تا جدول course  و student دارم

||https://tosinso.com/files/get/0243f4ba-fded-4d82-a6de-fbe39128792a||

||https://tosinso.com/files/get/ca8df3fe-796b-4517-9ff9-71f35349459d||

وقتی میرم رو حالت relationship نمیتونم ارتباط بدم.
یعنی برام در قسمت primary key table و foreign key table فقط یه جدول course رو برام میاره در صورتی که در primary key باید جدول course و در قسمت foreign key باید جدول student رو بیاره که اینطور نیست

||https://tosinso.com/files/get/259436f1-40cb-4e51-ae2e-9024da99f197||

نمیدونم مشکل من از چیه
لطفا منو راهنمایی کنید

وقتی میرم رو حالت relationship نمیتونم ارتباط بدم.

یعنی برام در قسمت primary key table و foreign key table فقط یه جدول course رو برام میاره در صورتی که در primary key باید جدول course و در قسمت foreign key باید جدول student رو بیاره که اینطور نیست

سلام خدمت همه دوستان
یه مشکل من دارم وقتی که در حالت دیزاین میخوام دوتا جدول رو باهم relationship بدم درست عمل نمیکنم خواستم عیب کارم رو بهم بگید
من دو تا جدول course  و student دارم

||https://tosinso.com/files/get/0243f4ba-fded-4d82-a6de-fbe39128792a||

||https://tosinso.com/files/get/ca8df3fe-796b-4517-9ff9-71f35349459d||

وقتی میرم رو حالت relationship نمیتونم ارتباط بدم.
یعنی برام در قسمت primary key table و foreign key table فقط یه جدول course رو برام میاره در صورتی که در primary key باید جدول course و در قسمت foreign key باید جدول student رو بیاره که اینطور نیست

||https://tosinso.com/files/get/259436f1-40cb-4e51-ae2e-9024da99f197||

نمیدونم مشکل من از چیه
لطفا منو راهنمایی کنید

نمیدونم مشکل من از چیه

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

پرسیده شده در 1396/04/11 توسط

9 پاسخ

1

Inner Join : در این روش سطرهایی نمایش داده می شوند که در هر دو جدولی که با هم Join شده اند وجود دارند. فرض کنید که دو جدول به نام course و student داریم و می خواهیم برای هر course ، student آنرا تعیین کنیم. در اینصورت از Inner Join بصورت زیر استفاده می کنیم :

SELECT title, pub_name

FROM course INNER JOIN

student ON course .cno = student .stdno

در اینصورت course هایی که student ندارند یا student هایی که course ندارند هیچ کدام در خروجی نمی آیند.

Outer Join : در این روش سطرهایی از جدول اصلی که سطر متناظرشان در جدول دیگر وجود ندارد هم در خروجی می آیند. بسته به اینکه بخواهیم کدامیک از سطرهایی که در جدول دیگر متناظر ندارند هم در خروجی بیایند، سه نوع Outer Join بصورت زیر تعریف می شود :

1- Left Outer Join : تمام سطرهای جدول اولی (جدولی که در سمت چپ Join قرار گرفته است) در خروجی ظاهر می شوند. ولی سطرهایی از جدول دوم که متناظری در جدول اول ندارند در خروجی نمی آیند. بعنوان مثال دستور زیر تمام course ها ، حتی آنهایی که student ندارند، را در خروجی نشان می دهد :

SELECT course.cno, course.cname, student.stdno

FROM course LEFT OUTER JOIN student

ON course.cno = student.stdno

2- Right Outer Join : تمام سطرهای جدول دومی (جدولی که در سمت راست Join قرار گرفته است) در خروجی ظاهر می شوند. بعنوان مثال دستور زیر تمام student ها را نشان می دهد حتی آنهایی که course ندارند هم در خروجی نمایش داده می شوند:

SELECT course.cno, course.cname, student.fname

FROM course RIGHT OUTER JOIN publishers

ON course.cno = student.stdno

3- Full Outer Join : تمام سطرهای هر دو جدول در خروجی می آیند چه در جدول دیگر متناظر داشته باشند چه نداشته باشند. به عنوان مثال دستور زیر تمام course ها و تمام student ها را نشان می دهد:

SELECT course.cno, course.cname, student.fname

FROM course FULL OUTER JOIN student

ON course.cno = student.stdno

Cross Join : نتیجه این Join تمام ترکیباتی است که از قرار گرفتن هر سطر از جدول اولی در کنار تمام سطرهای جدول دومی بدست می آید(همانند حاصلضرب دکارتی). بعنوان مثال authors Cross Join Publisher مجموعه تمام حالتهای ممکن course/student را در خروجی تولید می کند :

SELECT * FROM course CROSS JOIN student

حالا یک نکته بزرگ:

ساختار دانشجو/درس یک ساختار "چند به چند" است و با 2 جدول قابلیت طراحی ندارد و باید جدول ثانویه (رابط) در نظر بگیرید.

جای فیلد cno در جدول student اشتباه هست.

پاسخ در 1396/04/12 توسط
0

با سلام

دقیقا تمامی دوستان مباحث کاملا مرتبطو درستی رو مطرح کردن

دوست عزیز جدولی که شما در بخش design قصد ارتباط دادنش با جدول دیگری و دارین همیشه پرایمری در نظر گرفته خواهد شد . اگر جدول student اصلی هست پس دقت کنید که از روی جدول student به ایجاد ارتباطش با جدول دیگری اقدام کنید .

انشاالله که بحث update cascade و delete cascade رو هم حتما بلد هستین : اگر فیلد پدر حذف شود برای فیلدهای فرزند مرتبطت با فیلد پدر چه اتفاقی بیوفته ؟ اونا هم حذف بشن یا مقدارشون اپدیت بشه .

این بحث با توضیحات بالا و توضیحات بسیار عالی دو دوست عزیز کامل شد .

پاسخ در 1396/04/16 توسط
0

تغییر دادم به این شکل ولی بازم مشکل قبل رو دارم و یه جدول course رو در هر دو قسمت foreign key و primary key دارم و نمیتونم ارتباط بدم

پاسخ در 1396/04/12 توسط
1

در طراحی جداول باید ابتدا شناخت درستی از object ها یا همان اشیاء داشته باشین.

در دنیای دیتابیس همه چی یه object هست که properties مخصوص به خودشو داره که تقریبا همون field ها میشن.

یکی از خصوصیاتی که همیشه دردسر سازه و البته خود این دردسر یه جور راه کاره، ارتباطات هست.

وقتی object ها رو در آوردین باید relationبین اونها رو هم بررسی کنید که اگر 1:1 بود مشکلی نیست ولی اگر n:n بود باید یک جدول رابط تشکیل بدین.

student:
stdno
fname
lname
course
cno
cname
department
stdcou
cno
stdno

البته این یه ساختار تئوریه.

پاسخ در 1396/04/12 توسط
1

همه جداول رو ابتدا اضافه کنید و بعد لینک ها رو برقرار کنید.

پاسخ در 1396/04/12 توسط
3

سلام

ببینید دوست عزیز همیشه یه نکته ای رو تو بحث طراحی مد نظر داشته باشید و اون اینه،زمانی که میخواید relation ایجاد کنید همیشه به جدول آخر که مرتبط با جداول دیگتون هست برید .

مثلا همانطور که دوستمون Zman اشاره کردن شما کلیه دانشجوها رو داخل یک جدول و کلیه ی دروس رو داخل جدول دیگری تعریف میکنید و در نهایت برای اینکه بگید یک دانشجو چند درس میتونه اخذ کنه یک جدول واسطی در این بین بوجود میاد.

حالا شما بعد از طراحی جدول واسط برید تو مد Design همین جدول و گزینه relation رو بزنید و از قسمت Primary جدول Course و بعد CourseID رو به عنوان PK انتخاب کنید و سپس به سمت راست مراجعه کرده و Forein Key مربوطه رو از همین جدول واسط انتخاب کنید. و سپس OK رو بزنید.

و همین روال رو مجددا برای جدول Student در داخل جدول واسط انجام بدید.

پاسخ در 1396/04/13 توسط
0

ممنونم

ساختار دانشجو/درس یک ساختار "یک به چند" است و با 2 جدول قابلیت طراحی ندارد و باید جدول ثانویه (رابط) در نظر بگیرید.

جای فیلد cno در جدول student اشتباه هست.

یعنی یک درس رو چندتا دانشجو میتونن بردارن و نیز یک دانشجو چندتا درس برمیداره پس میشه یک به چند

و اینکه منظورتون اینه که یه جدول سوم باید باشه که تو اون جدول کد دانشجو و کد درس بیاد که مشخص کنه هردانشجو چه درسایی برداشته و یا هر درس رو چندتا دانشجو برداشتن

میشه یکم بیشتر توضیح بدین؟

اونوقت اگه جدول سوم درست بشه تو relationship در قسمت foreign key و primary key جداول رو درست میاره و یه مثل الان نیست دیگه؟

پاسخ در 1396/04/12 توسط

پاسخ شما