در ادامه بخش های قبل آموزش زبان SQL در قسمت می خواهیم به دستورات دیگری همچون right join ، left join، join و معرفی Subquery بپردازیم.
10- دستور SQL Join :دستور Join برای ایجاد پیوند جدول ها در پایگاه داده ها استفاده می شود. به عنوان مثال، شما اطلاعات جدول EMPLOYEE را نگاه کنید. شما می توانید پیدا کنید یک کارمند را اگر شما ID بخش آن را بدانید . با این که، آن فقط یک عدد بی معنی می باشد ،
برای پیدا کردن گروه هر کارمند، شما نیاز دارید تا نگاه کنید به جدول DEPARTMENT . و از طریق لینک از این جدول با جدول EMPLOYEE برای دریافت اطلاعات کامل کارمندان.برای این امر شما می توانید از دستور JOIN استفاده کنید.
دستور JOIN جهار نوع دارد :
INNER JOIN (JOIN)
LEFT OUTER JOIN (LEFT JOIN)
RIGHT OUTER JOIN (RIGHT JOIN)
FULL OUTER JOIN (OUTER JOIN)
CROSS JOIN
10.1 - دستور (INNER JOIN (JOIN :دستور INNER JOIN نمایش می دهد همه ردیف هایی از هر دو جدول که حداقل یک داده متناظر در ستون های مرتبط با هم داشته باشد.
نحوه syntax آن :
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
شما می توانید به جای INNER JOIN از JOIN استفاده کنید. نتیجه همان است :
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
مثال دیگر :
INNER JOIN دو جدول EMPLOYEE و DEPARTMENT :
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Dept_Id
,Dep.Name Dept_Name
From Employee Emp
Inner Join Department Dep
On Emp.Dept_Id = Dep.Dept_Id
Order By Emp.Emp_Id;
نحوه syntax برای oracle :در بانک اطلاعاتی oracle بهتر است از ضرب دکارتی به جای INNER JOIN استفاده شود.
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Dept_Id
,Dep.Name Dept_Name
From Employee Emp
,Department Dep
Where Emp.Dept_Id = Dep.Dept_Id
Order By Emp.Emp_Id;
10.2 - دستور LEFT OUTER JOIN یا (LEFT JOIN) :
دستور LEFT JOIN تمام رکوردهای جدول سمت چپ (table1) و آن دسته از سطر های جدول سمت راست (table2) را که با جدول سمت چپ متناظر است نمایش می دهد. اگر در جدول سمت راست رکوردی متناظری وجود نداشته باشد نتیجه در سمت راست صفر خواهد بود.
تصویر زیر را نگاه کنید.
مثال برای LEFT JOIN :
Select Cus.Cust_Id
,Cus.Fed_Id
,Cus.State
,Ofc.Cust_Id As Ofc_Cust_Id
,Ofc.Officer_Id
,Ofc.Start_Date
,Ofc.Title
From Customer Cus -- Table1
Left Outer Join Officer Ofc -- Table2
On Cus.Cust_Id = Ofc.Cust_Id;
نتیجه کوئری بالا :
نحوه syntax برای oracle :در دیتابیس اوراکل با روش دیگری می توان LEFT JOIN را پیاده سازی کرد.
می توان با ازافه کردن (+) به فیلد شرط در جدول دوم این کار را انجام داد
به مثال زیر دقت کنید :
Select Cus.Cust_Id
,Cus.Fed_Id
,Cus.State
,Ofc.Cust_Id As Ofc_Cust_Id
,Ofc.Officer_Id
,Ofc.Start_Date
,Ofc.Title
From Customer Cus -- Table1
,Officer Ofc -- Table2
Where Cus.Cust_Id = Ofc.Cust_Id(+);
10.3- دستور RIGHT OUTER JOIN یا (RIGHT JOIN) :دستور RIGHT JOIN تمام رکوردهای جدول سمت راست (table2) و آن دسته از سطر های جدول سمت چپ (table1) را که با جدول سمت راست متناظر است نمایش می دهد. اگر در جدول سمت چپ رکوردی متناظری وجود نداشته باشد نتیجه در سمت چپ صفر خواهد بود.
Select Cus.Cust_Id
,Cus.Fed_Id
,Cus.State
,Ofc.Cust_Id As Ofc_Cust_Id
,Ofc.Officer_Id
,Ofc.Start_Date
,Ofc.Title
From Customer Cus -- Table1
right Outer Join Officer Ofc -- Table2
On Cus.Cust_Id = Ofc.Cust_Id;
نحوه syntax برای oracle :در دیتابیس اوراکل با روش دیگری می توان RIGHT JOIN را پیاده سازی کرد.
می توان با ازافه کردن (+) به فیلد شرط در جدول دوم این کار را انجام داد
به مثال زیر دقت کنید :
Select Cus.Cust_Id
,Cus.Fed_Id
,Cus.State
,Ofc.Cust_Id As Ofc_Cust_Id
,Ofc.Officer_Id
,Ofc.Start_Date
,Ofc.Title
From Customer Cus -- Table1
,Officer Ofc -- Table2
Where Cus.Cust_Id(+) = Ofc.Cust_Id;
10.4- دستور FULL OUTER JOIN یا (OUTER JOIN) :دستور FULL JOIN ترکیبی از دو دستور RIGHT OUTER JOIN و LEFT OUTER JOIN می باشد و تمام ردیف های جدول سمت چپ (table1) و سمت راست (table2) را نمایش می دهد.
نحوه syntax آن :
SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;
11- بررسی Subquery :در اوراکل، زیر پرس و جو (subquery) پرس و جو (query)می باشد در یک پرس و جو (query) دیگر است. شما می توانید زیر پرس و جوی در ساختار دستورات SQL را ایجاد کنید.
این subquery می توانید در عبارت WHERE شرطی از جدول دیگر (the FROM clause) باشد با یک عبارت select دیگر (the SELECT clause) باشد.
11.1- معرفی زیر پرس و جو (Subquery) از نوع the Where Clause
در اکثر موارد، زیر پرس و جو در عبارت WHERE قرارمی گیرد . این Subquery نیز می تواند به صورت Subquery باشد.
Select Acc.Account_Id
,Acc.Open_Date
,Acc.Product_Cd
,Acc.Avail_Balance
From Account Acc
Where Acc.Cust_Id In
(Select Cus.Cust_Id From Customer Cus Where Cus.Cust_Type_Cd = 'B')
11.2- معرفی زیر پرس و جوی (Subquery) از نوع the From Clause
یک Subquery همچنین می توانید بدنه همان دستور اول باشد. این مدل معمولاً یک تعریف VIEW در ون یک عبارت select می باشد.
Select Cus.Cust_Id
,Cus.Address
,Cus.Fed_Id
,Acc2.Sum_Avail_Balance
From Customer Cus
, -- Define a inline view.
(Select Acc.Cust_Id
,Sum(Acc.Avail_Balance) As Sum_Avail_Balance
From Account Acc
Group By Acc.Cust_Id) Acc2
Where Cus.Cust_Id = Acc2.Cust_Id;
11.3 - معرفی زیر پرس و جوی (Subquery) از نوع the Select clauseیک زیر پرس و جوی (Subquery) همچنین می توانید به عنوان یک ستون در عبارت ما قرار گیرد.
Select Cus.Cust_Id
,Cus.Address
,Cus.Fed_Id
,(Select Sum(Acc.Avail_Balance)
From Account Acc
Where Acc.Cust_Id = Cus.Cust_Id) As Sum_Avail_Balance
From Customer Cus;
با تشکر از همراهی شما دوستان عزیز
در زیر سرفصل را یک بار دیگر مرور می کنیم:
2- یادگیری وصل شدن به پایگاه داده
10.1- دستور ( INNER JOIN (or JOIN
10.2- دستور ( LEFT OUTER JOIN (or LEFT JOIN
10.3- دستور (RIGHT OUTER JOIN (or RIGHT JOIN
10.4- دستور (FULL OUTER JOIN (Or OUTER JOIN
11.1- معرفی Subquery in the Where Clause