یادگیری SQL در ۲۰ دقیقه

گردآوری و تالیف : ارسطو عباسی
تاریخ انتشار : 25 خرداد 1397
دسته بندی ها : آموزشی

تمام توسعه‌دهندگان وب باید 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);

در حالت بالا ما نام ستون‌ها را مشخص کرده و بعد از آن مقادیر را اضافه می‌کنیم. 

sql

تمرین: با استفاده از دستور 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 را انتخاب کند.

learn-sql-in-20-minutes

۴. 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 می‌توانید منابع زیر را مشاهده کنید:

Codeacademy SQL course - here
SQL Fiddle: online tool for testing and sharing SQL - here

منبع

برچسب :
این مطلب را با دیگران به اشتراک بگذارید :

مقالات پیشنهادی

آموزش less در 10 دقیقه

همه ما میدونیم که نوشتن کد های css کمی خسته کننده است ، مخصوصا زمانی که روی یه پروژه جدی با هزاران خط کد کار میکنیم . شما مجبورید تا آخر پروژه کد های...

یادگیری Flexbox با بازی

Flexbox Froggy یک بازی جذاب برای یادگیری Flexbox که شما باید با استفاده ازFlexbox به froggy و دوستانش کمک کنید به مناطق مورد نظرشون برن . اگر نمی دونی...

آموزش استفاده از SQLite در Node.js

SQLite شامل موتور دیتابیس هست که سروری برای اجرا شدن لازم نداره. (برای MySQL و اوراکل نیاز به سرور دیتابیس داریم). SQLite محبوب ترین در بین توسعه دهند...

روند‌های طراحی وب در سال ۲۰۱۷

با نزدیک شدن به پایان سال ۲۰۱۷، وقت آن است که با همدیگر نگاهی به قابل‌ توجه ترین روند‌های طراحی وب در سال ۲۰۱۷ بیاندازیم. در این مطلب می‌توانید شاهد ل...