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