1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش SQL Server

شروع موضوع توسط minaaa ‏10/12/11 در انجمن SQL

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    آموزش SQL Server

    برای کار با اطلاعات در بانک های اطلاعاتی زبانی مخصوص همان بانک وجود دارد که از آن زبان برای دستکاری اطلاعات و مرتب کردن آنها در بانک استفاده میشود.بانک اطلاعاتی Sql server و همچنین Access و نیز Oracle (البته تا حدودی) از یک زبان واحد برای اینکار استفاده میکنند . در این سری مقالات دستورات ساده SQL را خواهید آموخت . تعدادی ازین دستورات به قرار زیر است که زیر هر کدام از آنها قالب دستوری شان نیز نوشته شده که بزودی بصورت کامل شرح داده خواهند شد . یادگیری هر یک از این دستورات پیش نیاز بعدی میباشد . پس با ما همراه باشید .


    کد:

    <CODE>Select

    SELECT "column_name" FROM "table_name"



    Distinct

    SELECT DISTINCT "column_name"

    FROM "table_name"



    Where

    SELECT "column_name"

    FROM "table_name"

    WHERE "condition"



    And/Or

    SELECT "column_name"

    FROM "table_name"

    WHERE "simple condition"

    {[AND|OR] "simple condition"}+



    In

    SELECT "column_name"

    FROM "table_name"

    WHERE "column_name" IN ('value1', 'value2', ...)



    Between

    SELECT "column_name"

    FROM "table_name"

    WHERE "column_name" BETWEEN 'value1' AND 'value2'



    Like

    SELECT "column_name"

    FROM "table_name"

    WHERE "column_name" LIKE {PATTERN}



    Order By

    SELECT "column_name"

    FROM "table_name"

    [WHERE "condition"]

    ORDER BY "column_name" [ASC, DESC]



    Count

    SELECT COUNT("column_name")

    FROM "table_name"



    Group By

    SELECT "column_name1", SUM("column_name2")

    FROM "table_name"

    GROUP BY "column_name1"



    Having

    SELECT "column_name1", SUM("column_name2")

    FROM "table_name"

    GROUP BY "column_name1"

    HAVING (arithematic function condition)



    Create Table

    CREATE TABLE "table_name"

    ("column 1" "data_type_for_column_1",

    "column 2" "data_type_for_column_2",

    ... )



    Drop Table

    DROP TABLE "table_name"



    Truncate Table

    TRUNCATE TABLE "table_name"



    Insert Into

    INSERT INTO "table_name" ("column1", "column2", ...)

    VALUES ("value1", "value2", ...)



    Update

    UPDATE "table_name"

    SET "column_1" = [new value]

    WHERE {condition}



    Delete From

    DELETE FROM "table_name"

    WHERE {condition}</CODE>

    تعریف های اولیه :

    Query : به معنای درخواست است و در sql به کد جستجویی می گویند که شما برای بدست آوردن نتیجه ای آن را مینویسید و اجرا می کنید .

    Resault set : نتیجه بدست آمده از یک Query را میگویند.

    Database : پایگاه داده را دیتابیس میگویند که میتواند شامل جداول و ماژول های ما باشد
    بزودي تمامي کد هاي بالا را در دروس مختلف مي آموزيد
     
    وضعیت سفید و Amon Amarth از این پست تشکر کرده اند.
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    دستور SELECT :

    اولین نیاز ما انتخاب اطلاعات از یک جدول است . در دستور زیر یک ستون از یک جدول را انتخاب میکنیم .

    قالب دستور : SELECT "column_name" FROM "table_name"

    مثال :فرض کنید جدولی مانند زیر داریم :



    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date

    Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>




    کد:

    <CODE>SELECT store_name FROM Store_Information</CODE>

    نتیحه


    کد:

    <CODE>Los Angeles

    San Diego

    Los Angeles

    Boston</CODE>






    دستور WHERE :

    ممکن است گاهی بخواهیم اطلاعات را طبق پارامتر خاصی استخراج کنیم :



    کد:

    <CODE>SELECT "column_name"
    FROM "table_name"
    WHERE "condition"</CODE>

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


    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>




    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>




    کد:

    <CODE>SELECT store_name
    FROM Store_Information
    WHERE Sales > 1000</CODE>

    نتیجه


    کد:

    <CODE>store_name

    Los Angeles</CODE>
     
    یک شخص از این تشکر کرد.
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    AND OR :

    در فرمان where دیدید که چگونه اطلاعات را بر حسب یه شرط فیلتر کردیم . حال اگر چند شرط داشته باشیم میتوانیم بکمک AND یا OR آنها را بهم وصل کنیم تا در فرمان where از آن استفاده کنیم .

    کد:

    <CODE>SELECT "column_name"
    FROM "table_name"
    WHERE "simple condition"
    {[AND|OR] "simple condition"}+</CODE>

    علامات {}+ بدین معنی است که اطلاعات داخل براکت ممکن است یک یا چند بار تکرار شود . ما میتوانیم از پرانتز ها نیز برای جدا کردن اولویت عمل کردن AND و OR استفاده کنیم.

    مثال :فرض کنید جدولی مانند زیر داریم . جاهایی که فروش بیش از هزار دلار است یا بین 275 و 500 است را می خواهیم:

    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>



    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>




    کد:

    <CODE>SELECT store_name
    FROM Store_Information
    WHERE Sales > 1000
    OR (Sales < 500 AND Sales > 275)</CODE>

    نتیجه

    کد:

    <CODE>store_name

    Los Angeles

    San Francisco</CODE>
     
    یک شخص از این تشکر کرد.
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    MINUS:
    این دستور نیز با دو جمله SQL کار میکند. در ابتدا تمام نتایج query اول را میگیرد و سپس از میان نتایج ، آنهایی را که در query دوم هستند حذف میکند .

    قالب دستوری :


    کد:

    <CODE>[SQL Statement 1]
    MINUS
    [SQL Statement 2]</CODE>

    در اینجا میخواهیم تاریخ هایی را که در آنها فقط فروش در فروشگاه داشته این بیابیم.(فروش روی اینترنتی اصلا نمیخواهیم)


    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>




    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>




    کد:

    <CODE>Table Internet Sales
    Date
    Sales</CODE>




    کد:

    <CODE>Jan-07-1999
    $250

    Jan-10-1999
    $535

    Jan-11-1999
    $320

    Jan-12-1999
    $750</CODE>




    کد:

    <CODE>SELECT Date FROM Store_Information
    MINUS
    SELECT Date FROM Internet_Sales</CODE>


    نتیجه :



    کد:

    <CODE>Date

    Jan-05-1999

    Jan-08-1999</CODE>
     
    یک شخص از این تشکر کرد.
  5. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    INTERSECT:

    مانند دستور union این دستور نیز با دو جمله SQL کار میکند . اما تفاوت اینجاست که دستور union در اصل مانند یک OR کار میکند و تمام رکوردهای غیر تکراری را بر میدارد . اما این دستور مانند AND کار میکند و رکورد های مشترک را بر میدارد .

    قالب دستوری :

    کد:

    <CODE>[SQL Statement 1]
    INTERSECT
    [SQL Statement 2]</CODE>

    مثال : جداول زیر را در نظر بگیرید . ما میخواهیم تمام تاریخ هایی را که در آن معامله ای انجام شده است استخراج کنیم . بنابرین از کد زیر استفاده میکنیم . تفاوت را با union مقایشه کنید .

    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>



    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>



    کد:

    <CODE>Table Internet Sales
    Date
    Sales</CODE>



    کد:

    <CODE>Jan-07-1999
    $250

    Jan-10-1999
    $535

    Jan-11-1999
    $320

    Jan-12-1999
    $750</CODE>



    کد:

    <CODE>SELECT Date FROM Store_Information
    INTERSECT
    SELECT Date FROM Internet_Sales</CODE>

    نتیجه :
    کد:
    Date
    
    Jan-07-1999
    [code]
     
    یک شخص از این تشکر کرد.
  6. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    UNION:

    هدف دستور Union ترکیب کردن نتایج حاصل از دو query با یکدیگر میباشد. در این رابطه میتوان گفت که union چیزی شبیه به join میباشد . چون هر دوی آنها برای ایجاد رابطه بین اطلاعات جداول مختلف استفاده میشوند . یکی از محدودیت های union این است که این ستون های متناظر با هم باید از یک نوع داده اطلاعات باشند. همچنین هنگام استفاده ار union فقط مقدار های متمایز انتخاب میشوند .(مانند select Distinct ) .

    قالب دستوری :


    کد:

    <CODE>[SQL Statement 1]
    UNION
    [SQL Statement 2]</CODE>

    مثال : جداول زیر را در نظر بگیرید . ما میخواهیم تمام تاریخ هایی را که در آن معامله ای انجام شده است استخراج کنیم . بنابرین از کد زیر استفاده میکنیم .


    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>




    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>




    کد:

    <CODE>Table Internet Sales
    Date
    Sales</CODE>




    کد:

    <CODE>Jan-07-1999
    $250

    Jan-10-1999
    $535

    Jan-11-1999
    $320

    Jan-12-1999
    $750</CODE>




    کد:

    <CODE>SELECT Date FROM Store_Information
    UNION
    SELECT Date FROM Internet_Sales</CODE>

    نتیجه :



    کد:

    <CODE>Date

    Jan-05-1999

    Jan-07-1999

    Jan-08-1999

    Jan-10-1999

    Jan-11-1999

    Jan-12-1999</CODE>


    توجه کنید که اگر ما از SELECT DISTINCT Date استفاده کنیم ، برای یکی یا هر دو عبارت، ما نتایج یکسانی را بدست خواهیم آورد .
     
    یک شخص از این تشکر کرد.
  7. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    all:

    هدف دستور Union all نیز ترکیب کردن نتایج حاصل از دو query با یکدیگر میباشد . اما فرقی که با union دارد این است که هنگام استفاده از union فقط مقادیر متمایز نشان داده میشود ، اما با union all تمام مقادیر برگردانده میشود.

    قالب دستوری :

    کد:

    <CODE>[SQL Statement 1]
    UNION ALL
    [SQL Statement 2]</CODE>

    مثال : جداول زیر را در نظر بگیرید . ما میخواهیم تمام تاریخ هایی را که در آن معامله ای انجام شده است استخراج کنیم . بنابرین از کد زیر استفاده میکنیم . تفاوت را با union مقایشه کنید .


    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>




    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>




    کد:

    <CODE>Table Internet Sales
    Date
    Sales

    Jan-07-1999
    $250

    Jan-10-1999
    $535

    Jan-11-1999
    $320

    Jan-12-1999
    $750</CODE>




    کد:

    <CODE>SELECT Date FROM Store_Information
    UNION ALL
    SELECT Date FROM Internet_Sales</CODE>

    نتیجه :


    کد:

    <CODE>Date

    Jan-05-1999

    Jan-07-1999

    Jan-08-1999

    Jan-08-1999

    Jan-07-1999

    Jan-10-1999

    Jan-11-1999

    Jan-12-1999</CODE>
     
    یک شخص از این تشکر کرد.
  8. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    join:

    در این بخش برای یادگیری join نیاز به بسیاری از کلمات کلیدی ای داریم که در دروس قبل آموختیم. به دو جدول زیر توجه کنید .


    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>




    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>





    کد:

    <CODE>Table Geography
    region_name
    store_name</CODE>




    کد:

    <CODE>East
    Boston

    East
    New York

    West
    Los Angeles

    West
    San Diego</CODE>


    چیزی که ما نیاز داریم اینه که میخواهیم فروش را در هر منطقه جغرافیایی بدست بیاریم . می بینیم که جدول Geography اطلاعات مناطق جغرافیایی را در بر دارد و جدول Store_Information اطلاعات فروش شهر ها را . برای بدست آوردن فروش در هر منطقه ، ما باید اطلاعات بدست آمده از هر منطقه را در هم ترکیب کنیم . با نگاهی به دو جدول می فهمیم که یک فیلد مشترک در هر دو موجود است و آن store_name میباشد که با یک کاما بهم وصل میشوند .

    کد زیر را ببینید تا توضیحات را شرح دهیم .


    کد:

    <CODE>SELECT A1.region_name REGION, SUM(A2.Sales) SALES
    FROM Geography A1, Store_Information A2
    WHERE A1.store_name = A2.store_name
    GROUP BY A1.region_name</CODE>

    نتیجه :


    کد:

    <CODE>REGION
    SALES

    East
    $700

    West
    $2050</CODE>


    دو خط اول کد به sql میگوید که دو فیلد را انتخاب کند . اولین خط فیلد region_name است از جدول Geography که نام مستعار REGION گرفته است . و دومین خط حاصل فیلد sales از جدول Store_Information که نام مستعار sales گرفته است . دقت کنید که چگونه مستعار های جدول در اینجا بکار گرفته شده . Geography بعنوان A1 مستعار شده و Store_information بنام A2 . بدون استفاده از مستعار ها خط اول بصورت زیر در میاید .


    کد:

    <CODE>SELECT Geography.region_name REGION, SUM(Store_Information.Sales) SALES</CODE>

    اساسا کار مستعار ها قابل درک کردن کد های طولانی SQL است . بخصوص هنگامی که چند جدول در کار است .

    حال بخط سوم کد اصلی توجه کنید ،یعنی کلمه where . اینجا جائیست که join کارش معلوم میشود . در این حالت ما میخواهیم مطمئن شویم که محتوای "store_name" در جدول Geography با مقادیر آن در جدول Store_Information نظیر میشود و راهش اینه که آنها را برابر هم قرار دهیم . کلمه where لازمه که مطمئن شویم که اطلاعات درست بدست میاید . بدون یک کلمه where درست ، یک نتیجه join دکارتی بدست میاید . نتیحه دکارتی در اصل ترکیبی از تمام حالات بوجود آمده از دو جدول را ارائه میکند . یعنی نتیجه برابر میشه با

    کد:

    <CODE>4 x 4 = 16</CODE>
     
    یک شخص از این تشکر کرد.
  9. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    outer join:

    قبلا دیدیم که چطور اطلاعات را با ایجاد اتصال بین دو جدول استخراج کردیم . در این حالت می خواهیم اطلاعات را از جدولی انتخاب کنیم صرفنظر ازینکه آنها در جدول دیگر ارائه شده اند یا خیر . برای اینکار باید از outer join استفاده کنیم .

    این دستور در دیتابیس ها ، وابسته به نوع دیتابیس است . بطور مثال در اوراکل ما باید یک علامت "(+)" در کلمه where قرار دهیم .


    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>




    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>





    کد:

    <CODE>Table Geography
    region_name
    store_name</CODE>




    کد:

    <CODE>East
    Boston

    East
    New York

    West
    Los Angeles

    West
    San Diego</CODE>


    جداول بالا موجود است و ما میخواهیم فروش تمام فروشگاه ها را که در جدول Geography آمده بدست آوریم . اگر مااز حالت join معمولی استفاده کنیم اطلاعات درستی بدست نمی آوریم ، چون مقدار New York را در جدول دوم به ما نشان نخواهد داد . چرا ؟ چون این مقدار در جدول اولی موجود نیست .


    کد:

    <CODE>SELECT A1.store_name, SUM(A2.Sales) SALES
    FROM Georgraphy A1, Store_Information A2
    WHERE A1.store_name = A2.store_name (+)
    GROUP BY A1.store_name</CODE>

    توجه کنید که در کد بالا ما در حال استفاده از گرامر دستوری oracle هستیم .

    نتیجه :


    کد:

    <CODE>store_name
    SALES

    Boston
    $700

    New York


    Los Angeles
    $1800

    San Diego
    $250</CODE>


    نکته : وقتی که رکوردی در جدول دوم همتایش موجود نباشد NULL برگردانده میشود . در این حالت New York در جدول Store_Information موجود نمی باشد .
     
    یک شخص از این تشکر کرد.
  10. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش SQL Server

    ALIAS:

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

    بطور خلاصه نام مستعار ستون برای سامان دادن به خروجی استفاده میشود . یعنی نام بالای ستون ها در خروجی قابل تغییر است .

    نوع دوم نام مستعار جداول است : با نوشتن نام مستعار درست بعد از نام جدول بعد از From انجام میشود. راحتی استفاده از این کلمه کلیدی در هنگام استفاده از دو جدول در استخراج جداول است که اطلاعات توسط کلمه join متحد و سپس استخراج می گردد .قبل از اینکه به Join برسیم بیایید نگاهی به alias بیندازیم .


    کد:

    <CODE>SELECT "table_alias"."column_name1" "column_alias"
    FROM "table_name" "table_alias"</CODE>

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

    مثال: جدول زیر را در نظر بگیرید .


    کد:

    <CODE>Table Store_Information
    store_name
    Sales
    Date</CODE>




    کد:

    <CODE>Los Angeles
    $1500
    Jan-05-1999

    San Diego
    $250
    Jan-07-1999

    Los Angeles
    $300
    Jan-08-1999

    Boston
    $700
    Jan-08-1999</CODE>




    کد:

    <CODE>SELECT A1.store_name Store, SUM(A1.Sales) "Total Sales" FROM Store_Information A1 GROUP BY A1.store_name</CODE>


    نتیجه:


    کد:

    <CODE>Store
    Total Sales

    Los Angeles
    $1800

    San Diego
    $250

    Boston
    $700</CODE>
     
    یک شخص از این تشکر کرد.