آموزش زبان SQL ( اوراکل )- قسمت دوم

نوشته شده توسط :
آموزش زبان SQL ( اوراکل )- قسمت دوم

 

همانطور که در بخش اول آموزش زبان SQL گفته شد مفهوم  sql  اختصار یا مخفف عبارت (Structured Query Language )  یا زبانی  برای جستجويي ساخت يافته می باشد . در قسمت قبل به معرفی و آموزش مفاهیم ابتدایی sql  و دستورات select  پرداخته شد.در ادامه با دستورات بیشتری آشنا خواهید شد.

این داکیومنت بر اساس  نسخه زیر می باشد :

(ORACLE (10g, 11g

در ادامه معرفی دستورات sql به موارد زیر می پردازیم :

 

5.6-  دستور SQL Between 

از دستور فوق برای نمایش رکورها در یک محدوده مشخص استفاده می شود.به مثال زیر توجه بفرمایید.

در پرس و جوی زیر ما می خواهید در جدول  هایی مه بین 5 و 10 می باشند را نمایش دهیم.

Select Emp.Emp_Id

    ,Emp.First_Name

    ,Emp.Last_Name

    ,Emp.Start_Date

From   Employee Emp

Where  (Emp.Emp_Id Between 5 And 10);


مثال فوق در حقیقت معادل ساختار پرس و جوی زیر است زیر است.

Select Emp.Emp_Id

     ,Emp.First_Name

     ,Emp.Last_Name

     ,Emp.Start_Date

From   Employee Emp

Where  Emp.Emp_Id >= 5

And    Emp.Emp_Id <= 10;


نتیجه را می بینید:

از BETWEEN در محدودیت زمانی نیز استفاده می شود. برای مثال، نمایش دهید کارکنانی را که شروع به کار آنها  در مدت زمان مشخصی باشد.

برای نمایش تاریخ به صورت زیر عمل می کنیم.

03-05-2002 ==> 09-08-2002  (dd-MM-yyyy)

 

       Select Emp.Emp_Id

   ,Emp.First_Name

   ,Emp.Last_Name

   ,Emp.Start_Date

   , -- To_Char is function of Oracle.

    -- It may not exist in other DB.

    -- To_Char convert Date to text

    -- In form of some format. Here is dd-MM-yyyy.

    To_Char(Emp.Start_Date

           ,'dd-MM-yyyy') Start_Date_Vn

From   Employee Emp

Where

-- To_Date is a function of Oracle (It may not exist on other DB)

-- To_Date is a function that convert Text into Date

-- In form of some format. Here is dd-MM-yyyy.

( --

Emp.Start_Date Between To_Date('03-05-2002'

                             ,'dd-MM-yyyy') And

To_Date('09-08-2002'

      ,'dd-MM-yyyy') --

);

نتیجه پرس و جو را می بینیم.

 

5.7- آموزش دستور  SQL Wildcard

دو کاراکترهای خاص در SQL وجود دارد:

کاراکتر %

کاراکتر _

معنی هر کدام به ترتیب :

 (%)توصیف صفر یا یک  یا چند کاراکتر می باشد.
 (_) توصیف دقیقا یکی از کاراکترمی باشد.

این دو کارکتر معمولا در حالت LIKE استفاده می شود.

در مثال زیر می خواهیم لیستی را مشاهد نماییم که FED_ID  آنها به فرمت زیر باشد.

بخش آغازین آن به صورت تصادفی باشد بعد از بخش اول یک کارکتر (-) اجباری باشد. در بخش بعد دو کارکتر اجباری نیاز است در ادامه به یک کارکتر (-) نیاز است. بخش پایانی آن نیز به صورت تصادفی باشد.

Select Cus.Cust_Id

             ,Cus.Fed_Id

             ,Cus.Address

        From   Customer Cus

        where cus.fed_id like '%-__-%';

نتیجه اجرای پرس و جو :

5.8- آموزش دستور  SQL Like

در خصوص دستور LIKE در مثال های بالا به آن اشاره شد است.

5.9- آموزش دستور  SQL Order By

عبارت ORDER BY: مرتب کردن نتیجه یک پرس و جو بر اساس یک یا چند فیلد است

به عبارت زیر توجه نمایید.

SELECT "column_name"

FROM "table_name"

[WHERE "condition"]

ORDER BY "column_name1" [ASC, DESC], "column_name2" [ASC, DESC];

توجه داشته باشید :

ASC : یعنی صعودی (که پیش فرض دستورات می باشد)

DESC : یعنی نزولی

در مورد عبارت Sql زیر نکات زیر را توجه کنید:

ترتیب Product_Type_Cd  به ترتیب صعودی
 در ادامه ، ترتیب بر اساس Name به صورت صعودی

Select Pro.Product_Cd

    ,Pro.Product_Type_Cd

    ,Pro.Name

From   Product Pro

Order  By Pro.Product_Type_Cd Asc

       ,Pro.Name            Asc;

در عبارت زیر نیز توجه نمایید که در دستور  Order BY به صورت پیش فرض ASC  استفداه می شود. بنابراین نیازی به درج ASC نیست.

        Select Pro.Product_Cd

            ,Pro.Product_Type_Cd

            ,Pro.Name

        From   Product Pro

        Order  By Pro.Product_Type_Cd

               ,Pro.Name;

در عبارت sql  زیر در ابتدا بر اساس فیلد Product_Type_Cd به صورت نزولی مرتب می شود و بعد بر اساس فیلد Name به صورت صعودی مرتب می شود.

        Select Pro.Product_Cd

            ,Pro.Product_Type_Cd

            ,Pro.Name

        From   Product Pro

        Order  By Pro.Product_Type_Cd Desc

               ,Pro.Name            Asc;

در زیر نتیجه اجرای پرس و جو ها را می بینید.

Order By همیشه بعد از دستور where  قرار می گیرد.

کوئری زیر برای  پیدا کردن کارکنان که نام آنها با (s) شروع می شود و بعد  مرتب می شوند  بر اساس تاریخ شروع  به کار به صورت نزولی.

Select Emp.Emp_Id

           ,Emp.First_Name

           ,Emp.Last_Name

           ,Emp.Start_Date

        From   Employee Emp

        Where  Emp.First_Name Like 'S%'

        Order  By Emp.Start_Date Desc;

 در زیر نتیجه اجرای کوئری را می بینید.

نکته در خصوص مثال زیر :

Syntaxاوراکل : (این نیست استاندارد SQL، پس ممکن است در دیگر پایگاه داده ها پشتیبانی نمی شود)

        Select Emp.Emp_Id

            ,Emp.First_Name

            ,Emp.Last_Name

            ,Emp.Start_Date

        From   Employee Emp

        Order  By 2 Desc;

5.10- آموزش دستور  SQL Group By

     در ابتدا نیاز است دا در موردبعضی از توابع  توضیحاتی داده شود:

Sum : تابعی که مجموع تمام مقادیر را برمی گرداند .

Avg : تابعی برای بازگشت میانگین تمام  مقادیر .

Count : تابعی برای شمارش تعداد از اقلام .

Min : تابعی برای بدست آوردن  ارزش یا مقدار حداقل

Max : تابعی برای بدست آوردن  ارزش یا مقدار حداکثر

توابع که در بالا به آنها اشاره شده از رایج ترین توابع می باشد، همچنین شما می توانید از آنها در کنا یکدیگر استفاده کنید.

در زیر پرس و جویی نوشته شده است برای نمایش لیست حسابها :

Select Acc.Account_Id

             ,Acc.Product_Cd

             ,Acc.Avail_Balance

             ,Acc.Pending_Balance

        From   Account Acc;

حال نیاز است تا بر اساس خدمات بانکی مقدار کل مبلغ به همراه میانگین و تعداد آن را بدست آوریم.برای این کار باید بر اساس Product_Cd دستور را گروه بندی نماییم.

Select Acc.Product_Cd

           ,Count(Acc.Product_Cd) As Count_Acc

           ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance

           ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance

        From   Account Acc

        Group  By Acc.Product_Cd;

نتیجه اجرای پرس و جو :

بنابراین در مثال بالا می بینید که 4 حساب وجود دارد که نوع سرویس آن (SAV) یا صرفی جویی در سپرده می باشد و همچنین مبلغ 1855.76 درکل آن وجود دارد و نیز مقدار میانگین آن 463.94 می باشد . این توضیحات در رکوردهای دیگر نیز وجود دارد.

 

5.11- آموزش دستور  SQL Having

دستور HAVING شما را قادر به تعیین شرایطی می کند که فیلتر انجام دهید در  نتایج  خروجی یک تایع در کوئری، به عبارت دیگر دستور Having  برای اعمال شرط بر روی خروجی تابع می باشد.

شاید این سئوال پیش بیاید که تفاوت Having با دستور Where چیست؟

دستور Where مکان فیلتر کردن یا ایجاد شرط بر روی  در ستون انتخاب شده می باشد ، در حالی فیلتر کردن یا ایجاد شرط با دستور HAVING در گروه های ایجاد شده توسط عبارت GROUP BY می باشد.

فرض کنید که شما می خواهید بر روی جدول  Account گروه بندی انجام دهید بر اساس دستور group By روی فیلد Product_cd و نمایش دهیم آنهایی راکه تعداد حسابهای آن نوع بیشتر از 3 باشد.

   

     Select Acc.Product_Cd

            ,Count(Acc.Product_Cd) As Count_Acc

            ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance -- Sum available balance

            ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance -- The average available balance

        From   Account Acc

        Group  By Acc.Product_Cd

        Having Count(Acc.Product_Cd) > 3;

نتیجه اجرای این پرس و جو :

تشخیص Where & Having

شما نیاز دارید تا بدانید که چگونه از Where  و  Having در کوئری های خود استفاده نمایید.


دستور Where : استفاده می شود برای فیلتر کردن قبل از دستور Group By

دستور Having : استفاده می شود برای فیلتر کردن بعد از دستور Group By

اگر شما می خواهید  اطلاعات عمومی  شعبه بانک ) جدول واحد(  را داشته باشید، شما می توانید با استفاده از where  فیلتر کنید داده را قبل از استفاده از group

Select Acc.Product_Cd

             ,Count(Acc.Product_Cd) As Count_Acc

             ,Sum(Acc.Avail_Balance) As Sum_Avail_Balance

             ,Avg(Acc.Avail_Balance) As Avg_Avail_Balance

        From   Account Acc

        -- Using WHERE to filter data before group

        Where  Acc.Open_Branch_Id = 1

        Group  By Acc.Product_Cd

        -- Using HAVING to filter data after group

        Having Count(Acc.Product_Cd) > 1;

نتیجه اجرای پرس و جو :

 

در داکیومنت بعد موارد و دستورات زیر را شرح خواهیم داد.

1- معرفی

2- یادگیری وصل شدن به پایگاه داده

3-  شروع سریع آموزش SQL

3.1- مثال برای کوئری

4- موارد خاص از اوراکل

4.1- دستور  DUAL

4.2- شی SEQUENCE

5-  پرس و جو ها ( QUERY )

5.1- دستور SQL Select

5.2- دستور SQL Distinct

5.3- دستور SQL Where

5.4- دستور SQL And Or

5.5- دستور SQL IN

5.6- دستور  SQL Between 

5.7- دستور  SQL Wildcard 

5.8- دستور  SQL Like 

5.9- دستور  SQL Order By 

5.10- دستور  SQL Group By 

5.11- دستور  SQL Having 

6- دستور  Insert 

6.1- دستور  Insert Into 

6.2- دستور  Insert Into Select 

7- دستور  Update 

8- دستور  Delete 

9- دستور  SQL Functions 

9.1- دستور  SQL Count 

9.2- دستور  SQL Sum 

9.3- دستور  SQL AVG 

9.4- دستور  SQL MIN 

9.5- دستور  SQL MAX 

10- دستور  SQL Join 

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- معرفی Subquery 

11.1- معرفی Subquery in the Where Clause 

11.2- معرفی  Subquery in the From Clause 

11.3- معرفی Subquery in the Select clause