آموزش SQL از صفر؛ یادگیری پایگاه داده و SQL Server
آموزش SQL از صفر با مثال: جدول، SELECT، WHERE، JOIN، GROUP BY، طراحی پایگاه داده و کار با SQL Server در کنار C# و EF Core برای ساخت پروژه واقعی.
آموزش SQL یعنی یاد گرفتن زبانی که با آن دادهها را در پایگاه داده ذخیره، جستوجو، ویرایش و حذف میکنید. تقریبا هر نرمافزاری که اطلاعات کاربر، محصول یا سفارش نگه میدارد، پشت صحنه از یک پایگاه داده استفاده میکند و SQL زبان مشترک کار با آن است.
در این راهنما از آکادمی برنامه نویسی بدیعی یاد میگیرید پایگاه داده رابطهای چیست، دستورات اصلی SQL کداماند، SQL Server چه جایگاهی دارد و چطور SQL را در یک پروژه واقعی وب به کار ببرید.
SQL چیست و چرا هر برنامهنویسی باید آن را بلد باشد؟
SQL (مخفف Structured Query Language) زبان استاندارد کار با پایگاه دادههای رابطهای است. با آن به پایگاه داده میگویید چه دادهای میخواهید، نه اینکه آن را چطور پیدا کند.
چرا SQL مهم است:
همهجا هست: سایت فروشگاهی، سیستم حسابداری، اپلیکیشن موبایل و پنل مدیریت، همه داده ذخیره میکنند.
مهارت مشترک: چه با C# کار کنید، چه Python یا PHP، مفاهیم SQL تقریبا یکسان است.
برای بکاند ضروری است: برنامهنویس بکاند بدون فهم پایگاه داده نمیتواند سیستم سریع و درست بسازد.
کاربرد بیرون از برنامهنویسی: تحلیلگرهای داده و حتی مدیران محصول هم از SQL استفاده میکنند.
پایگاه داده رابطهای به زبان ساده
پایگاه داده رابطهای مجموعهای از جدولهاست که با هم ارتباط دارند. هر جدول شبیه یک صفحه اکسل است: ستونها نوع اطلاعات را مشخص میکنند و هر ردیف یک رکورد است.
مثال: یک فروشگاه اینترنتی دستکم این جدولها را دارد:
Customers: اطلاعات مشتریها.
Products: اطلاعات محصولات.
Orders: سفارشها، که به مشتری وصل هستند.
مفاهیم کلیدی:
کلید اصلی (Primary Key): ستونی که هر ردیف را یکتا مشخص میکند؛ مثلا Id .
کلید خارجی (Foreign Key): ستونی که به کلید اصلی جدول دیگر اشاره میکند؛ مثلا CustomerId در جدول سفارشها.
رابطه یکبهچند: یک مشتری میتواند چند سفارش داشته باشد.
رابطه چندبهچند: یک سفارش چند محصول دارد و یک محصول در چند سفارش هست؛ این رابطه با یک جدول واسط ساخته میشود.
سیستمهای پایگاه داده رایج؛ SQL Server و بقیه
SQL یک زبان است، اما برای اجرای آن به یک سیستم مدیریت پایگاه داده (DBMS) نیاز دارید. SQL Server، MySQL، PostgreSQL و SQLite از رایجترین آنها هستند.
سیستم ویژگی کلی کاربرد رایج
SQL Server محصول مایکروسافت، هماهنگی بسیار خوب با .NET پروژههای C# و ASP.NET Core، سیستمهای سازمانی
MySQL متنباز و رایج در هاستهای اشتراکی سایتهای PHP و وردپرس
PostgreSQL متنباز با امکانات پیشرفته پروژههای متنوع وب و داده
SQLite سبک، بدون سرور، در یک فایل اپ موبایل، پروژههای کوچک و تست
دستورات پایه SQL در همه این سیستمها تقریبا یکسان است. تفاوت بیشتر در امکانات پیشرفته و بعضی جزئیات نوشتاری است. اگر مسیر شما C# و ASP.NET Core است، آموزش SQL Server انتخاب طبیعی است.
⚠️ نسخهها، نسخههای رایگان (مثل Express یا Developer) و شرایط مجوز SQL Server ممکن است تغییر کرده باشد . برای یادگیری معمولا یک نسخه رایگان کافی است.
دستورات اصلی SQL با مثال
چهار کار اصلی با داده، یعنی خواندن، افزودن، ویرایش و حذف، با دستورات SELECT، INSERT، UPDATE و DELETE انجام میشود. به این چهار عمل در برنامهنویسی CRUD میگویند.
ساخت جدول با CREATE TABLE
CREATE TABLE Products (
Id INT PRIMARY KEY IDENTITY(1,1),
Title NVARCHAR(200) NOT NULL,
Price DECIMAL(18,2) NOT NULL,
Stock INT NOT NULL DEFAULT 0
);
در SQL Server، IDENTITY(1,1) یعنی شناسه خودکار از ۱ شروع شود و یکییکی زیاد شود. نوع NVARCHAR برای ذخیره درست متن فارسی مناسب است.
افزودن داده با INSERT
INSERT INTO Products (Title, Price, Stock)
VALUES (N'کتاب آموزش SQL', 250000, 10);
حرف N قبل از متن فارسی در SQL Server باعث میشود متن یونیکد ذخیره شود و حروف خراب نشوند.
خواندن داده با SELECT و WHERE
SELECT Title, Price
FROM Products
WHERE Price < 500000
ORDER BY Price DESC;
این دستور محصولات ارزانتر از مقدار مشخص را از گران به ارزان برمیگرداند.
ویرایش و حذف
UPDATE Products SET Stock = Stock - 1 WHERE Id = 1;
DELETE FROM Products WHERE Stock = 0;
هشدار مهم: هیچوقت UPDATE یا DELETE را بدون WHERE اجرا نکنید، مگر واقعا بخواهید همه ردیفها تغییر کنند یا حذف شوند.
دستورات پیشرفتهتر SQL؛ JOIN و GROUP BY
JOIN دادههای چند جدول را به هم وصل میکند و GROUP BY دادهها را دستهبندی و خلاصه میکند. این دو دستور معمولا مرز بین مبتدی و کسی است که واقعا SQL را بلد است.
JOIN برای ترکیب جدولها
SELECT o.Id, c.FullName, o.OrderDate
FROM Orders o
INNER JOIN Customers c ON o.CustomerId = c.Id;
انواع رایج JOIN:
INNER JOIN: فقط ردیفهایی که در هر دو جدول جفت دارند.
LEFT JOIN: همه ردیفهای جدول چپ، حتی اگر جفت نداشته باشند.
RIGHT JOIN و FULL JOIN: کمتر استفاده میشوند، اما خوب است مفهومشان را بدانید.
GROUP BY و توابع تجمعی
SELECT c.FullName, COUNT(o.Id) AS OrderCount
FROM Customers c
LEFT JOIN Orders o ON o.CustomerId = c.Id
GROUP BY c.FullName
HAVING COUNT(o.Id) > 2;
توابع تجمعی پرکاربرد: COUNT ، SUM ، AVG ، MIN و MAX . از HAVING برای فیلتر روی نتیجه گروهبندی استفاده میشود.
اصول طراحی پایگاه داده
طراحی خوب پایگاه داده یعنی هر داده فقط یک بار و در جای درست ذخیره شود. طراحی بد، بعدا باعث داده تکراری، ناسازگاری و کندی میشود.
اصول پایه:
نرمالسازی: اطلاعات تکراری را در جدول جدا بگذارید و با کلید خارجی وصل کنید.
نامگذاری یکدست: مثلا اسم جدولها جمع و انگلیسی، ستونها واضح.
نوع داده درست: قیمت را DECIMAL بگیرید، نه FLOAT ؛ متن فارسی را NVARCHAR .
ایندکس روی ستونهای پرجستوجو: سرعت جستوجو را بالا میبرد، اما زیادی آن نوشتن را کند میکند.
محدودیتها (Constraints): با NOT NULL ، UNIQUE و کلید خارجی جلوی داده نامعتبر را بگیرید.
SQL در پروژه واقعی؛ C#، ASP.NET Core و EF Core
در پروژههای واقعی داتنت، معمولا مستقیم SQL نمینویسید بلکه از ORM مثل Entity Framework Core استفاده میکنید، اما فهم SQL همچنان ضروری است. EF Core کد C# شما را به دستورات SQL تبدیل میکند.
یک مثال ساده از گرفتن محصولات ارزان با EF Core:
var cheapProducts = await _context.Products
.Where(p => p.Price < 500000)
.OrderByDescending(p => p.Price)
.ToListAsync();
این کد در پشت صحنه به دستوری شبیه SELECT با WHERE و ORDER BY تبدیل میشود که بالاتر دیدید.
چرا با وجود ORM هنوز باید SQL بلد باشید:
عیبیابی کندی: باید بفهمید ORM چه کوئریای ساخته و چرا کند است.
طراحی درست جدولها: ORM جای فکر کردن به رابطهها و ایندکسها را نمیگیرد.
گزارشهای پیچیده: گاهی نوشتن کوئری مستقیم سادهتر و سریعتر است.
مصاحبه شغلی: سوال SQL در مصاحبههای بکاند بسیار رایج است.
برای آشنایی با فریمورکی که این کدها در آن اجرا میشود، مقاله آموزش ASP.NET Core را بخوانید.
امنیت پایگاه داده؛ خطر SQL Injection
SQL Injection یعنی مهاجم با وارد کردن متن خاص در فرم، دستور SQL شما را تغییر دهد. این یکی از شناختهشدهترین و خطرناکترین حملهها به سایتهاست.
راههای پیشگیری:
هیچوقت ورودی کاربر را مستقیم به رشته SQL نچسبانید.
از کوئری پارامتری (Parameterized Query) استفاده کنید.
ORMها مثل EF Core در حالت عادی کوئری پارامتری میسازند و این خطر را کم میکنند.
کاربر پایگاه داده با کمترین دسترسی لازم بسازید، نه با دسترسی مدیر کامل.
مسیر یادگیری پایگاه داده قدمبهقدم
مسیر پیشنهادی: مفاهیم رابطهای، دستورات پایه، JOIN و گروهبندی، طراحی پایگاه داده، و در آخر اتصال به یک زبان برنامهنویسی.
قدم ۱: نصب و آشنایی با محیط
یک سیستم پایگاه داده (مثلا SQL Server) و ابزار مدیریت آن را نصب کنید. ⚠️ ابزارهای مدیریتی و روش نصب ممکن است تغییر کرده باشد .
قدم ۲: CRUD پایه
جدول بسازید و چهار دستور اصلی را روی آن تمرین کنید.
قدم ۳: کوئریهای ترکیبی
JOIN، GROUP BY، زیرکوئری و توابع تجمعی.
قدم ۴: طراحی
یک پایگاه داده کامل برای یک ایده واقعی (کتابخانه، فروشگاه، سیستم تیکت) طراحی کنید.
قدم ۵: اتصال به برنامه
با C# و EF Core یا هر زبانی که یاد میگیرید، پایگاه داده را به یک برنامه وصل کنید.
اگر میخواهید جایگاه پایگاه داده را در کل مسیر بکاند ببینید، مقاله برنامه نویسی بک اند را بخوانید.
تمرینها و پروژههای پیشنهادی SQL
تمرین با داده واقعی و یک سناریوی ملموس، سریعترین راه تسلط بر SQL است. چند ایده:
پایگاه داده کتابخانه: کتاب، نویسنده، عضو و امانت.
فروشگاه ساده: مشتری، محصول، سفارش و آیتم سفارش؛ گزارش پرفروشترین محصولات.
سیستم ثبت نمره: دانشجو، درس و نمره؛ محاسبه معدل با AVG .
سیستم تیکت پشتیبانی: کاربر، تیکت و پاسخ؛ گزارش تیکتهای باز.
جمعبندی
آموزش SQL یکی از ارزشمندترین سرمایهگذاریها برای هر برنامهنویس است. با فهم پایگاه داده رابطهای، دستورات CRUD، JOIN، GROUP BY و اصول طراحی میتوانید دادههای هر نرمافزاری را درست مدیریت کنید. اگر مسیر شما داتنت است، SQL Server در کنار EF Core ترکیب رایج و کاربردی است.
اگر میخواهید کار با پایگاه داده را در یک پروژه واقعی وب یاد بگیرید ، دوره جامع فولاستک وب طلایی شامل C#، ASP.NET Core و EF Core است. برای تمرین روی یک سناریوی تجاری کامل هم دوره پروژه فروشگاه اینترنتی [[جایخالی: لینک صفحه دوره فروشگاه اینترنتی]] با C#، ASP.NET Core و SQL Server را ببینید، یا برای انتخاب مسیر مشاوره رایگان بگیرید.
سوالات متداول
آموزش SQL برای مبتدیها سخت است؟
نه. دستورات پایه SQL به زبان انگلیسی ساده نزدیک است. بخشهای سختتر مثل طراحی پایگاه داده و بهینهسازی کوئری با تمرین به دست میآید.
SQL با SQL Server چه فرقی دارد؟
SQL زبان است و SQL Server یک سیستم مدیریت پایگاه داده از مایکروسافت که این زبان را اجرا میکند. MySQL و PostgreSQL هم سیستمهای دیگری هستند.
کدام پایگاه داده را اول یاد بگیرم؟
اگر مسیرتان C# و ASP.NET Core است، SQL Server انتخاب طبیعی است. مفاهیم پایه در همه سیستمها مشترک است و بعدا جابهجایی ساده است.
با وجود EF Core هنوز باید SQL یاد بگیرم؟
بله. برای عیبیابی کندی، طراحی درست جدولها و نوشتن گزارشهای پیچیده باید بفهمید پشت صحنه چه کوئریای اجرا میشود.
SQL برای پیدا کردن کار کافی است؟
برای نقشهایی مثل تحلیل داده میتواند مهارت اصلی باشد. برای برنامهنویسی، SQL معمولا در کنار یک زبان و فریمورک مثل C# و ASP.NET Core خواسته میشود.
SQL Injection چیست؟
حملهای است که در آن مهاجم با ورودی خاص، دستور SQL را تغییر میدهد. با کوئری پارامتری و استفاده درست از ORM جلوی آن گرفته میشود.
ادامه بدهید