PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش SQLserver (بخش دهم)



TAHA
11-24-2009, 06:38 PM
ارتباط دادن جداول


Query هايی که در فصل 3 بررسی گرديد سطرهايش از يک جدول تکی ترسيم گرديده است اما Query ها به ويژه می توانند مفيد باشند برای ترکيب ستونهايی از چندين جدول يا نما که Joining Tables ناميده می شود و آن در شرطهای FROM يا WHERE از حالت SELECT انجام می گيرد. در اين فصل ما بر روی ايجاد ارتباطها با استفاده از شرط FROM که روشی توصيه شده است متمرکز خواهيم شد.

شناختن شرط FROM
همان طوری که ما ديده ايم، ساختار پايه ای از شرط FROM به آسانی نام از يک جدول يا نما ساده را فراهم می سازد. اما برای دسترسی پيدا کردن به توانايی از مدل ارتباطی، ما بايد به بازيابی ستونها از جداول چندگانه و نماها در يک Query خاص قادر باشيم. شرط FROM يک مکانيزمی برای انجام آن با استفاده از ساختار دستور زير:FROMON
اپراتور پيوند انواع پيوند برای به انجام رسيدن را تشريح می کند. Server SQL پيوندهای داخلی و خارجی همه نوسانات را پشتيبانی می کند، همان طوری که در بخش بعدی خواهيم ديد. شرايط پيوند يک تعبيری می باشد شبيه به ملاک که در شرط WHERE استفاده شده است. آن مشخص می کند که چگونه سطرها در دو جدول ارتباط خواهند يافت. بيشتر پردازشگرهای ربطی روی پايه ای از عبارتهای برابری مانند B ستون = A ستون به انجام می رسند. اما SQL Server هر اپراتور منطقی را پشتيبانی کرده و شرايط پيوند می تواند به طور دلخواه پيچيده باشد، با عبارات چندگانه پيوند يافته که از حرف ربط AND يا OR از همان راهی که يک شرط WHERE می تواند ملاک انتخابی چندگانه را شامل باشد استفاده کند. عبارت پيوند می تواند برای اضافه کردن جداول و نماهای اضافی برای Query تکرار شود. ساختار دستور برای پيوند جداول چندگانه عبارت است از: FROM
ON
يک حدود فرضی 256 جدولی برای هر Query وجود دارد، اما آن به حد زياد غير محتمل است که شما اصلاً نياز به 5 يا 6 نياز نداريد و 2 يا 3 بيشتر معمول می باشد. در حقيقت اگر شما نياز به اتصال بيش از 10 جدول در يک Query باشيد، شما بايد به دقت طرح پايگاه داده آن را نگاه کرده برای اينکه مطمئن شويد که آن به طور صحيح به حالت عادی در آمده است.

ايجاد کردن پيوندها
پيوندها می توانند در QueryDesigner با استفاده هر کدام از قاب Grid يا قاب SQL ايجاد گردند. قاب Grid اغلب آسانتر می باشد اگر شما جداولی که رسماً در طرح پايگاه داده مربوط شده اند پيوند دهيد، از موقعی که Query Designer پيوندی بين آنها به طور خودکار ايجاد خواهد کرد. اما به طور معمول قاب SQL با انعطاف پذيری بيشتر برای شما فراهم می گردد.

نامگذاری شئی ها
زمانی که شما با يک جدول يا نمای تکی کار می کنيد آنجا می تواند هيچ ابهامی در حدود منابع از يک ستون نداشته باشد از موقعی که همه نام ستونها در يک جدول بايد منحصر به فرد باشند. هنگامی که شما برای بار اول کار کردن با چندين جدول در يک Query را شروع می کنيد يا شما بايد برای مشخص کردن نام ستونها صريحاً مواظب باشيد. مشخصات کامل برای هر شئی پايگاه داده چهار معرفه را در بردارد. نام سرور، نام پايگاه داده، نام صاحب، نام شئی. معرفه ها به وسيله پريودها جداسازی می گردند. بنابراين نام واجد شرايط از جدول Oils در سيستم من Bunny.Aromatherary.dbo.Oil می باشد. مقداری از شئی ها مانند نماها و جداول شامل شئی های ديگر می باشد. برای رجوع به يکی از اين شئی های گنجانده شده (در اين حالت، ستونها). شما به آسانی نام آن را به نام شئی ضميمه می کنيد. نام واجد شرايط کامل از ستون OilID از جدول Oils (Bunny.Aromatherapy.dbo.Oils.Oil ID) می باشد. خوشبختانه شما فقط نياز به مشخص کردن کافی از درجه بندی ابهام اجتناب پذير داريد.
در يک Query مبنی بر يک جدول تکی، برای مثال نام ستون به وسيله خودش دارای مشخصات کافی می باشد. اگر يک Query به بيش از يک جدول مربوط گردد، اگر چه جداول دارای ستونهايی با يک نام باشد. شما بايد نام جدول را در نام شئی (Object) Oils.OilID , OilPropertise.OilID که تمايز را به طور کامل روشن می سازد لحاظ کنيد.

