در جلسه قبل با هم به مقدماتی از SQL پرداختیم تا با این زبان آشنایی پیدا کنیم.
مهمترین بخش از آموزش sql، دستورات اصلی این زبان میباشد. دستورات اس کیو ال از 4 دستور اصلی select ، update ، delete و insert تشکیل شده اند.
دستور SELECT در sql
دستور SELECT در اسکیوال برای انتخاب و استخراج اطلاعات مورد نظر از يک يا چند جدول و سپس مشاهده نتايج در يک جدول موقت استفاده می شود:
(SELECT column_name(s
FROM table_name
SELECT در اینجا به مفهوم فعل است و مشخص میکند که میخواهیم چه اطلاعاتی را بخوانیم.
- SELECT فهرست ستونها مشخص میکند که قصد خواندن کدام ستونها را از بانک داریم در صورتی که در این فهرست * قرار دهیم کلیه ستونهای جدول نمایش داده میشود.
- با استفاده از کلمه FROM مشخص میکنیم که از کدام جدول یا جداول این ستونها باید انتخاب شوند.
دستور SELECT *
دستور SELECT * همه اطلاعات موجود در جدول را انتخاب میکند. برای انتخاب کليه ستون های جدول در قسمت نام ستون باید علامت * را استفاده کرد.
SELECT * FROM table_name
نکته مهم: برخی از برنامه نویسان بجای نوشتن تمام ستونهایی که در تهیه گزارش به آنها احتیاج دارند از * استفاده میکنند که این کار باعث بالا رفتن بار شبکه شده و کارایی سیستم را پایین می آورد لذا بهتر است بجای استفاده از * ، لیست تمامی ستونها را بطور کامل قید کنید.
دستور SELECT DISTINCT در sql
چنانچه در ستون های مورد جستجو، موارد تکراری وجود داشته باشد در نتيجه خروجی نمايش داده خواهند شد. برای جلوگيری از چنين موردی و عدم نمايش موارد تکراری پس از دستور Select عبارت DISTINCT نوشته می شود.
(SELECT DISTINCT column_name(s
FROM table_name
مثال: تصور کنید يک جدول مشتری با ١٠٠٠ رکورد با ٩٠ درصد مشتری از کاليفرنيا، Query زير کد CA را ٩٠٠٠ بار خواهد باز گرداند که اصلاً يک نتيجه مفيدی نمی باشد.
SELECT State From Customer
کليد واژه Distinct در اين موقعيت شما را کمک می کند. Distinct که درست بعد از SELECT قرار می گيرد، به SQL Server دستور داده که سطرهای تکراری در نتايج را حذف نمايد. بنابراين Query زير هر کد ايالتی را فقط يک بار باز می گرداند به طور وضوح ليستی که شما جستجو می کنيد.
SELECT DISTINCT State From Customer
نکته: همتای کليد واژه Distinct ، All می باشد که SQL Server را برای بازگرداندن همه سطرها آگاه می سازد خواه آن واحد باشد يا خير. All پیش فرض دستور select است، پس نیازی به نوشتن آن نیست.
دستور شرطی WHERE در sql
دستور Where برای اضافه کردن شرط يا شرط هايی جهت محدود کردن نتايج جستجو و یا استخراج نتايج دقيقتر برای داشتن خروجی که در ذهن ما وجود دارد استفاده می شود. اين ذستور بايد پس از دستور Select و تعيين ستون ها از جدول مورد نظر به کار رود.
با استفاده از عملگرهای AND ، OR و پرانتز می توان چندين شرط را با هم ترکيب کرد. خروجی برنامه با شرط هایی که روی دستور داده شده است مطابقت داده خواهد شد.
Select Name , Family
From Person
“Where IdNumber= ” 1111
در مثال بالا نام و فامیلی اشخاصی که فیلد IdNumber آنها برابر 1111 باشد توسط دستور where در اسکیوال برگردانده می شوند.
عملگر های And و Or در SQL
عملگرهای And و Or برای ترکيب شرط ها در دستور Where در sql استفاده می شود.
گاهی اوقات خروجی که ما میخواهیم در اس کیوال بایستی چند شرط مختلف داشته باشد. به طور مثال افرادی را میخواهیم که سن بالای 23 سال و مدرک تحصیلی بالای لیسانس داشته باشند. در اين حالت بايستی هر کدام از شرط ها را جداگانه تعريف کرده و سپس آنها را با هم ترکيب کنيم. برنامه هر کدام از شرط ها را بررسی میکند و خروجی را نمایش میدهد.
عملگر And برای اجرای دستور نياز دارد تا تمام شرط های تعيين شده برای آن درست باشد.
SELECT * FROM Persons
‘ WHERE FirstName=’ majid
‘ AND LastName=’ hesaraki
عمگر Or فقط نياز دارد که حداقل يکی از شرط ها درست باشد.
SELECT * FROM Persons
‘WHERE FirstName=’majid
‘OR FirstName=’hesaraki
ترکیب عملگرهای And و Or
Select * From Persons
( (‘Where ( ( Grade = 16 AND Major = ‘Hard Ware’ ) OR ( Garde = 12 AND Major = ‘SoftWare
دستور Order By در sql
اطلاعاتی که در دستور select در اسکیوال به عنوان خروجی نمایش داده میشود بی نظم و یا بهتر بگوییم بدون نظم مد نظر ما است. مقادير خروجی در ستون های جدول بر اساس مقدار هيج ستونی مرتب نمیشوند. با دستور Order By میتوان اطلاعات جدول را بر اساس مقادير يک يا چند ستون برحسب شاخص هايی مثل ترتيب حروف الفبا، بزرگتر يا کوچکتر بودن اعداد و …مرتب کرد.
ساختار دستور Order By
(SELECT column_name(s
FROM table_name
[ORDER BY column_name(s) [ASC|DESC
علامات [] در اطراف where بدین معناست که میتوانید where را بکار نبرید. اما اگر بکار بردید حتما باید قبل از order باشد . ASC به معنای صعودی بودن (a to z)و DESC به معنای نزولی بودن است (z to a).پیش فرضش ACS است.
نکته : همچنین این نیز امکان پذیرست که مرتب سازی را بر مبنای بیش از یک ستون انجام دهید. برای این منظور بخش مرتب سازی کد بالا بصورت زیر در میاید:
[ORDER BY “column_name1” [ASC, DESC], “column_name2” [ASC, DESC
مثال :
Select Name , Family From Person
“Where idnumber=”11
Order By Family
خروجی دستور بالا ، اشخاص با شرط ذکر شده در دستور where را بر اساس نام فامیلی مرتب صعودی میکند.
دستور Group By در sql
از دستور Group By در اسکیوال برای دسته بندی يک ستون بر حسب مقادير مشابه فيلدهای يک ستون ديگر استفاده می شود.
در هنگام استفاده از برخی از توابع درون ساخته SQL که عمل محاسبه ( مثل مجموع و ميانگين ) را بر روی داده ها انجام می دهند، اين مشکل وجود دارد که اين توابع قادر به جدا کردن و متمايز کردن اطلاعات موجود در دو ستون نسبت به هم نيستند و نتايج محاسبات را به صورت کلی برای همه آنها در نظر می گيرند. در این مواقع از دستور Group By استفاده میکنیم.
ساختار این دستور به صورت زیر است:
(SELECT column_name, aggregate_function(column_name
FROM table_name
WHERE column_name operator value
GROUP BY column_name
دستور Group By در sql وقتی استفاده میشود که ما در حال انتخاب چند ستون هستیم و حداقل یک عملگر محاسباتی در دستور select داریم. در این زمان ما باید تمام ستونهای دیگر را گروه کنیم.
مثال : در مثال زیر مجموع نمرات هر دانش آموز را بصورت گروه بندی شده بر اساس فیلد نام دانش آموز به خروجی داده می شود:
مجموع نمرات Select Name ,Sum ( Grade ) As
From Class
Group By Name
نکته : دستور group by در اسکیوال از جمله ی پرکاربردترین دستورات است که یادگیری کامل این دستور، میتواند تفاوت اسکریپت نویسی حرفه ای در sql باشد.
دستور شرطی Having در sql
دستور Having در اسکیوال برای افزودن شرط به توابع درون ساخته SQL استفاده می شود، زيرا از دستور Where نمی توان برای کار با مقادير خروجی توابع درون ساخته SQL استفاده کرد .
به عبارت ديگر دستور Having در sql برای اعمال شرط به ستون ها اعمال می شود و همان کاری را می کند که Where در رکوردها انجام می دهد. دستور Having معمولا با دستور Group By می آيد.
ساختار دستور شرطی Having در sql به صورت زیر است :
(SELECT column_name, aggregate_function(column_name
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
مثال : در مثال زیر همچون مثال بخش دستور group by عمل شده، با این تفاوت که بعد از گروه بندی بر اساس نام دانش آموزان و دادن خروجی جمع نمرات آنها، خروجی شامل دانش آموزانی است که مجموع نمرات آنها بالاتر از 255 باشد:
مجموع نمرات Select Name , Sum ( Grade ) As جمع نمره
From Students
Group By Name
Having Sum ( Grade ) > 25
Order By Family
نکته مثال : در مثال بالا به جای having نمیتوان از where استفاده کرد و برای اعمال شرط بر روی فیلدهای محاسباتی آمده در دستور group by باید از جمله شرطی having استفاده کرد.
دستور Insert در اسکیوال
دستور Insert در sql برای وارد کردن و ايجاد يک رکورد جديد در جدول استفاده می شود.
دو روش استفاده از این دستور وجود دارد :
INSERT INTO table_name
(…,VALUES (value1, value2, value3
(…,INSERT INTO table_name (column1, column2, column3
(…,VALUES (value1, value2, value3
نکته : می توان در دستور Insert در اسکیوال تعيين کرد که مقادير مورد نظر به ترتيب به کدام ستون های جدول وارد شوند. برای اين منظور ابتدا نام ستون های مورد نظر را به ترتيب جلوی نام جدول در يک پرانتز وارد کرده و با کاما از هم جدا می کنيم. سپس مقادير متناظر را به همان ترتيب پس از واژه Vaues در پرانتز وارد می کنيم.
نکته : چنانچه برای فيلد يا فيلدهايی مقداری در دستور insert در نظر گرفته نشود، مقادیر پیش فرض تعیین شده و در صورت تعیین نکردن مقدار پیش فرض جای آنها در جدول خالی می ماند. فقط بايد به ترتيب نام ستون ها و مقادير دقت کرد .
(“Insert into Student ( Name , Family ) Values ( “majid” , “hesaraki
در مثال بالا نام majid در فیلد Name و نام hesaraki در فیلد Family میرود. بقیه ی فیلد ها در صورت تعیین کردن مقدار پیش فرض آن مقدار را میگیرند و در صورت تعیین نکردن آن ، مقدار خالی یا Null میگیرند.
دستور Update در sql
دستور Update در اسکیوال برای تغيير اطلاعات موجود در يک فيلد و جايگزينی آن با يک مقدار جديد به کار می رود. ویرایش اطلاعات در بانک اس کیوال از جمله مهمترین اعمال هست که با استفاده از دستور Update امکان پذیر می باشد.
UPDATE table_name
…,SET column1=value, column2=value2
WHERE some_column=some_value
برای ویرایش کردن بیش از یک فیلد به روش زیر عمل میکنیم:
Update Person
“Set Name = ” parinaz” , Family = ” asadi” , id-number=” 11
Where ID =3222
برای ویرایش یک فیلد دستور زیر را مینویسیم :
Update Person
“Set Name =”mona
” Where Name = ” ardestani
دستور Delete در اسکیوال
دستور Delete در sql برای حذف اطلاعات يک رکورد در جدول بانک اسکیوال استفاده می شود. از دستور delete باید با دقت استفاده شود زیرا امکان بازگرداندن رکورد های حذف شده به این راحتی ها نیست!
DELETE FROM table_name
WHERE some_column=some_value
برای پاک کردن یک رکورد با شناسه مشخص از دستور زیر استفاده میکنیم.
Delete From Person
“Where ID = “16
دستور Delete *
اين امکان وجود دارد که با دستور Delete * بدون حذف يک جدول، کليه رکوردهای درون آن را پاک کرد.
Delete From Person