کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

دستور Query- join های پیوند دهنده

دستور Query- join های پیوند دهنده »

join در دستورات زبان SQL برای ایجاد query از چندین جدول با توجه به رابطه ی بین ستون های خاصی از جداول بکار می رود.
در join ،ORACLE یک query است که سطرهای چندین جدول، نمایه (view)، یا materialized view را با هم ترکیب می کند.
هر زمان که چندین جدول به طور همزمان در عبارت FROM پرس و جو (query) مربوطه ظاهر می شود، oracle دستور join را اجرا می کند. آن لیستی که توسط دستور select برگردانده شده، می تواند هر ستونی از هر یک از این جداول را گزینش کند. چنانچه دو جدول دارای ستونی با اسم مشترک هستند، باید به منظور اجتناب از ایجاد هر گونه ابهام ، تمامی ارجاعات به این ستون ها را در سرتاسر query مورد نظر با اسامی جدول ها تعریف کنید.


Join condition

بیشتر query های join دربردارنده ی عبارت های شرطی WHERE هستند که دو ستون را از دو جدول متفاوت با هم مقایسه می کنند. به چنین شرطی join condition گفته می شود. به منظور اجرای join، ORACLE، جفت هایی از سطرها را با هم ترکیب کرده که این ترکیب دربردانده ی یک سطر از دو جدول می باشد. این اتفاق زمانی رخ می دهد که شرط join برابر با مقدار TRUE باشد. ستون هایی که توسط یا در شرط های join به هم پیوند داده می شوند لازم نیست که در هر دو لیست بازگردانده شده توسط دستور select ظاهر شوند.


Equijoins

Equijoin یک دستور join است که در شرط های خود از عملگر " = " استفاده می کند. دستور equijoin سطرهایی را با هم ترکیب می کند که ستون های آن ها دارای مقادیر یکسان باشند.
مثال زیر empno،name ، sal،deptno اسم دپارتمان و شهر را از جدول department برمی گرداند.


select emp.empno,emp.ename,emp.sal,emp.deptno,dept.dname,dept.city from ‎emp,dept where emp.deptno=dept.deptno;‎

query بالا را می توان با استفاده از اسم های مستعار (aliases)، بدین ترتیب بازنویسی کرد.


select e.empno, e.ename, e.sal, e.deptno, d.dname, d.city from emp e, dept d where ‎emp.deptno=dept.deptno;‎

query ذکر شده را می توان بدون استفاده از تعریف کننده های جدول (table qualifier) نیز بکار برد.


select empno,ename,sal,dname,city from emp,dept where emp.deptno=dept.deptno;‎

چنانچه می خواهید تمامی ستون های هر دو جدول را مشاهده کنید، باید query مربوطه را بدین ترتیب نگارش کنید.


select * from emp,dept where emp.deptno=dept.deptno;‎

Non Equi Joins

از Non Equi Joins در شرایطی استفاده می کنیم که می خواهیم نتایجی را از دو یا چند جدول بازیابی کنیم ولی امکان پیوند دقیق (اجرای join برای ترکیب دو جدول به صورت دقیق) وجود ندارد.
در نظر بگیرید دو جدول به نام های emp و salgrade داریم. جدول salgrade دربردارنده ی سطح شغلی و درآمد بالا و پایین کارکنان می باشد. حال فرض کنید می خواهیم سطح شغلی کارکنان شرکت را بر اساس درآمد آن ها بدست بیاوریم. برای این منظور می توان از Non Equi Joins بهره جست.


select e.empno, e.ename, e.sal, s.grade from emp e, salgrade s where e.sal between ‎s.lowsal and s.hisal

Self Joins

Self join به پیوند یک جدول به خود آن جدول می گویند. این جدول دوبار در عبارت FROM ظاهر می شود و بدنبال آن اسم های مستعار (aliase) جدول می آیند که اسم ستون ها را در شرط join تعریف می کنند. به منظور اجرای self join، ORACLE سطرهایی را با هم ترکیب کرده و برمی گرداند که شرط JOIN را برآورده کنند.
مثال زیر اسم کارکنان و مدیرانی که کارکنان مزبور برای آن ها کار می کنند را برمی گرداند.


Select e.empno, e.ename, m.ename  “Manager” from emp e, ‎
        emp m where e.mgrid=m.empno

Inner Join

INNER JOIN سطرهایی را بازگردانی می نماید که در هر دو جدول حداقل یک داده متناظر در ستون های مرتبط شده داشته باشد.( INNER JOIN سطرهایی که حداقل یک تناظر در دو جدول داشته باشد را بازیابی می نماید چنانچه فردی در جدولی به نام Persons وجود دارد که تناظری در جدول Orders ندارد، آن فرد فهرست نمی شود).


Outer Joins

عبارت کلیدی Outer Joins صرفا نتیجه ی یک INNER JOIN را بسط می دهد.
Outer join ایجاب نمی کند که دو رکورد با هم ترکیب شده از دو جدول (به هم پیوند خورده)، دارای رکوردی متناظر باشند. جدول ترکیبی هر دو رکورد را حفظ می کند، حتی اگر هیچ رکورد متناظر دیگری وجود نداشته باشد.
به منظور نوشتن یک query که با استفاده از عبارت کلیدی outer join جدول A و B را به هم پیوند می زند و تمامی سطرها را از جدول A برمی گرداند، باید از ساختار نگارشی (syntax) ANSI LEFT [OUTER] JOIN استفاده کنید و یا عملگر outer join " + " را به کلیه ی ستون های جدول B در join condition اعمال کنید. برای تمامی سطرهای موجود در جدول A که هیچ سطر متناظری در جدول B ندارد، Oracle مقدار null را برای عبارت های برگردانده شده توسط دستور select که دربردانده ی ستون هایی از جدول B هستند، برمی گرداند.
به منظور نوشتن یک query که با استفاده از outer join جدول A و B را بهم پیوند زده و تمامی سطرها را از جدول B برمی گرداند، باید از دستور نگارشی ANSI RIGHT [OUTER] استفاده کنید و یا عملگر outer join " + " را به کلیه ی ستون های جدول A در join condition اعمال کنید. برای تمامی سطرهای موجود در جدول B که هیچ سطر متناظری در جدول A ندارد، Oracle مقدار null را برای عبارت های برگردانده شده توسط دستور select که دربردانده ی ستون هایی از جدول A هستند، برمی گرداند.
full outer join اثر left outer join را با right outer join ترکیب می کند. این کلیدواژه تمامی سطرهای دو جدول را برمی گرداند یا به عبارتی نتایج join های left و right را با هم ترکیب می کند. برای نوشتن query که سطرهای جدول A و B را (که در صورت برآورده نکردن شرط join با null بسط داده می شوند) را با عبارت کلیدی outer join ترکیب کرده و سطرهای هر دو جدول را برمی گرداند، از دستور نگارشی ANSI FULL [OUTER] JOIN استفاده می کنیم.
مثال زیر علاوه بر تمامی کارکنان و اسم دپارتمان هایی که کارکنان در آن فعالیت دارند، اسم دپارتمان های خالی را نیز برمی گرداند.


select e.empno,e.ename,e.sal,e.deptno,d.dname,d.city  from emp e, dept d where ‎e.deptno(+)=d.deptno;‎

برای این منظور باید عملگر (+) را به ستونی که مقداری در آن وجود ندارد، اعمال کنید.


حاصلضرب دکارتی

در صورتی که جداول موجود در یک join query هیچ شرط join ای نداشته باشد، Oracle حاصلضرب دکارتی
آن را بازمی گرداند. Oracle تک تک سطرهای یک جدول را با سطرهای جدول دیگر ترکیب می کند. ضرب دکارتی تعداد زیادی سطر ایجاد کرده و به ندرت مفید واقع می شود. به عنوان مثال، حاصلضرب دکارتیِ دو جدول که با هم ترکیب می شوند و هریک دارای 100 سطر می باشند، 10,000 خواهد بود. توصیه می کنیم، همیشه از شرط join استفاده کنید مگر در شرایطی که حتما به حاصلضرب دکارتی نیاز دارید.


1394/07/27 6659 1327
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...