PDA

View Full Version : سوال: semi-join را بهتر است با JOIN بدست آوریم یا IN



amirebm
دوشنبه 27 اردیبهشت 1389, 16:16 عصر
سلام،چند سوال در زبان SQL داشتم،لطفا جواب بدین

1-تفاوت 2 query زیر تو چی هست؟


select st_name
from student S join department D
on S.dep_id=D.dep_id
where d.dep_name='it'
///////////////////////////
select st_name
from student
where dep_id in(select dep_id from department
where dep_name='it' ) d
//////////////////////////

در واقع چه موقع از in و چه موقع از join استفاده می کنیم؟

************************************************** *****

2-در چه شرایطی در view امکان insert و update و delete وجود دارد؟

************************************************** *****

3-حالت استفاده
view
جداول موقت
و subquery
چیست؟

pezhvakco
دوشنبه 27 اردیبهشت 1389, 17:15 عصر
درود :
1)
در واقع چه موقع از in و چه موقع از join استفاده می کنیم؟
join : پيوند-اتصال
مقایسه دو مورد بالا اشتباه است چون برای کارهای متفاوتی طراحی شده اند .
Join کردن (پیوند دادن) جدول ها برای خروجی گرفتن از چند جدول در یک نمایش واحد متناسب با شرایط خاص تعیین شده توسط کاربر است .
Join کردن شرایط خاصی داره که زیاد در موردش بحث شده و با یه جستو پیدا می کنی .

ولی دستور شرطی IN ، یه دستور شرطی برای گرفتن خروجی از یک جدول و چند مبنایی است که به جایگزین خوبی برای چند شرط بر پایه OR می باشد . دو کد دستور زیر یکسان هستند :

WHERE (code = 1) OR (code = 2) OR (code = 3)

(code IN (100, 200, 300))

2)
-در چه شرایطی در view امکان insert و update و delete وجود دارد؟
شرایط خاصی نداره ، فقط در حالت کلی از این امکان برای نمایش استفاده میشه و نه تغییرات .
اگه منظورتون کاربر در حال کار باشه که مربوط میشه به تنظیمات کاربر .

3)
حالت استفاده view جداول موقت و subquery چیست؟
میشه یه کم دقیق تر بگین ؟


فکر خوش .

amirebm
دوشنبه 27 اردیبهشت 1389, 18:53 عصر
در مورد سوال اولم ،ببینید 2 تا query فوق یک کار انجام میدهند اما هر کدام یه کاربرد دارن،
که منم میخوام بدونم چه موقع از اولی و چه موقع از دومی استفاده کنم؟

در مورد سوال دومم،بله دوست عزیز ،برای نمایش استفاده میشه اما میتوان با یه شرایطی در view این 3 عمل رو انجام داد ،که منم دنبال اینم که چطور میشه؟

منظورم از سوال آخر این هست که از این 3 امکان هر کدام در چه جایی بهتر هست استفاده بشه؟



درود :
1)
join : پيوند-اتصال
مقایسه دو مورد بالا اشتباه است چون برای کارهای متفاوتی طراحی شده اند .
Join کردن (پیوند دادن) جدول ها برای خروجی گرفتن از چند جدول در یک نمایش واحد متناسب با شرایط خاص تعیین شده توسط کاربر است .
Join کردن شرایط خاصی داره که زیاد در موردش بحث شده و با یه جستو پیدا می کنی .

ولی دستور شرطی IN ، یه دستور شرطی برای گرفتن خروجی از یک جدول و چند مبنایی است که به جایگزین خوبی برای چند شرط بر پایه OR می باشد . دو کد دستور زیر یکسان هستند :

WHERE (code = 1) OR (code = 2) OR (code = 3)
(code IN (100, 200, 300))2)
شرایط خاصی نداره ، فقط در حالت کلی از این امکان برای نمایش استفاده میشه و نه تغییرات .
اگه منظورتون کاربر در حال کار باشه که مربوط میشه به تنظیمات کاربر .

3)
میشه یه کم دقیق تر بگین ؟


فکر خوش .

محمد سلیم آبادی
دوشنبه 27 اردیبهشت 1389, 22:47 عصر
سلام،
دو کوئری که پست کردین در واقع یک نوع join به نام semi-join یعنی اتصال نیمه هستند. چون تنها لیست ستون های یکی از جدول ها به نمایش در می آید (جدول چپ یا جدول راست)
برای حل مساله ی semi-join راه حل های متعددی وجود داره که دو نمونه اش را شما قرار دادین.
از JOIN بیشتر زمانی استفاده می کنیم که بخواهیم داده ها را از چند جدول select کنیم و به نمایش در بیاریم. در واقع JOIN ستونهای ما را بسط می دهد.

VIEW برای عملیات درج و ویرایش محدودیت هایی دارد، مثلا مقادیر ستون هایی که نتیجه ی یک محاسبه هستند را نمی توانید تغییر دهید. مثلا از توابع تجمعی یا یک تابع اسکلر در view استفاده شده.
اگر در view وجود داشته باشه که allow null باشه یا خصیصه ی IDENTITY داشته باشه شما نمی توانید در آن ویو داده ای درج کنید.

subquery ربطی به دو نوع دیگه ای که نام بردین نداره. جداول موقت نسبت به جداول دائمی محدودیت هایی داره و زمانی از آنها استفاده می کنیم که بخواهیم داده ها را بطور موقت نگهداری و دستکاری کنیم.