📚 فصل ۱۴ — مشاهده و بازیابی دادهها در SQL Server با دستور SELECT
1️⃣ مقدمه: چرا دستور SELECT قلب SQL است؟
وقتی پایگاه داده را میسازیم و دادهها را وارد میکنیم، مرحله بعدی بازیابی و مشاهده اطلاعات است.
بدون این مرحله عملاً پایگاه داده شبیه یک انبار قفلشده میشود که فقط اطلاعات را ذخیره کرده، ولی هیچکس نمیتواند از آن استفاده کند.
دستور SELECT مهمترین بخش زبان SQL است، چون:
- به شما امکان میدهد هر اطلاعاتی که بخواهید را ببینید.
- میتواند دادهها را فیلتر، مرتبسازی، گروهبندی و حتی محاسبه کند.
- پایه تمام گزارشگیریها، داشبوردها و برنامههای وابسته به داده است.
💡 اگر SQL را یک ماشین بدانیم،
INSERT مثل ریختن سوخت است، ولی SELECT مثل استفاده واقعی از قدرت موتور است.
2️⃣ ساختار پایه دستور SELECT
دستور SELECT دو بخش اصلی دارد: چه بیاور و از کجا بیاور.
SELECT Column1, Column2, ...
FROM TableName;
توضیح اجزا:
- SELECT → تعیین ستونهایی که میخواهید نمایش داده شود.
- FROM → انتخاب منبع داده (جدول یا View یا حتی Subquery).
📌 مثال ساده:
SELECT FirstName, LastName
FROM Employees;
این دستور ستونهای FirstName
و LastName
را از جدول Employees
برمیگرداند.
3️⃣ انتخاب همه ستونها (SELECT *
)
اگر بخواهید همه ستونها را ببینید:
SELECT *
FROM Employees;
مزایا:
- سریع نوشتن
- استفاده در تست یا بررسی ساختار جدول
معایب:
- مصرف بیشتر منابع سرور
- انتقال داده بیشتر به کلاینت
- قابل شکننده شدن برنامه در صورت تغییر ساختار جدول
💡 نکته حرفهای: در برنامههای عملیاتی به جای *
فقط ستونهای مورد نیاز را بیاورید.
4️⃣ انتخاب ستونهای خاص
مثال:
SELECT EmployeeID, FirstName, City
FROM Employees;
مزایا:
- سرعت بیشتر
- گزارش واضحتر
- کمتر شدن استفاده از شبکه و RAM
ترفند: ترتیب ستونها در خروجی به همان ترتیب نوشتهشدن در SELECT بستگی دارد، نه ترتیب واقعی جدول.
5️⃣ تغییر نام ستونها با ALIAS (AS
)
Alias یعنی نام مستعار موقت برای ستون یا حتی جدول.
SELECT FirstName AS 'نام', LastName AS 'نام خانوادگی'
FROM Employees;
- کلمات با فاصله باید داخل کوتیشن یا براکت باشند.
- میتوانید کلمه
AS
را حذف کنید:
SELECT FirstName 'نام', LastName 'نام خانوادگی' FROM Employees;
کاربرد Alias:
- گزارشات کاربرپسند
- کوتاهکردن نامهای طولانی
- مشخصتر کردن ستونهای محاسباتی
6️⃣ فیلتر کردن نتایج با WHERE (مقدماتی)
SELECT *
FROM Employees
WHERE City = N'تبریز';
💡 چرا N
قبل از رشته فارسی؟
- برای ذخیره و مقایسه صحیح کاراکترهای Unicode (مثل فارسی)
عملگرهای قابل استفاده در WHERE:
- = برابر
- <> نابرابر
- > / < / >= / <= بیشتر / کمتر / مساوی و …
- LIKE جستجوی الگو (فصل ۱۹ کامل توضیح داده میشود)
- IN برای بررسی چند مقدار
- BETWEEN برای محدوده اعداد یا تاریخ
7️⃣ مرتبسازی با ORDER BY
SELECT FirstName, City
FROM Employees
ORDER BY FirstName ASC; -- صعودی
SELECT FirstName, City
FROM Employees
ORDER BY City DESC; -- نزولی
نکته:
- میتوانید بر اساس شماره ستون مرتب کنید:
SELECT FirstName, City
FROM Employees
ORDER BY 2 DESC; -- ستون دوم یعنی City
اما بهتر است همیشه نام ستون را بنویسید.
8️⃣ محدود کردن تعداد نتایج (TOP)
برای گرفتن چند سطر اول:
SELECT TOP 10 *
FROM Orders;
برای درصد:
SELECT TOP 5 PERCENT *
FROM Orders;
📌 ترتیب نمایش بدون ORDER BY قطعی نیست، پس اگر دقت مهم است باید همراه TOP حتماً ORDER BY داشته باشید.
9️⃣ توابع متنی در SELECT
کاربرد: تغییر ظاهر متن هنگام بازیابی دادهها.
SELECT UPPER(FirstName) AS UpperCaseName,
LOWER(LastName) AS LowerCaseName,
LEN(FirstName) AS NameLength
FROM Employees;
- UPPER → حروف بزرگ
- LOWER → حروف کوچک
- LEN → طول رشته
- CONCAT → ترکیب چند متن
SELECT CONCAT(FirstName, ' ', LastName) AS FullName
FROM Employees;
🔟 توابع عددی در SELECT
SELECT Price,
ROUND(Price, 0) AS Rounded,
FLOOR(Price) AS FloorValue,
CEILING(Price) AS CeilingValue
FROM Products;
- ROUND → گردکردن
- FLOOR → پایینترین عدد صحیح
- CEILING → بالاترین عدد صحیح
1️⃣1️⃣ محاسبات در SELECT
میتوانید ستونها را محاسبه کنید:
SELECT ProductName,
Price * Quantity AS TotalValue
FROM OrderDetails;
یا حتی مقدار ثابت اضافه کنید:
SELECT ProductName, Price + 1000 AS IncreasedPrice
FROM Products;
1️⃣2️⃣ استفاده از SELECT با چند جدول (مقدمه JOIN)
SELECT Orders.OrderID, Customers.FullName
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;
این مثال دادهها را از دو جدول مرتبط ترکیب میکند.
📌 مبحث کامل JOIN در فصل ۲۶ توضیح داده میشود.
1️⃣3️⃣ SELECT از منابع دیگر
- از View (مثل جدول مجازی)
SELECT * FROM ActiveCustomersView;
- از Subquery
SELECT * FROM (SELECT TOP 5 * FROM Orders) AS Temp;
1️⃣4️⃣ خطاهای رایج در SELECT
❌ اشتباه: نوشتن نام ستون اشتباه
SELECT FullNam FROM Customers; -- خطا
❌ اشتباه: استفاده از کوتیشن اشتباه
SELECT 'FullName' FROM Customers; -- فقط متن FullName برمیگرداند
❌ اشتباه: عدم استفاده از ORDER BY همراه با TOP در داده حساس
1️⃣5️⃣ نکات حرفهای
- همیشه فقط ستونهای لازم را انتخاب کنید.
- برای متنهای فارسی از پیشوند
N
استفاده کنید. - در گزارشها از Alias برای خوانایی بیشتر کمک بگیرید.
- هنگام کار با دادههای زیاد از فیلترینگ قبل از مرتبسازی استفاده کنید.
- مراقب نتایج غیرقطعی بدون ORDER BY باشید.
1️⃣6️⃣ تمرینهای عملی
تمرین ۱
لیست تمام مشتریان با نام و شهر، مرتبشده بر اساس نام خانوادگی، فقط ۱۰ نفر اول.
تمرین ۲
ستون نام کامل (FullName
) را به همراه طول نام نمایش دهید.
تمرین ۳
محصولاتی را نشان دهید که قیمتشان بین ۱۰۰ تا ۵۰۰ هزار است.
تمرین ۴
بالاترین قیمت محصول را پیدا کنید.
تمرین ۵
۵ سفارش آخر را با استفاده از ORDER BY بر اساس تاریخ نمایش دهید.
1️⃣7️⃣ جمعبندی این فصل
در این فصل شما با این قابلیتها آشنا شدید:
- ساختار پایه SELECT
- انتخاب همه ستونها یا ستونهای خاص
- نام مستعار Alias
- فیلتر کردن داده (مقدماتی)
- مرتبسازی با ORDER BY
- محدود کردن نتایج با TOP
- استفاده از توابع متنی، عددی و محاسباتی
- مقدمه JOIN و منابع دیگر
- خطاها و نکات حرفهای