پرکاربرد ترین دستورات بانک اطلاعاتی sql
پرکاربرد ترین دستورات بانک اطلاعاتی sql
این مطالب جهت آشنایی مقدماتی دستورات sql می باشد
دستور select
این دستور که دستوری مستقل نیست و حتما باید با اجزایی بکار رود جهت ساخت پرس و جو بر روی بانک اطلاعاتی بکار می رود،چهار کلمه کلیدی وجود دارند که عبارتند از :
Select , from , where , order by
این دستور دو بخش دارد. بخش نخست (* SELECT) مشخص میکند که چه ستونهایی را میخواهیم انتخاب کنیم. علامت ستاره به این معنی است که میخواهیم همه ستونهای جدول را انتخاب کنیم. بخش دوم (FROM table) به موتور پایگاه داده اعلام میکند که میخواهیم دادهها را از کجا دریافت کنیم. در استفادههای عملی باید بهجای کلمه «table»، نام جدولی را بنویسیم که قصد داریم دادهها را از آن دریافت کنیم.
SELECT * FROM table;
شرط where
این دستور امکان اعمال شروطی برای دستور SELECT را فراهم میکند و میتوان آن را به سادگی به انتهای آن دستور اضافه کرد.
SELECT age, name FROM people WHERE age > 10;
عملگر AND
میتوان با استفاده از عملگر AND چند شرط را با هم ترکیب کرد.
SELECT age, name FROM people WHERE age > AND age < 20;
دستور AND دقیقاً به همان ترتیبی که در زبان معمولی استفاده میکنیم، عمل میکند. این دستور یک شرط دیگر را به عبارت ما اضافه میکند. در مثال فوق، دادههای بازیابی شده میتوانند هر رکوردی باشند، به شرط اینکه سن فرد بین ۱۰ تا ۲۰ باشد. از آنجایی که هیچ نتیجهای مطابق شرطهای دستور وجود نداشته است، هیچ دادهای نیز بازیابی نشده است.
عملگر OR
دستور دیگری که میتوان همراه با دستور where استفاده کرد، عملگر OR است. مانند مثال زیر:
SELECT age, name FROM people WHERE age > 10 OR name = ‘sara’;
دستور Order(ترتیب)
دستور Order برای مرتبسازی نتایج بازیابی شده استفاده میشود ، کافی است آن را به انتهای دستور خود اضافه کنید:
SELECT name, age FROM people ORDER BY age DESC;
دستورjoin (الحاق)
دستور Join برای الحاق دادههای مرتبط که در چند جدول ذخیره شدهاند جدول دوم به جدول اول ملحق میشود و تعیین میشود که دادهها چگونه با هم ارتباط دارند:
SELECT age, name, height FROM people LEFT JOIN heights USING (name);
چند نکته وجود دارد که باید رعایت شوند. هنگام استفاده از این دستور باید از تنظیمات “LEFT JOIN” تبعیت کرد. این الحاق از نوع الحاق از چپ خواهد بود. سپس جدولی که میخواهیم به آن ملحق کنیم (heights) را تعیین میکنیم. استفاده از عبارت USING (name) در انتهای دستور به این معنی است که ستون «name» در هر دو جدول وجود دارد و میبایست به عنوان یک کلید برای الحاق جداول به هم استفاده شود. اگر دو ستونی که قرار است به عنوان کلید الحاق استفاده شوند، نامهای متفاوتی در دو جدول داشته باشند، میتوان بهجای عبارت “USING” از “ON” استفاده کرد:
SELECT age, name, height FROM people LEFT JOIN heights ON (namea = nameb);
عبارت «on» به طور صریح مشخص میکند که کدام ستونها باید به عنوان کلید استفاده شوند. انواع مختلفی از الحاق وجود دارند که توضیح همه آنها به زمان زیادی نیاز دارد؛ اما در ادامه خلاصه فشردهای از نحوه استفاده از آنها ارائه شده است.
انواع الحاق
-
(INNER) JOIN ردیفهایی را که در هر دو جدول انطباق داشته باشند، بازمیگرداند.
-
LEFT (OUTER) JOIN همه ردیفهای جدول چپ را بازمیگرداند و ردیفهایی از جدول راست را که انطباق داشته باشند نیز بازمیگرداند. اگر هیچ انطباقی وجود نداشته باشد، رکوردهای جدول چپ همچنان بازگردانی میشوند.
-
RIGHT (OUTER) JOIN این دستور مخالف دستور الحاق از چپ است، همه ردیفهای جدول راست بازگردان میشوند و ردیفهایی از جدول راست که انطباق داشته باشند نیز بازیابی میشود.
-
FULL (OUTER) JOIN هر رکوردی را که در هرکدام از جدولها انطباق داشته باشد، بازیابی میکند.
استفاده از واژههای “INNER” یا “OUTER” اختیاری است. استفاده از این دو واژه باعث میشود که درک دستور آسانتر شود.
دستور Alias (نام مستعار)
اینک با دستورات مقدماتی آشنا شدهایم و در ادامه دستور Alias را بررسی میکنیم. این دستور برای تغییر نام یک جدول استفاده میشود. در واقع این تغییر نام بیشتر شبیه یک نام مستعار است، چون این نام جدید صرفاً درون تراکنشی از پایگاه داده که شما اجرا کردهاید، وجود دارد. در ادامه مثالی برای استفاده آن ذکر کردهایم:
SELECT A.Age FROM people A;
برای نام مستعار میتوان از هر نامی استفاده کرد؛ اما ترجیح داده میشود که از حروف الفبا استفاده شود. پیش از نام ستون، این نام مستعار به صورت پیشوند استفاده میشود. نام مستعار (Alias) بلافاصله پس از آنکه اعلان شود به جدول انتساب مییابد. دستور فوق دقیقاً معادل دستور زیر است:
SELECT people.Age FROM people;
.
دستور Union (ترکیب)
Union یک دستور بسیار عالی است. این دستور امکان ترکیب ردیفها با یکدیگر را میدهد. برخلاف دستور joins که ستونهای مطابق را به هم الحاق میکرد، دستور union میتواند ردیفهای نامرتبط را به این شرط که تعداد و نام ستون یکسانی داشته باشند، به همدیگر ملحق کند
SELECT age, name FROM customers
UNION SELECT age, name FROM staff;
دستور union را میتوان نوعی ترکیب نتایج دو کوئری دانست. دستور union نتایجی را بازمیگرداند که یک ردیف منحصربهفرد بین دو کوئری وجود داشته باشد. میتوان از عبارت “UNION ALL” برای بازیابی همه دادهها، صرفنظر از موارد تکراری استفاده کرد:
SELECT age, name FROM customers
UNION ALL
SELECT age, name FROM staff;
دستور Insert (درج)
با استفاده از دستور insert میتوان دادهها را در پایگاه داده درج کرد. در ادامه مثالی از آن ارائه شده است:
INSERT INTO people(name, age) VALUES(‘Joe’, 102);
در این دستور باید نام جدول (people) و ستونهایی (name and age) که استفاده میشوند را ذکر کرد. سپس از عبارت “VALUES” برای تعیین مقادیری که باید درج شوند، استفاده میشود. این مقادیر باید به همان ترتیبی باشند که ستون آنها قبلاً در دستور ذکر شده است.
برای درج دادهها در پایگاه داده نمیتوان از عبارت where استفاده کرد و باید مطمئن شد که هرگونه الزامهای ضروری جدول رعایت شدهاند.
دستور Update (به روز رسانی)
پس از وارد کردن دادهها ممکن است لازم باشد که ردیفهای خاصی تغییر یابند :
UPDATE people SET name = ‘Joe’, age = 101;
در این دستور باید جدولی که قصد تغییر آن را داریم ذکر کنیم و سپس از عبارت “SET” برای تعیین ستونها و مقادیر آنها استفاده کنیم. این یک مثال خوب است؛ اما همه رکوردها را بهروزرسانی میکند. این وضعیت در همه موارد مطلوب نیست.
به عبارت دیگر میتوان از کلیدواژه “WHERE” دقیقاً همانند دستور select استفاده کرد:
UPDATE people SET name = ‘Joe’, age = 101 WHERE name = ‘James’;
حتی میتوان با استفاده از عملگرهای “AND” و “OR” چند شرط را تعیین کرد:
UPDATE people SET name = ‘Joe’, age = 101 WHERE (name = ‘James’ AND age = 100) OR name = ‘Ryan’;
به نحوه استفاده از پارامترها برای مقید کردن شروط توجه کنید.
دستور Upsert(ترکیب بهروزرسانی و درج)
با اینکه ظاهر دستور Upsert عجیب است (Update+Insert)؛ اما دستور بسیار مفیدی است. فرض کنیم یک محدودیت بر روی جدول داریم و تعیین کردهایم که تنها رکوردهایی را میخواهیم که نامهای منحصربهفردی دارند. به عبارت دیگر نمیخواهیم هیچ دو ردیفی نام یکسان داشته باشند. اگر سعی کنیم چند مقدار با نام ‘Joe’ وارد کنیم، موتور پایگاه داده خطایی ایجاد کرده و از این کار ممانعت میکند. دستور UPSERT امکان بهروزرسانی یک رکورد را در صورتی که از قبل وجود داشته باشد، ایجاد میکند
INSERT INTO people(name, age)
VALUES(‘Joe’, 101)
ON DUPLICATE KEY UPDATE age = 101;
توجه داشته باشید که این دستور در واقع ترکیبی از دستور update و insert است که میتوان آن را چنین خلاصه کرد: «در صورتی که نتوانی insert کنی آن را update کن.»
دستور Delete (حذف)
دستور Delete برای حذف کامل رکوردها استفاده میشود. در صورتی که از این دستور به درستی استفاده نشود، میتواند بسیار مخرب باشد:
DELETE FROM people;
مانند بسیاری از دستورهای دیگر این دستور همه چیز را حذف میکند! برای محدود کردن این دستور به ردیفهای مورد نظر میتوان از عبارت where استفاده کرد. برای مثال:
DELETE FROM people WHERE name = ‘Joe’;
اگر در حال توسعه یک سیستم هستید، بهتر است “soft delete” را پیادهسازی کنید. در این روش شما واقع هرگز به صورت واقعی یک رکورد را حذف نمیکنید، بلکه یک ستون موارد حذف شده (deleted) ایجاد میکنید و سپس هنگام انتخاب کردن رکوردها این ستون را بررسی میکنید. در این روش از خطرات بالقوه زیادی اجتناب میشود و میتوان رکوردهای حذف شده زیادی را با سرعت و به راحتی انتخاب کرد. با این حال این روش، جایگزین مناسبی برای پشتیبان گیری نیست.