آموزش T-SQL برای مبتدیان
⚡ خلاصه سریع — اصل کاریها
اینها مهمترین چیزهایی هستن که اگه هیچی ندونی، فقط اینا رو بدونی کافیه:
- نکته ۱: T-SQL زبان مایکروسافت برای کار با SQL Server است.
- نکته ۲:
SELECTبرای خواندن،INSERTبرای اضافهکردن،UPDATEبرای تغییر وDELETEبرای حذف داده است. - نکته ۳: هر جدول باید یک کلید اصلی (Primary Key) داشته باشد تا هر سطر یکتا باشد.
- نکته ۴: شرطها را با
WHEREدقیق کن و برای مرتبسازی ازORDER BYاستفاده کن. - نکته ۵:
NULLیعنی «مقدار نامشخص» و با=مقایسه نمیشود؛ باید ازIS NULLاستفاده کنی. - نکته ۶:
JOINبرای ترکیب اطلاعات چند جدول است وINNER JOINفقط رکوردهای مشترک را برمیگرداند. - نکته ۷: توابع جمعی مثل
COUNT،SUMوAVGهمراهGROUP BYخلاصهسازی میکنند. - نکته ۸: قبل از
UPDATEیاDELETEهمیشه اول باSELECTهمان شرط را تست کن.
۳ اشتباه رایج که باید ازشون پرهیز کنی:
- فراموشکردن
WHEREدرUPDATEیاDELETEو تغییر کل جدول. - مقایسه
NULLبا=بهجایIS NULL. - استفاده از
SELECT *در برنامه واقعی بهجای ستونهای مشخص.
اگر فقط ۵ دقیقه وقت داری، اینها رو یاد بگیر:
- دستور
SELECTباWHERE— پایه خواندن داده. INSERT INTO ... VALUES— اضافهکردن رکورد.- ساخت جدول با
CREATE TABLEو تعیینPRIMARY KEY.
۱. مقدمه
T-SQL چیست؟
T-SQL مخفف Transact-SQL است. این زبان، نسخهٔ توسعهیافتهای از SQL است که مایکروسافت برای کار با SQL Server و Azure SQL Database ساخته است. با T-SQL میتوانی:
- داده بخوانی
- داده اضافه کنی
- داده تغییر بدهی
- داده حذف کنی
- جدول و پایگاه داده بسازی
- گزارشهای ترکیبی و آماری بگیری
چرا باید T-SQL یاد بگیری؟
- SQL Server یکی از پراستفادهترین پایگاههای داده در دنیاست.
- بسیاری از برنامههای سازمانی و وبسایتها از SQL Server استفاده میکنند.
- یادگیری T-SQL اولین قدم برای کار بهعنوان توسعهدهنده بکاند، تحلیلگر داده یا مدیر پایگاه داده است.
- مفاهیم اصلی SQL تقریباً در همه پایگاههای داده مشترک است.
کجا استفاده میشود؟
- نرمافزارهای مالی، فروشگاهی، بانکی و سازمانی
- گزارشگیری و تحلیل داده
- ساخت API و برنامههای تحت وب
- نگهداری و مدیریت دادههای بزرگ
۲. پیشنیازها
قبل از شروع، لازم نیست چیز زیادی بدانی. کافی است:
- با فایلها و پوشهها در کامپیوتر آشنا باشی.
- مفهوم جدول را در حد یک جدول Excel بدانی: سطر و ستون.
- علاقه به یادگیری و کمی دقت در نوشتن دستورها داشته باشی.
ابزارهای لازم
برای شروع به این دو ابزار نیاز داری:
| ابزار | کاربرد |
|---|---|
| SQL Server | موتور اصلی پایگاه داده |
| SQL Server Management Studio (SSMS) | محیط گرافیکی برای نوشتن و اجرای T-SQL |
اگر از مک یا لینوکس استفاده میکنی، میتوانی از Docker و Azure Data Studio استفاده کنی.
۳. نصب و راهاندازی
گام ۱: دانلود و نصب SQL Server
- به سایت مایکروسافت برو و SQL Server 2022 Developer Edition را دانلود کن. این نسخه رایگان است.
- فایل نصب را اجرا کن.
- گزینه Basic را انتخاب کن تا نصب سادهتر انجام شود.
- محل نصب را مشخص کن و منتظر بمان تا نصب تمام شود.
- بعد از نصب، نام نمونه (Instance Name) معمولاً
MSSQLSERVERیاSQLEXPRESSاست. این را به خاطر بسپار.
گام ۲: دانلود و نصب SSMS
- از سایت مایکروسافت SQL Server Management Studio (SSMS) را دانلود کن.
- فایل نصب را اجرا و مراحل سادهٔ آن را طی کن.
- بعد از نصب، SSMS را باز کن.
گام ۳: اولین اتصال
- در پنجرهٔ بازشده، Server name را یکی از این مقادیر بگذار:
localhost.(local)
- Authentication را روی Windows Authentication بگذار.
- روی Connect بزن.
اگر صفحهٔ Object Explorer باز شد، یعنی اتصال برقرار است.
اولین پروژه: ساخت پایگاه داده
در SSMS یک پنجرهٔ New Query باز کن و این کد را اجرا کن:
CREATE DATABASE MyFirstDB;
GO
USE MyFirstDB;
GO
CREATE DATABASEیک پایگاه داده میسازد.USEمیگوید از این به بعد دستورها روی این پایگاه داده اجرا شوند.GOیک جداکنندهٔ دسته است که در SSMS استفاده میشود.
۴. مفاهیم پایه
پایگاه داده (Database)
محفظهای بزرگ که همه جدولها، دادهها و اشیای مرتبط را نگه میدارد.
CREATE DATABASE ShopDB;
جدول (Table)
جدول از سطر و ستون تشکیل شده است. هر ستون یک نوع داده مشخص دارد.
CREATE TABLE Customers (
CustomerId INT PRIMARY KEY,
Name NVARCHAR(50),
City NVARCHAR(50)
);
CustomerIdستون عددی و کلید اصلی است.NameوCityمتن هستند.NVARCHAR(50)یعنی متن حداکثر ۵۰ حرف.
انواع داده پرکاربرد
| نوع داده | کاربرد |
|---|---|
INT |
عدد صحیح |
DECIMAL(10,2) |
عدد اعشاری |
VARCHAR(n) |
متن با طول متغیر |
NVARCHAR(n) |
متن یونیکد (مناسب فارسی) |
DATE |
تاریخ |
DATETIME |
تاریخ و زمان |
BIT |
۰ یا ۱ |
کلید اصلی (Primary Key)
کلید اصلی تضمین میکند که هر سطر در جدول یکتا باشد.
CREATE TABLE Products (
ProductId INT PRIMARY KEY,
ProductName NVARCHAR(100) NOT NULL
);
NULL چیست؟
NULL یعنی «مقدار نامشخص» یا «خالی». برای مقایسه با NULL باید از IS NULL یا IS NOT NULL استفاده کنی.
SELECT * FROM Customers WHERE City IS NULL;
۵. مثالهای کد ساده
مثال ۱: خواندن داده با SELECT
SELECT 1 AS Result;
این سادهترین دستور است و عدد ۱ را برمیگرداند.
SELECT Name, City FROM Customers;
فقط ستونهای Name و City را از جدول میخواند.
مثال ۲: فیلتر با WHERE
SELECT Name, City
FROM Customers
WHERE City = 'Tehran';
فقط مشتریهای تهران را برمیگرداند.
مثال ۳: مرتبسازی با ORDER BY
SELECT Name, City
FROM Customers
ORDER BY Name ASC;
نتیجه را بر اساس نام، صعودی مرتب میکند.
مثال ۴: اضافهکردن رکورد با INSERT
INSERT INTO Customers (CustomerId, Name, City)
VALUES (1, 'Ali', 'Tehran');
یک مشتری جدید اضافه میکند.
مثال ۵: تغییر داده با UPDATE
UPDATE Customers
SET City = 'Shiraz'
WHERE CustomerId = 1;
فقط شهر مشتری شماره ۱ را تغییر میدهد.
مثال ۶: حذف داده با DELETE
DELETE FROM Customers
WHERE CustomerId = 1;
فقط رکورد شماره ۱ را حذف میکند.
مثال ۷: ترکیب دو جدول با JOIN
SELECT Customers.Name, Orders.TotalAmount
FROM Customers
INNER JOIN Orders ON Customers.CustomerId = Orders.CustomerId;
اطلاعات مشتری و سفارشهای او را با هم نشان میدهد.
۶. مثال واقعی و کاربردی
یک فروشگاه کوچک را در نظر بگیر. میخواهیم مشتریها و سفارشهایشان را نگهداری کنیم.
گام ۱: ساخت جدولها
CREATE TABLE Customers (
CustomerId INT IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(50) NOT NULL,
City NVARCHAR(50)
);
CREATE TABLE Orders (
OrderId INT IDENTITY(1,1) PRIMARY KEY,
CustomerId INT NOT NULL,
OrderDate DATE NOT NULL,
TotalAmount DECIMAL(10,2) NOT NULL,
FOREIGN KEY (CustomerId) REFERENCES Customers(CustomerId)
);
IDENTITY(1,1)یعنی شماره از ۱ شروع شود و هر رکورد یکی اضافه شود.FOREIGN KEYتضمین میکند که هر سفارش متعلق به یک مشتری معتبر است.
گام ۲: اضافهکردن داده نمونه
INSERT INTO Customers (Name, City)
VALUES ('Ali', 'Tehran'),
('Sara', 'Isfahan'),
('Reza', 'Tehran');
INSERT INTO Orders (CustomerId, OrderDate, TotalAmount)
VALUES (1, '2025-01-10', 250.00),
(1, '2025-02-05', 120.50),
(2, '2025-01-20', 80.00);
گام ۳: گزارش مشتریها و سفارشها
SELECT c.Name, c.City, o.OrderDate, o.TotalAmount
FROM Customers c
INNER JOIN Orders o ON c.CustomerId = o.CustomerId
ORDER BY o.TotalAmount DESC;
حرف c و o یک نام مستعار کوتاه برای جدولهاست.
گام ۴: جمع کل خرید هر مشتری
SELECT c.Name, SUM(o.TotalAmount) AS TotalSpent
FROM Customers c
LEFT JOIN Orders o ON c.CustomerId = o.CustomerId
GROUP BY c.Name;
LEFT JOIN باعث میشود مشتریهایی که سفارش ندارند هم نمایش داده شوند.
۷. مباحث پیشرفته
JOINهای مختلف
INNER JOIN: فقط رکوردهای مشترک دو جدول.LEFT JOIN: همه رکوردهای جدول چپ + رکوردهای مشترک جدول راست.RIGHT JOIN: همه رکوردهای جدول راست + رکوردهای مشترک جدول چپ.
SELECT c.Name, o.OrderId
FROM Customers c
LEFT JOIN Orders o ON c.CustomerId = o.CustomerId;
GROUP BY و HAVING
برای خلاصهسازی داده:
SELECT City, COUNT(*) AS CustomerCount
FROM Customers
GROUP BY City
HAVING COUNT(*) > 1;
HAVING برای فیلتر روی نتیجهٔ جمعبندیشده است.
View
یک نمای ذخیرهشده از یک کوئری:
CREATE VIEW vw_CustomerOrders AS
SELECT c.Name, o.OrderDate, o.TotalAmount
FROM Customers c
INNER JOIN Orders o ON c.CustomerId = o.CustomerId;
بعد میتوانی ساده بنویسی:
SELECT * FROM vw_CustomerOrders;
Index
ایندکس باعث سریعتر شدن جستوجو میشود:
CREATE INDEX IX_Orders_CustomerId ON Orders(CustomerId);
Transaction
چند دستور را با هم اجرا میکند؛ یا همه موفق شوند یا هیچکدام:
BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 100 WHERE AccountId = 1;
UPDATE Accounts SET Balance = Balance + 100 WHERE AccountId = 2;
COMMIT;
اگر خطایی رخ بدهد، میتوانی بنویسی ROLLBACK; تا همه تغییرات برگردد.
۸. اشتباهات رایج
۱. فراموشکردن WHERE در UPDATE یا DELETE
-- اشتباه: همه رکوردها تغییر میکنند
UPDATE Customers SET City = 'Tehran';
همیشه اول با SELECT همان شرط را تست کن:
SELECT * FROM Customers WHERE CustomerId = 1;
-- بعد
UPDATE Customers SET City = 'Tehran' WHERE CustomerId = 1;
۲. مقایسه NULL با =
-- اشتباه
SELECT * FROM Customers WHERE City = NULL;
-- درست
SELECT * FROM Customers WHERE City IS NULL;
۳. استفاده از SELECT * در برنامه واقعی
-- غیربهینه
SELECT * FROM Customers;
-- بهتر
SELECT CustomerId, Name, City FROM Customers;
۴. فراموشکردن کلید اصلی
جدول بدون کلید اصلی خیلی زود به داده تکراری یا کندی میرسد. همیشه PRIMARY KEY تعریف کن.
۵. استفاده از نام ستونهای رزروشده بدون کروشه
مثلاً کلمه Order رزروشده است. اگر مجبور شدی از [Order] استفاده کن.
۹. بهترین روشها (Best Practices)
- ستونها را صریح بنویس: بهجای
SELECT *، فقط ستونهای لازم را بیاور. - از CONSTRAINT استفاده کن:
PRIMARY KEY،FOREIGN KEY،NOT NULLوUNIQUEداده را تمیز نگه میدارند. - برای جستوجو ایندکس بساز: روی ستونهایی که زیاد در
WHEREیاJOINمیآیند. - از Transaction برای عملیات چندمرحلهای استفاده کن: مثل انتقال پول بین حسابها.
- دستورها را خوانات بنویس: با حروف بزرگ برای کلمات کلیدی و خطشکستن مناسب.
- کد را کامنت بگذار: برای کارهای پیچیده توضیح کوتاه بنویس.
- در برنامه از پارامتر استفاده کن: از چسباندن مستقیم مقدار در رشته SQL پرهیز کن تا از SQL Injection جلوگیری شود.
۱۰. منابع و ادامه مسیر
منابع آنلاین
- Microsoft Learn: مسیر رایگان «Get started with Transact-SQL»
- SQL Server Central: مقالهها و آموزشهای کاربردی
- Stack Overflow: پرسش و پاسخ خطاها
- SQLZoo و LeetCode Database: تمرین تعاملی SQL
کتاب پیشنهادی
- T-SQL Fundamentals نوشته Itzik Ben-Gan
این کتاب یکی از بهترین کتابها برای یادگیری عمیق T-SQL است.
مسیر پیشنهادی بعد از این آموزش
- تمرین بیشتر
JOINوGROUP BY - یادگیری
SubqueryوCommon Table Expression (CTE) - آشنایی با
Stored ProcedureوFunction - کار با
Indexو تحلیلExecution Plan - طراحی پایگاه داده و نرمالسازی
مهمترین قدم بعد از خواندن این آموزش این است که خودت مثالها را اجرا کنی و کمی تغییر بدهی. تمرین، بهترین معلم T-SQL است.