تمام توسعهدهندگان وب باید SQL را بدانند. اگرچه SQL از دهه ۷۰ به بعد ایجاد شد، اما هم اکنون نیز به صورت وسیعی از آن استفاده میشود. در حقیقت اگر اپلیکیشنی از SQL استفاده نکند نمیتواند بسیار جدی باشد. بیشتر فریمورکهای امروزی با ارائه راهکارهایی پیچیدگیهای SQL را سادهتر کردهاند و شما میتوانید کارهای مختلفی را در محیط آنها انجام دهید. اما قبل از اینکه با آنها کار کنید نیاز است تا حدی دستی بر مقدمات آن بکشید و SQL را در منطق اصلی درک کنید.
به همین دلیل است که ما در این پست مشغول آماده کردن مقدماتی در رابطه با پایههای SQL هستیم. در این پست با دستورات مختلف آشنا خواهید شد و میتوانید تمام آنها را در محیط SQL مورد نظر خود اجرا کنید. اگر میخواهید به صورت آنلاین تمام موارد را امتحان کنید پیشنهاد میشود که از trySQL استفاده کنید.
بیایید شروع کنیم!
۱. ایجاد جدول
وقتی میخواهید یک جدول جدید را ایجاد کنید نیاز است که دستور CREATE TABLE را فراخوانی کنید. این دستور یکسری آرگومانها را میگیرد که شامل ستونهایی است که ما میخواهیم. همچنین نوع دادهای آنها را نیز باید وارد کنیم.
در اینجا ما یک جدول جدید با نام months ساختیم. این جدول شامل سه ستون است:
- id - تعداد ماهها در یک تقویم (عدد صحیح)
- name - نام ماهها (رشته، حداکثر ۱۰ کاراکتر)
- days - تعداد روزها در آن ماه (عدد صحیح)
در نهایت شیوه کدهای ما به صورت زیر خواهد بود:
CREATE TABLE months (id int, name varchar(10), days int);
همچنین وقتی قصد ایجاد جدول را دارید، پیشنهاد میشود که یک کلید اصلی را به ستونها اضافه کنید. این حالت یک مقدار منحصر به فرد را دریافت میکند و در کوئریهای مربوط به انتخاب سرعت شما را بالا میبرد. ما در رابطه با این موضوع اینجا صحبت نمیکنیم اما میتوانید در این لینک در رابطه با آن مطالعه نمایید.
۲. وارد کردن ردیفها
حال بیایید months را با مقداری اطلاعات پر کنیم. اضافه کردن مقدار به جدول با استفاده از دستور INSERT انجام میشود. دو راه مختلف برای استفاده از این دستور وجود دارد:
در حالت اول شما ستونها را تعیین نمیکنید و در نهایت دادهها به صورت ترتیبی وارد ستونهای مربوطه میشوند:
INSERT INTO months VALUES (1,'January',31);
کوئری بالا کوتاهتر است اما ممکن است در آینده مشکلاتی را بوجود بیاورد. برای مثال زمانی که یک ستون دیگر نیز اضافه شد کوئری دیگر به درستی کار نمیکند. راهی که معمولا ترجیح داده میشود به صورت زیر است:
INSERT INTO months (id,name,days) VALUES (2,'February',29);
در حالت بالا ما نام ستونها را مشخص کرده و بعد از آن مقادیر را اضافه میکنیم.
تمرین: با استفاده از دستور INSERT ماههای بیشتری را به جدول اضافه کنید.
۳. انتخاب
زمانی که بخواهیم از بانک اطلاعاتی دادههایی را فراخوانی کنیم و بیرون بکشیم، Select یکی از بهترین دوستهای ما خواهد بود. از آنها همیشه استفاده میشود، پس نیاز است به درستی آن را بدانیم.
یک مثال ساده از دستور SELECT، کوئری خواهد بود که در آن تمام ستونها و ردیفها به ما برگشت داده خواهد شد:
SELECT * FROM "characters"
معنی علامت ستاره (* ) این است که ما تمام ستونهای داخل جدول characters را میخواهیم. از آنجایی که بانکهای اطلاعاتی معمولا حاوی بیشتر از یک جدول هستند پس نیاز است که با استفاده از دستور FROM جدول مورد نظرمان را انتخاب کنیم.
برخی اوقات ما تمام ستونهای داخل جدول را نمیخواهیم. SQL در این شرایط نیز به ما اجازه میدهد که بتوانیم موارد مورد استفاده را انتخاب کنیم. در این حالت بجای قرار دادن علامت ستاره، ما نام ستونهای مورد نیاز را مینویسیم.
SELECT name, weapon FROM "characters"
همچنین در بعضی از حالات ما دوست داریم که نتایج به صورت مرتب شده به ما نمایش داده شوند. در SQL ما این کار را با استفاده از ORDER BY انجام میدهیم. به صورت پیشفرض این مورد مقدار ASC را میگیرد، اما شما میتوانید از DESC استفاده کنید:
SELECT name, weapon FROM "characters" ORDER BY name DESC
تمرین: کوئری بنویسید که ستونهای name، race و hobby را انتخاب کند.
۴. Where
شما شیوه انتخاب یک ستون منحصر به فرد را یاد گرفتید، اما اگر یک ردیف منحصر به فرد را خواستید چه؟ برای پیادهسازی چنین از دستور WHERE استفاده میکنیم. این دستور به ما اجازه میدهد که براساس دستوراتی منطقی، دادهها را فیلتر کنیم.
برای مثال در قطعه کد پایین ما تنها weaponهایی را انتخاب میکنیم که از pistol برای جنگیدن استفاده میکند:
SELECT *
FROM "characters"
WHERE weapon = "pistol"
تمرین: کوئری Select را به صورتی بنویسید که ستونهای name, race و hobby را برای کاراکترهای «Wookiees» بنویسید.
۵. And / OR
دستور Where درست به همان حالتی که شما میخواهید میتواند منطق را با استفاده از عملگرهایی مانند And / Or انجام دهد. همچنین این کار از طریق عملگرهای مقایسه مانند (=,<,>,<=,>=,<>) نیز انجام میشود.
در اینجا ما یک جدول داریم که در آن ۴ آلبوم بیشتر فروخته شده در جهان را در خود دارد. قصد داریم مواردی را انتخاب کنیم که rock هستند و تعداد فروششان کمتر از/مساوی ۵۰ میلیون نسخه است. این کار به سادگی با استفاده از عملگر AND قابل پیادهسازی است.
SELECT *
FROM albums
WHERE genre = 'rock' AND sales_in_millions <= 50
ORDER BY released
تمرین: سعی کنید کوئری بنویسید که آلبومهای منتشر شده از بعد سال ۱۹۷۵ همراه با فروش کمتر از ۶۰ میلیون را انتخاب کنید.
۶. In/Between/Like
دستورات WHERE از چندین دستور منحصر به فرد نیز پشتیبانی میکنند، با استفاده از این دستورات میتوانید روند انتخابی منحصر به فردی را پیش بگیرید:
- IN - ستون را با مقادیر ممکن موجود مقایسه کرده و اگر حداقل یک مورد درست باشد مقدار را برمیگرداند.
- Between - بررسی میکند که یک مقدار در یک محدوده قرار دارد یا خیر.
- Like - جستجو به دنبال یک الگوی منحصر به فرد
برای مثال اگر بخواهیم کوئری را برای انتخاب آلبومهای pop و soul بنویسیم، میتوانیم از دستور IN("value1","value2") استفاده نماییم.
SELECT * FROM albums WHERE genre IN ('pop','soul');
اگر بخواهیم که تمام آلبومهای بین سال ۱۹۷۵ تا ۱۹۸۵ را دریافت کنیم از حالت زیر استفاده مینماییم:
SELECT * FROM albums WHERE released BETWEEN 1975 AND 1985;
تمرین: تمام عملگرهایی که در بالا مقایسه شد توسط یک دستور Not قابلیت نفی کردن را دارند. برای مثال سعی کنید که از دستور NOT BETWEEN استفاده کنید تا نتیجه را مشاهده نمایید.
7. Functions
SQL توسط توابع بسته بندی شده است. این توابع کارهای مفیدی را برای ما انجام میدهند. در اینجا میتوانید مواردی که به صورت مداوم استفاده میشود را مشاهده کنید:
- COUNT() - برگشت تعداد ردیفها
- SUM() - جمع کردن ستونهای عددی
- AVG() - بدست آوردن میانگین
- MIN () / MAX() - بدست آوردن کمترین و بیشترین مقدار
برای دریافت مواردی که مربوط به تازهترین سال انتشار میشود، کد زیر را اجرا کنید:
SELECT MAX(released) FROM albums;
تمرین: سعی کنید که SUM را با WHERE ترکیب کرده و تمام نسخههای فروخته شده از آلبومهای rock را بدست بیاورید.
۸. Nested Select
در قسمت قبلی ما شیوه محاسبه یک داده ساده را دریافتیم. اگر قصد داشته باشیم که به صورت واقعی از این محاسبهها استفاده کنیم، بیشتر اوقات استفاده از کوئریهای تودرتو الزامی است. حالتی که قصد داریم از قدیمیترین آلبوم ستونهای artist, album , release year را دریافت کنیم، فرض نمایید.
ما میدانیم که به چه صورت ستونهای منحصر به فرد را دریافت کنیم:
SELECT artist, album, released FROM albums;
همچنین شیوه دریافت قدیمیترین سال را میدانیم:
SELECT MIN(released) FROM album;
حال چیزی که نیاز داریم ترکیب کردن این دو مورد با استفاده از WHERE است:
SELECT artist,album,released
FROM albums
WHERE released = (
SELECT MIN(released) FROM albums
);
تمرین: به صورتی کد بالا را تغییر دهید که مقدار ستونهای album, gener و year را برای جدیدترین آلبوم برگشت دهد.
9. Joining Tables
در بانکهای اطلاعاتی پیچیدهتر، بیشتر اوقات جدولهای مختلفی وجود دارد که به همدیگر از طریقهای مختلفی متصل هستند. برای مثال در جدول پایین ما دو جدول در رابطه با بازیهای ویدیویی و توسعهدهندگان بازیهای ویدیویی داریم.
در جدول video_games یک ستون developer وجود دارد که در آن بجای نام توسعهدهنده از یک عدد صحیح استفاده شده است. این عدد id توسعهدهنده در جدول game_developers را نشان میدهد. در این حالت یک راه اتصال و ارتباط بوجود آمده است.
اگر میخواهیم یک کوئری که همه چیز را برگشت میدهد ایجاد کنیم نیاز است که در رابطه با بازیها اطلاعاتی داشته باشیم، میتوانیم با استفاده از INNER JOIN تمام ستونهای هر دو جدول را برگشت دهیم.
SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country
FROM video_games
INNER JOIN game_developers
ON video_games.developer_id = game_developers.id;
این حالت سادهترین و پر استفادهترین حالت برای استفاده از دستور JOIN است. گزینههای دیگری نیز برای این سناریو وجود دارد که میتوانید از طریق این لینک آنها را مطالعه کنید.
10. Aliases
اگر به مثال قبلی نگاه کنید مشاهده میکنید که ما دو ستون با نام name داریم. این موضوع سردرگم کننده است، بنابراین باید حالت نمایشی یکی از موارد را تغییر دهیم. برای مثال میتوانید name را از جدول game_developers به developer تغییر دهیم.
همچنین میتوانیم نام جداول را نیز کوتاهتر بکنیم. برای مثال video_games را به games و game_developers را به devs تغییر دهیم.
SELECT games.name, games.genre, devs.name AS developer, devs.country
FROM video_games AS games
INNER JOIN game_developers AS devs
ON games.developer_id = devs.id;
11. Update
اغلب اوقات نیاز است که دادههایمان در ردیفها را تغییر دهیم. در SQL این کار با استفاده از دستور UPDATE انجام میشود. حالت استفاده از این دستور به صورت زیر است:
- انتخاب جدول در جایی که رکورد قرار گرفته است.
- قرار دادن مقدار جدید برای مکانی که میخواهیم.
- انتخاب ردیفی که قصد بروزرسانی آن را داریم. این کار با استفاده از WHERE انجام میدهیم. در صورت حذف این قسمت تمام ردیفها تحت تاثیر قرار میگیرند.
در زیر میتوانید جدولی از سریالهایی با امتیاز بالا را مشاهده کنید. یک مشکل در جدول وجود دارد و آن این است که سریال Game of Thrones به عنوان سریالی کمدی نوشته شده که مسلما اشتباه است. بیاید آن را حل کنیم:
UPDATE tv_series
SET genre = 'drama'
WHERE id = 2;
تمرین: بیاید تصور کنیم که فصل جدیدی از سریال Breaking Bad در حال ساخت است. کوئری بنویسید ک مقدار ستون still_running را به yes تبدیل کند.
12. Delete Rows
حذف کردن یک ردیف در یک جدول کار آسانی است. تنها چیزی که نیاز دارید انتخاب ردیف درست برای حذف کردن است.
DELETE FROM tv_series
WHERE id = 4
نکته مهم: همواره در زمان استفاده کردن از دستور DELETE مراقب باشید و مطمئن شوید که از دستور WHERE استفاده کردهاید. در غیر اینصورت تمام جدول حذف میشود.
13. Deleting Tables
اگر قصد حذف کردن تمام ردیفها را دارید اما نمیخواهید خود جدول حذف شود، دستور مناسب TRUNCATE است:
TRUNCATE TABLE table_name;
اگر قصد حذف کامل جدول را داریم میتوانیم از دستور DROP استفاده کنیم:
DROP TABLE table_name;
اما در استفاده از این دستور هوشیار باشید. هیچ دکمه برگشتی وجود ندارد!
اهمیت یادگیری SQL
یادگیری SQL (Structured Query Language) از اهمیت بالایی برخوردار است، زیرا SQL زبان استاندارد برای ارتباط با پایگاههای داده رابطهای است. درک و استفاده از SQL مزایای متعددی برای توسعهدهندگان نرمافزار، تحلیلگران داده، مدیران پایگاه داده، و حتی بازاریابان دارد. این مزایا عبارتند از:
-
دسترسی به دادهها: SQL به کاربران اجازه میدهد تا دادهها را به طور موثر جستجو، بازیابی، اضافه کردن، بهروزرسانی و حذف کنند. این امکانات برای مدیریت دادهها در سیستمهای پایگاه داده رابطهای ضروری است.
-
تجزیه و تحلیل دادهها: SQL ابزارهای قدرتمندی برای تجزیه و تحلیل دادهها ارائه میدهد، از جمله توابع تجمیع، جوینها (joins)، و زیرپرسشها (subqueries)، که به تحلیلگران داده اجازه میدهد اطلاعات مفیدی از دادههای خام استخراج کنند.
-
قابلیت انعطاف و همهگیری: SQL یک استاندارد صنعتی است و تقریباً توسط تمام پایگاههای داده رابطهای پشتیبانی میشود. این امر به معنای آن است که دانش SQL میتواند در محیطها و پروژههای متنوعی مورد استفاده قرار گیرد.
-
مهارت مورد نیاز در بازار کار: دانش SQL یکی از مهارتهای کلیدی مورد نیاز برای بسیاری از نقشهای فناوری اطلاعات است، از جمله توسعه نرمافزار، تحلیل دادهها، علوم داده، و مدیریت پایگاه داده.
-
تصمیمگیری مبتنی بر داده: دانش SQL به کاربران کمک میکند تا دادهها را برای به دست آوردن بینشهایی که میتواند در تصمیمگیریهای کسبوکار نقش داشته باشد، تجزیه و تحلیل کنند.
-
پشتیبانی از توسعه وب و برنامههای کاربردی: بسیاری از برنامههای کاربردی وب و موبایل از پایگاههای داده برای ذخیرهسازی اطلاعات کاربران، تراکنشها و سایر دادهها استفاده میکنند. دانش SQL برای توسعه و نگهداری این برنامهها ضروری است.
-
پایهای برای یادگیری مفاهیم پیشرفتهتر: درک SQL پایه و اساس خوبی برای یادگیری فناوریهای پیشرفتهتر در زمینه پایگاههای داده، مانند NoSQL، علوم داده، و تجزیه و تحلیل بزرگداده فراهم میکند.
بنابراین، یادگیری SQL نه تنها برای کسانی که در حوزههای مرتبط با فناوری اطلاعات کار میکنند بلکه برای کسانی که به دادهها و تحلیل آنها علاقهمند هستند، مفید است.
در پایان
این آموزش تنها با بررسی موارد ضروری و ساده قصد دارد که شما را با موارد پایه آشنا کند، موارد بسیار دیگری وجود دارد که نیاز است یاد بگیرید. برای پیدا کردن اطلاعات بیشتر در زمینه SQL میتوانید منابع زیر را مشاهده کنید:
Codeacademy SQL course - here
SQL Fiddle: online tool for testing and sharing SQL - here
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید