SELECT — انتخاب دادهها از جدول
با تمامشدن فصل ۱، حالا میدانی پایگاهداده و جدول چه هستند و از چه نوع دادههایی تشکیل شدهاند. وقت آن رسیده اولین و مهمترین دستور SQL را بهطور کامل یاد بگیری: SELECT. تقریباً هر پرسوجویی که برای خواندن داده مینویسی، با همین دستور شروع میشود — و همانطور که در این درس میبینی، SELECT فقط برای «نشاندادن» ستونها نیست، بلکه میتواند نامشان را عوض کند، از رویشان محاسبه کند، و ردیفهای تکراری را هم حذف کند.
ساختار پایه دستور
سادهترین شکل دستور SELECT به این صورت است:
SELECT column1, column2 FROM table_name;
در اینجا column1 و column2 نام ستونهایی هستند که میخواهیم ببینیم، و table_name نام جدولی است که داده از آن خوانده میشود.
انتخاب همهی ستونها با *
اگر بخواهی همهی ستونهای یک جدول را ببینی، میتوانی از نماد * استفاده کنی:
SELECT * FROM students;
خروجی این پرسوجو روی جدول نمونهی students اینگونه خواهد بود:
| id | full_name | city | grade |
|---|---|---|---|
| 1 | علی محمدی | تهران | 10 |
| 2 | زهرا احمدی | اصفهان | 11 |
| 3 | محمد رضایی | شیراز | 10 |
* فقط ستونهای موردنیاز را بنویسی. این کار هم خوانایی کد را بیشتر میکند و هم عملکرد پرسوجو را بهتر میکند — مخصوصاً وقتی جدول دهها ستون دارد ولی فقط به دو تای آنها نیاز داری.انتخاب ستونهای مشخص
برای مثال اگر فقط نام و شهر دانشآموزان را بخواهیم:
SELECT full_name, city FROM students;
یک نکتهی ظریف اما مهم: ترتیب ستونها در خروجی، دقیقاً همان ترتیبی است که خودت در SELECT نوشتهای — نه لزوماً ترتیب ستونها در تعریف اصلی جدول. برای مثال همین پرسوجو را برعکس هم میتوان نوشت:
SELECT city, full_name FROM students;
همین دو ستون هستند، فقط اینبار شهر قبل از نام نمایش داده میشود. کاملاً به خودت بستگی دارد.
تغییر نام ستون در خروجی (Alias)
گاهی میخواهیم نام ستون در خروجی، خواناتر یا فارسیتر از نام واقعیاش در جدول باشد. برای این کار از کلمهی کلیدی AS استفاده میکنیم که به آن نام مستعار (Alias) میگویند:
SELECT full_name AS Name, city AS City FROM students;
مهم است بدانی AS فقط روی نمایش خروجی اثر میگذارد؛ نام واقعی ستون در جدول اصلاً تغییر نمیکند. این ویژگی وقتی خیلی بهکار میآید که بخواهیم از روی چند ستون، یک مقدار جدید بسازیم — که موضوع بخش بعدی است.
ساخت ستونهای محاسباتی
SELECT محدود به نمایش مستقیم ستونها نیست؛ میتوان از روی ستونهای موجود، مقدار تازهای محاسبه کرد. برای مثال، نمرهی سال بعد هر دانشآموز (با فرض یک پایه بالاتر رفتن):
SELECT full_name, grade, grade + 1 AS NextYearGrade FROM students;
همین ایده برای متن هم کار میکند. برای چسباندن دو رشتهی متنی به هم (مثلاً ساخت یک جملهی کامل از چند ستون)، در SQL Server میتوان از عملگر + یا تابع CONCAT() استفاده کرد:
SELECT full_name + N' از ' + city AS Summary FROM students; -- یا معادل امنتر آن: SELECT CONCAT(full_name, N' از ', city) AS Summary FROM students;
NULL داشته باشد، عملگر + کل نتیجه را NULL میکند، اما CONCAT() مقدار NULL را نادیده میگیرد و ادامه میدهد. با مفهوم NULL در درس بعدی کامل آشنا میشویم.بیا همین دو ایده — نام مستعار و ستون محاسباتی — را با هم در یک پرسوجوی واقعی امتحان کنیم:
حذف ردیفهای تکراری با DISTINCT
اگر بخواهی مقادیر تکراری در نتیجه نمایش داده نشوند، از DISTINCT استفاده کن:
SELECT DISTINCT city FROM students;
نکتهای که خیلیها در ابتدا اشتباه میگیرند: وقتی DISTINCT را روی چند ستون همزمان اعمال میکنی، یکتایی روی ترکیب همهی آن ستونها با هم بررسی میشود، نه روی هر ستون بهطور جداگانه:
SELECT DISTINCT city, grade FROM students;
در این پرسوجو، دو دانشآموز از یک شهر ولی با پایهی متفاوت، هر دو در خروجی میمانند — چون ترکیب (شهر، پایه) آنها با هم یکسان نیست. بیا هر دو حالت را با هم مقایسه کنیم:
grade را از پرسوجوی بالا حذف کن و فقط SELECT DISTINCT city FROM students; را اجرا کن. میبینی تعداد ردیفها کمتر میشود — چون اینبار یکتایی فقط روی خودِ شهر بررسی میشود.نوشتن کامنت (توضیح) در کد SQL
میتوانی داخل کد SQL برای خودت یا همتیمیهایت توضیح بنویسی؛ SQL Server این خطها را کاملاً نادیده میگیرد و اجرایشان نمیکند:
-- این یک کامنت یکخطی است SELECT full_name FROM students; /* این هم یک کامنت چندخطی است */
چند نکتهی تکمیلی
- کلمات کلیدی به بزرگی/کوچکی حروف حساس نیستند:
SELECT،selectوSelectدقیقاً یک معنا دارند. با این حال، رعایت حروف بزرگ برای کلمات کلیدی (مثل نمونههای همین درس) خوانایی کد را بیشتر میکند. - سمیکالن (
;): در SQL Server معمولاً اجباری نیست، اما گذاشتنش در پایان هر دستور، عادت خوبی است که از اشتباهات آینده (مخصوصاً وقتی چند دستور پشتسرهم مینویسی) جلوگیری میکند. - اشتباه رایج: اگر نام یک ستون یا جدول را اشتباه تایپ کنی، SQL Server با پیام خطا متوقف میشود — این خطاها معمولاً همان جایی هستند که غلط تایپی رخ داده، پس اول از همه املای نامها را چک کن.
SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY. در درسهای بعدی با هرکدام آشنا میشویم.جمعبندی این درس
SELECT column1, column2 FROM table;ستونهای مشخصشده را به همان ترتیبی که نوشتهای برمیگرداند.SELECT *همهی ستونها را برمیگرداند، اما در کد واقعی بهتر است از آن پرهیز کنی.- با
ASمیتوان نام ستون را فقط در خروجی تغییر داد. SELECTمیتواند از روی ستونها مقدار جدید هم محاسبه کند (اعداد یا متن).DISTINCTردیفهای تکراری را حذف میکند؛ روی چند ستون، یکتایی بر اساس ترکیب همهی آنها سنجیده میشود.
در درس بعدی سراغ WHERE میرویم: یاد میگیریم چطور فقط ردیفهایی را که شرط خاصی دارند، از جدول بیرون بکشیم.