پيوندهای داخلی
بيشترين فرمهای رايج پيوند يک پيوند داخلی می باشد. يک پيوند داخلی فقط آن سطرهايی که شرايط پيوند TRUE را باز می گرداند باز خواهد گرداند.

پيوند دو جدول با استفاده از قاب دياگرام
1- Query Designer جدول Oils را به وسيله کليک راست کردن نام آن در قاب Details باز کرده روی جدول Open رفته و همه سطرهای بازگشتی را انتخاب می کنيم.

2- قاب دياگرام را به وسيله کليک کردن دکمه قاب دياگرام روی نوار ابزار Query Designer نشان می دهيم.

3- دکمه Add Table را روی نوار ابزار Query Designer کليک می کنيم. QueryDesigner کادر محاوره ای Add Table را نشان می دهد.

4- جدول PlantTypes را در ليست جدول انتخاب کرده و Add را کليک می کنيم. SQL Server جدول را به Query اضافه می کند.
5- Close را برای بستن کادر محاوره ای Add Table کليک می کنيم.

6- دکمه قاب SQL را در نوار ابزار Query Designer کليک می کنيم. QueryDesigner قاب SQL را نشان می دهد.

7- علامت * را بعد از کليد واژه SELECT حذف می کنيم.

8- دکمه قاب SQL را در نوار ابزار Query Designer کليک می کنيم. (OK را کليک کرده اگر Query Designer يک متن خطا درباره ساختار دستور SELECT نشان دهد). Query Designer قاب SQL را پنهان می سازد.
مهم: زمانی که شما QueryDesigner را باز می کنيد، حالت SQL معمولاً * را انتخاب می کند. انتخاب کردن ستونهای مشخص در قاب دياگرام سبب می شود که آنها به ليست ستون اضافه شوند. مايکروسافت آن را به صورت يک خصيصه در نظر می گيرد.

9- در قاب دياگرام ستونهای OilID و OilName را در جدول Oils و ستون PlantType را در جدول PlantType انتخاب می کنيم.

10- دکمه Run روی نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer مقادير Planttype را برای هر Oil نشان می دهد.


ارتباط دو جدول به وسيله قاب SQL
1- قاب دياگرام را پنهان کرده و قاب SQL را به وسيله کليک کردن دکمه ها روی نوار ابزار Query Designer نشان می دهيم.

2- حالت SQL موجود را با عبارت زير جايگزين می کنيم.


SELECT Oils.OilID,Oils.Oil Name,PlantParts.PlantPart
FROM OilsINNER Join
PlantParts ON Oils.PlantPartID=PlantParts.PlantPart ID

3- دکمه Run را در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer مقاديرها برای هر سطر Oils Plant Part را نشان می دهد.


ارتباط جداول چندگانه با استفاده از قاب دياگرام
1- قاب SQL را پنهان کرده و قاب دياگرام را نمايش می دهيم.

2- دکمه Add Table را روی نوار ابزار Query Designer کليک می کنيم. Query Designer کادر محاوره ای Add Table را نشان می دهد.

3- جدول Planttypes را در ليست جداول انتخاب می کنيم. Add را کليک کرده SQL Server جدول را به Query اضافه می کند.
4- Close را برای بستن کادر محاوره ای Add Table کليک می کنيم.

5- در قاب دياگرام ستون Planttype را در جدول Planttypes برای اضافه کردن ستون به Query کليک می کنيم.

6- دکمه Run در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. QueryDesigner هر دوی ستونهای PlantPart و Planttype را برای هر Oil نشان می دهد.


ارتباط جداول چندگانه با استفاده از قاب SQL
1- قاب دياگرام را پنهان کرده و قاب SQL را نشان می دهيم.
2- عبارت SELECT موجود را با عبارت زير جايگزين می کنيم.


SELECT Oils.Oil ID.Oils.Oil Name.odors.odor
FROM Oils
INNER Join Oilodors on Oils.OilID=Oil odors.OilID
INNER Join odors on Oilodors.odor ID=odors.odorID

3- دکمه Run را در نوار ابزار QueryDesigner برای اجرای Query کليک می کنيم.

4- پنجره Query Designer را می بنديم.

ارتباطات خارجی
بعضی مواقع شما می خواهيد که يک Query همه سطرها يک يا چندين جدول را باز گرداند، خواه آنها سطرهای ارتباطی در جداول ديگر داشته باشند و يا خير. که با استفاده از يک ارتباط خارجی به انجام رسيده که می تواند سه گونه باشد: چپ، راست و کامل. يک ارتباط خارجی همه سطرهايی از جدول چپ در شرط JOIN و فقط آن سطرهايی از جدول راست برای اينکه شرايط ارتباط TRUE می باشد را باز خواهد گرداند.
دستور ساختار برای يک ارتباط خارجی عبارت است از:
FROM Left TableLeft Outer Join Right able on
برای مثال عبارت SELECT زير، همه سطرها در جدول Oils را باز می گرداند و مقادير PlantPart از جدول آنجايی که PlantPart مشخص شده جفت می شود. آنجا سطرهای ارتباطی در جدول Plant Parts وجود ندارد و Query ، Null را به عنوان مقدار PlantPart برای آن سطر باز می گرداند.


SELECT Oils.Oil Name.Plant Parts.Plant Part
FROM Oils Left Outer Join
Plant Parts on Oils.Plant Part ID=Plant Parts.Plant Part ID

يک ارتباط خارجی سمت راست مقابل يک ارتباط خارجی سمت چپ می باشد. آن همه سطرها از جدول راست در شرط JOIN را باز می گرداند و مقادير ارتباطی را از جدول چپ ارتباط می دهد. نظر به اينکه يک ارتباط کاملاً خارجی همه سطرها از دو جدول را با هم هماهنگ می سازد آنجايی که امکان پذير باشد.

ايجاد کردن يک ارتباط خارجی چپ با استفاده از قاب دياگرام
1- Query Designer را برای جدول Oils به وسيله کليک راست کردن نام جدول در قاب Details باز کرده، روی جدول Open رفته و همه سطرهای بازگشتی را انتخاب می کنيم.
2- قاب دياگرام را نشان می دهيم.

3- دکمه Add Table را در نوار ابزار Query Designer کليک می کنيم. Query Designer کادر محاوره ای Add Table را نشان می دهد.

4- Cautions و Oil Cautions در ليست جدول را انتخاب و سپس Add را کليک می کنيم. Query Designer جدولی برای Query اضافه می کند.
راهنمايی: شما می توانيد يک ارتباط خارجی چپ با دو جدول ايجاد کنيد. ما حالت سوم را در ايجاد استفاده می کنيم با جدول OilCautions که به عنوان يک جدول الحاقی عمل می کند که ارتباط چندگانه بين Oils و Cautions را حل می کند.
5- Close را برای بستن کادر محاوره ای کليک می کنيم.

راهنمايی: شما می توانيد جداول را در قاب دياگرام برای پاک کردن نمايشگر درج کنيد.

6- دکمه قاب SQL را در نوار ابزار Query Designer کليک می کنيم. Query Designer قاب SQL را نشان می دهد.

7- علامت * را در کليد واژه SELECT حذف می کنيم.

8- دکمه قاب SQL را در نوار ابزار Query Designer کليک می کنيم. (OK را کليک کرده اگر QueryDesigner يک متن خطا درباره ساختار از عبارت SELECT نشان دهد) Query Designer قاب SQL را پنهان می سازد.
مهم: زمانی که شما Query Designer را باز می کنيد عبارت SQL پيش فرض معمولاً * را انتخاب می کند. ستون ويژه که در قاب دياگرام انتخاب شده سبب می شود که آنها برای ليست ستون اضافه شوند. مايکروسافت اين را به عنوان يک ويژگی در نظر می گيرد.

9- در قاب دياگرام، ستونها از OilName و OilID را از جدول Oils و ستون Caution را از جدول Cautions برای خروجی انتخاب می کنيم.

10- دکمه Run را در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer فقط آن Oils که Cautions دارد را نشان می دهد.

11- خط ارتباطی بين جداول Oil Cautions و Oils را به وسيله کليک کردن آن انتخاب می کنيم و سپس دکمه Properties را در نوار ابزار Query Designer کليک می کنيم. Query Designer کادر محاوره ای Join Properties را نشان می دهد.

12- All Rows From Oils را انتخاب می کنيم.

راهنمايی: همه سطرها از Oil Cautions يک ارتباطی خارجی سمت راست ايجاد خواهد کرد و هر دوی گزينه ها را انتخاب کرده که يک ارتباط کامل خارجی ايجاد می کند.
13- Close را برای بستن کادر محاوره ای کليک می کنيم. QueryDesigner خط ارتباطی را برای انعکاس مشخصات ارتباطی جديد تغيير می دهد.

14- دکمه Run در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. QueryDesigner همه سطرها در جدول Oils را نشان می دهد و مقادير از جدول Cautions را ارتباط می دهد.

ايجاد يک ارتباط خارجی سمت راست با استفاده از قاب SQL
1- قاب دياگرام را پنهان کرده و قاب SQL را در Query Designer نشان می دهيم.

2- حالت SELECT موجود را با عبارت زير جايگزين می کنيم.


SELECT Oils.Oil Name.Properties.Property
FROM Oils
Right OUTER JOIN Oil Properties on
Oils.Oil ID=Oil Properties.Oil ID
INNER JOIN Properties on
Oil Properties.Property ID=Properties.Property ID

3- دکمه Run را در نوار ابزار Query Designer برای اجرای Query کليک می کنيم. Query Designer شامل همه سطرها از جدول Oil Properties با مقادير ارتباطی از جدول Oils می باشد.

4- پنجره Query Designer را می بنديم.

UNIONS
آخرين نوع از ارتباط به صورت Union شناخته می گردد. يک Union نتايجی از دو عبارت SELECT متمايز را در داخل يک تنظيم از سطرها ترکيب می کند. ارتباطات داخلی و خارجی ستونهايی از دو جدول درگير شده در يک سطر تکی را با هم ترکيب می کند يک Union سطرهايی از دو جدول در يک ستون تکی را به هم ترکيب می کند. شما می توانيد تصور کنيد که تنظيمات دو سطر را گرفته و يکی را در بالای ديگری باز گردانيد. اگر چه قاعده اصلی از سطرها باز گردانده شده به وسيله شرط ORDER BY مشخص می گردد. ساختار دستور يک Union از پيوندها متفاوت می باشد. يک Union ساختار دستوری به صورت زير دارد:


SELECT FROM
UNION [All]
SELECT FROM
[ORDER BY ]

شما می توانيد بسياری از حالتهای UNION SELECT را همان طوری که شما برای يک Query دوست داريد اضافه کنيد. (اين موضوع برای 256 جدول محدود می باشد) اما همه عبارتهای SELECT بايد همان تعداد از ستونها را از انواع سازگار يا شبيه در همان دستور باز گرداند. اولين عبارت SELECT نامهای ستون را مشخص خواهد کرد و شرط ORDERBY از آخرين عبارت SELECT دستور Sort را تعيين خواهد کرد. به طور پيش فرض، SQLServer سطرهای چندگانه ای از نتايج را از يک Union Query برمی دارد. اگر شما UnionAll را مشخص کنيد، ولی سطرهای چندگانه حفظ خواهد شد.

ايجاد کردن يک UNION
1- Query Designer را به وسيله کليک کردن جدول Properties در قاب Details باز کرده روی جدول Open رفته و همه سطرهای بازگشتی را انتخاب می کنيم.
2- قاب SQL را نشان می دهيم.

3- حالت SQL موجود را با عبارت زير جايگزين می کنيم.


SELECT Property Table AS Table Name.Property ID AS ID
Property AS Quality From Properties
UNION
SELECT odor Table.odor ID odor From odors
ORDER BY Quality

4- دکمه Run در نوار ابزار QueryDesigner را برای اجرای Query کليک می کنيم. Query Designer نتايجی از دو عبارت SELECT را با هم ترکيب می کند.