آموزش 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 : پایگاه داده را دیتابیس میگویند که میتواند شامل جداول و ماژول های ما باشد بزودي تمامي کد هاي بالا را در دروس مختلف مي آموزيد
پاسخ : آموزش 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>
پاسخ : آموزش 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>
پاسخ : آموزش 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>
پاسخ : آموزش 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]
پاسخ : آموزش 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 استفاده کنیم ، برای یکی یا هر دو عبارت، ما نتایج یکسانی را بدست خواهیم آورد .
پاسخ : آموزش 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>
پاسخ : آموزش 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>
پاسخ : آموزش 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 موجود نمی باشد .
پاسخ : آموزش 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>