13 دستور مهم SQL که هر برنامه نویس باید بداند
1396/09/13 16:16 , شایان مسلمی

13 دستور مهم SQL که هر برنامه نویس باید بداند

دیتابیس ها به عنوان محرک وب مدرن شناخته میشوند.هر سایت بزرگ و پویا به طریقی از دینابیس استفاده میکند، و زمانی که با Structured Query Language ترکیب بشود،احتمال دستکاری داده ها واقعاً بی پایان میشود.اگر شما SQL را میشناسید،مطمئن شوید که مهارت های مطرح شده در این مقاله را میدانید .

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

نام های زیادی برای داده های برگشتی از یک جدول داده وجود دارد.داده ها معمولاً به نام Rows,Records,Tuples شناخته میشوند.

مقدمه (preface)

تمامی مثال های امروز بر اساس چهار جدول ساختگی است.جدول customer (مشتری) شامل نام و سن مشتریان است:

جدول heights (قد) شامل نام و قد هر کسی است.

جدول staff ( کارکنان) شامل نام و سن کارکنان است، دقیقاً همانند جدول مشتریان:

جدول آخر به نام people شامل نام و سن افراد است، درست همانند جداول مشتریان و کارکنان.

1.Select  (انتخاب)

عبارت select ساده ترین است، و یادگیری آن لازم است، چون پیش نیاز تقریباً تمامی دستورها است.این یک تمرین خوب برای نوشتن کلمات SQL ذخیره شده با حروف بزرگ است، این کار خواندن و نوشتن دستورات را ساده تر میکند.

همانطور که نامش نشان میدهد، select برای انتخاب داده از مرکز داده انجام میشود.ساده ترین کاربرد آن در اینجا بیان شده است:

دو بخش در اینجا وجود دارد.اولین بخش (select*) نشان میدهد که چه ستون هایی را میخواهید انتخاب کنید.ستاره نشان میدهد که شما میخواهید تمام ستون ها را در جدول انتخاب کنید.قسمت دوم (FROM table) به موتور دیتابیس میگوید که از کجا میخواهید این اطلاعات را بازیابی کنید."table" را با نام جدول دیتابیستان جایگزین کنید.

این انتخاب به عنوان "select star" شناخته میشود.استفاده از ستاره راه خوبی برای درک این است که چه داده ای در یک جدول است،اما من استفاده از آن را برای هیچ کد تولیدی پیشنهاد نمیکنم.زمانی که از یکselect star  استفاده میکنید،بستگی به موتور جست و جویتان دارد که چه داده ای ارائه دهد.شما هیچ کنترلی بر ترتیب داده های برگشتی نخواهید داشت،پس ، اگر کسی ستون جدید به جدول اضافه کند،ممکن است متغیرهای شما ، داده های درستی نمایش ندهندوخوشبختانه، راه حلی وجود دارد.

شما میتوانید به طور واضح نشان بدهید که چه ستون هایی را میخواهید بازگردانی کنید.مانند این:

SELECT age, name FROM people;

این کوئری ستون های "age" و "name" را از جدول "table" بازگردانی میکند.اینکار، در صورتی که اطلاعات خیلی زیادی داشته باشید، کاری خسته کننده خواهد بود، اما انجام دادنش مشکلات آینده را کاهش خواهد داد و درک SQL شما را توسط هر برنامه نویس راحتتر میکند.

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

SELECT age, '1234' FROM people;

 

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

2.Where

دستورselect برای بازگردانی داده ها عالی است،اما اگر بخواهید نتایج را کمی بیشتر فیلتر کنید باید چه کاری انجام دهید؟مثلاً انتخاب افرادی که فقط چشم های آبی دارند.یا افرادی که در ژانویه متولد شده اند و مکانیک هم هستند.در اینجا دستور where مطرح میشود.این به شما اجازه میدهد که بتوانید شرایطی به انتخابتان اضافه کنید و به سادگی در پایان عبارت آن را الصاق کنید.

SELECT age, name FROM people WHERE age > 10;

 

این کوئری حالا مختص افرادی است که بیش از 10 سالشان است.شما میتوانید شرایط مختلفی را با استفاده از اپراتور AND ترکیب کنید.

SELECT age, name FROM people WHERE age > 10 AND age < 20;

دستور AND دقیقاً مشابه زبان انگلیسی کار میکند: باعث میشود که بتوانید شرایط بیشتری به عبارت اضافه کنید. در این مثال، داده ی برگشتی میتواند هر سابقه ای در سن های بین 10 تا 20 سال باشد.از آنجاییکه نتایجی در بر نداشت، داده ای نیز برگشت نداشته است.

یک دستور دیگر که میتواند در ترکیب یا به تنهایی به کار برود ، OR است.مثال:

SELECT age, name FROM people WHERE age > 10 OR name = 'Joe';

این کوئری سوابقی که در آن ها سن بیشتر از 10 سال باشد یا نام "Joe" موجود باشد را برگشت میدهد.چگونه فقط یک نشانه ی برابر وجود خواهد داشت؟بیشتر زبان های برنامه نویسی از دو نشانه ی مساوی (==( برای بررسی برابری استفاده میکنند.این برای بیشتر موتورهای داده مورد نیاز نیست ( اما میتواند نسبت به محیط زیاد باشد، پس ابتدا از آن مطمئن شوید).

3.Order ( ترتیب)

دستور order برای طبقه بندی کردن نتایج برگشتی به کار میرود.این نیز از دستورات ساده میباشد.به راحتی میتوانید آن را در پایان عبارتتان الصاق کنید.

SELECT name, age FROM people ORDER BY age DESC;

شما نیاز دارید که ستون و ترتیب را تعریف کنید، که از ASC برای افزایش  و از DESC برای کاهش میتوانید استفاده کنید.میتوانید ستون های متعددی را مانند این مرتب کنید:

SELECT name, age FROM people ORDER BY name ASC, age DESC

در ترکیب با سایر دستورات ،شاید ORDER BY پر کاربردترین آن ها باشد.تمام کوئری ها از راهی منطقی داده ها را برگشت نخواهند داد.این دستور به شما اجازه میدهد آن را تغییر بدهید.

4.Join ( عضویت)

دستور Join برای عضویت داده های ذخیره شده در یک ستون یا بیشتر استفاده میشود.میتوانید اولین جدول را در جدول دوم عضو کنید و مشخص کنید که چگونه داده ها به هم متصل باشند.مثال:

SELECT age, name, height FROM people LEFT JOIN heights USING (name);

موارد دیگری نیز در اینجا وجود دارد.شما باید با ترکیب "LEFT JOIN" کار را آغاز کنید، این مشخص میکند که شما میخواهید در یک جدول عضو شوید.سپس، جدولی را که میخواهید در آن عضو شوید را مشخص کنید (قد) . ترکیب USING(name) بیانگر ستون "name" است که در هر دو جدول وجود دارد، و این میتواند به عنوان کلیدی برای عضویت جداول در یکدیگر باشد.

نگران این نباشید که ستون های هر جدول شما نام های مختلف دارد. میتوانید از "ON" به جای "USING" استفاده کنید.

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 انتخابی هستند.این ها ، باعث درک ساده تر میشوند،اما شما در اغلب مواقع مجبور نیستید آن ها را مشخص کنید.

5.Alias (نام مستعار)

حالا که شما با اصول اولیه آشنا شده اید بیایید به دستور alias نگاهی بندازیم.این دستور برای تغییر نام موقت یک جدول استفاده میشود، بیشتر به عنوان یک اسم مستعار. نام جدید داخل عملیات فردی است که در حال اجرا هستید.

SELECT A.age FROM people A;

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

SELECT people.age FROM people;

 

به جای استفاده از یک نام طولانی برای جدول، میتوانید نامی را انتخاب کنید که ساده باشد و به راحتی بتوانید آن را به خاطر بسپارید،اما سود این کار چیست؟ اگر شما بیش از یک ستون را انتخاب کنید، تشخیص دادن این که کدام ستون مربوط به کدام جدول است گیج کننده خواهد بود.اگر هر روی جدول های شما ستون هایی با نام مشابه داشته باشند، کوئری دیتابیس شما شاید نتواند اجرا بشود.مثالی از این مورد با دو جدول:

SELECT staff.age, staff.name, customers.age, customers.name FROM staff, customers;

و مثالی از کوئری مشابه با نام های مستعار:

SELECT A.age, A.name, B.age, B.name FROM staff A, customers B;

جدول کارکنان نام مستعار A  را دارد و جدول مشتریان نام مستعار B.نام گذاری جدول ها باعث میشود که کد شما قابل فهم تر باشد و تایپ کردن شما را نیز کم میکند.

شما همینطور میتوانید یک ستون را با دستور "AS"  تغییر نام دهید:

SELECT age AS person_age FROM people;

زمانی که این کوئری در حال اجراست، ستون به جای "age" به نام  "person age" نامیده میشود.

6.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;

دقت کنید که ترتیب ردیف ها چگونه تغییر میکنند.Union به کارآمدترین شکل ممکن کار میکند، بنابر این، داده ی برگشتی میتواند ترتیب متنوعی داشته باشد.

یک مورد استفاده ی احتمالی از union، subtotal است: شما میتوانید جمع کلی یک کوئری را از جمع های انفرادی به منظور هدفی خاص داشته باشید.

7.Insert (قراردهی)

شما همه چیز را درباره ی بازیابی داده ها از دیتابیس میدانید، اما در موردن قرار دادن قضیه از چه قرار است؟ در اینجا دستور insert استفاده میشود.

INSERT INTO people(name, age) VALUES('Joe', 102);

شما باید نام جدول (افراد) و ستون هایی که میخواهید استفاده کنید (نام و سن) را مشخص کنید.ترکیب "VALUES" برای فراهم کردن مقادیری که میخواهند قرار داده بشوند، استفاده میشود.این ها باید ترتیبی مشابه با ستون ها داشته باشند.

شما نمیتوانید شرط where را برای قراردهی استفاده کنید، و باید اطمینان حاصل کنید که تمام محدودیت های یک جدول ارائه شده را دنبال میکنید.

8.Update  (بروزرسانی)

پس از قرار دادن برخی از داده ها، طبیعی است که تغییراتی در برخی از ردیف ها نیاز باشد.ترکیبی از دستور update در این مثال نشان داده شده است:

UPDATE people SET name = 'Joe', age = 101;

شما باید جدولی را که میخواهید تغییر بدهید، مشخص کنید.وسپس از ترکیب "SET" برای مشخص کردن ستون ها و مقادیر جدیدشان استفاده کنید.این مثال خوبی است، اما همه ی سوابق تکی را آپدیت میکند،چیزی که همیشه مطلوب به نظر نمی آید.

برای خاصتر بودن، میتوانید از شرط "WHERE " درست شبیه به بخش انتخاب کردن استفاده کنید:

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';

دقت کنید که براکت ها چگونه برای محدود کردن شرایط مورد استفاده قرار گرفته اند.

9.Upsert

Upsert کلمه ی عجیبی است، اما دستوری فوق العاده کاربردی است.اگر شما محدودیتی در جدولتان داشته باشید،و مشخص کرده باشید که فقط خودتان سوابق را با نام های خاص میخواهید،نمیخواهید که دو ردیف را با یک نام مشابه ذخیره کنید.برای مثال، اگر تلاش کرده باشید که مقداری به اسم "Joe" را قرار بدهید، موتور دیتابیس شما خطایی را نشان میدهد و این کار را انجام نمیدهد.دستور UPSERT به شما اجازه میدهد که یک سابقه را در صورت موجود بودن، ضبط کنید.این کاملاً کاربردی است!بدون این دستور، باید روابطی طولانی را بنویسید تا ببینید آیا سابقه موجود است یا خیر.اگر موجود نبود آن را قرار بدهید، از طرفی دیگر کلید درست را بازیابی کنید و سپس آپدیت کنید.

متأسفانه، upsertها در موتورهای دیتابیس مختلف، به روش های مختلفی به کار میروند.PostgreSQL اخیراً این قابلیت را بدست آورده است، در حالی که MySQL مدتی است که این امکان را دارد.در پایین ترکیب MySQL برای منبع استفاده شده است:

INSERT INTO people(name, age)

VALUES('Joe', 101)

ON DUPLICATE KEY UPDATE age = 101;

دقت داشته باشید که چقدر عبارت update  و insert مهم است، که میتواند به عنوان "update if insert fails" خلاصه بشود.

10.delete (حذف کردن)

Delete برای حذف کلیه ی سوابق استفاده میشود.اگر به طور درستی از آن استفاده نشود، میتواند کاملاً آسیب زننده باشد.ترکیب ابتدایی بسیار ساده است:

DELETE FROM people;

مانند سایر دستورات، این دستور همه چیز را حذف میکند! شما باید بدانید که در چه جایی باید از آن استفاده کنید.

DELETE FROM people WHERE name = 'Joe';

اگر شما در حال توسعه ی یک سیستم هستید،عاقلانه است که از یک "soft delete" استفاده کنیدوشما در واقع هیچوقت دستور حذف را اجرا نمیکنید،به این وسیله میتوانید سوابقی که به اشتباه حذف شده را بازگردانی کنید.

11.Create table (ایجاد جدول)

دستور create table برای ایجاد جداول استفاده میشود:

CREATE TABLE people (

  name TEXT,

  age, INTEGER,

  PRIMARY KEY(name)

);

دقت داشته باشید که نام های ستون ها و محدودیت ها چگونه در براکت ها قرار گرفته اند و ستون ها دیتاتایپ مناسبی دارند.یک کلید اصلی مشخص شده است، چون در طراحی دیتابیس ها مورد نیاز است.

12.Alter Table (تغییر دادن یک جدول)

دستور alter table برای اعمال تغییرات در ساختار یک جدول به کار میرود.این نسبتاًمحدود شده است، اگر داده های موجود باعث ناسازگاری شوند، دیتابیس شما اجازه نمیدهد که یک جدول را تغییر بدهید.مثلاً یک string را به یک integer تبدیل کنید.در این نمونه ها، ابتدا داده ها را اصلاح کنید، سپس جدول را تغییر بدهید.

ALTER TABLE people ADD height integer;

این مثال یک ستون به نام "heights" از نوع integr اضافه میکند.محدودیتی بر چیزی که تغییر میدهید وجود ندارد.

13.Drop Table

دستور آخر، drop table است.این دستور را مثل دستور delete به حساب بیاورید،اما نسبت به delete، این دستور تمامی سوابق را به همراه جدول حذف میکند! چگونگی استفاده از آن:

DROP TABLE people;

این کاملاً یک دستور جدی است، و دلیلی ندارد که در سیستم شما برنامه نویسی شود.این دستور باید تنها در موارد گسترده استفاده بشود ، در این صورت تخریب کننده خواهد بود.

خب!این مطلب امروز بود.امیدوارم که راه های کارآمدی یادگرفته باشید.شما میتوانید یاد بگیرید که چگونه یک وب سایت بسازید و سپس از مهارت های جدیدتان برای پویایی سایت استفاده کنید.

 منبع: makeuseof

 مطالب مرتبط

آموزش جامع SQL Server
چگونه از حملات نفوذ کننده به SQL جلوگیری کنیم؟
 طبقه بندی زبان های برنامه نویسی
روش‌های هوشمندانه برای استفاده از "تلفیق" در SQL
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۳۱: توابع رشته‌ای – بخش ۳)
آموزش جامع SQL Server (جلسه ۳۱: توابع رشته‌ای – بخش ۳)

در جلسه قبل بخش ۲ مطالب مبحث توابع رشته‌ای یا string را به صورت کامل توضیح دادیم. و ...

آموزش جامع SQL Server (جلسه ۳۰: توابع رشته‌ای – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۰: توابع رشته‌ای – بخش ۲)

در جلسه قبل، مبحث توابع رشته‌ای یا String را آغاز کردیم. به دلیل ازدیاد این توابع و برای ...

با Visual Studio Code’s Live Share گروهی برنامه‌نویسی کنیم!
با Visual Studio Code’s Live Share گروهی برنامه‌نویسی کنیم!

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

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات