خانه/ مبانی SQL/ SELECT

SELECT — انتخاب داده‌ها از جدول

مبتدی ۱۳ دقیقه مطالعه

با تمام‌شدن فصل ۱، حالا می‌دانی پایگاه‌داده و جدول چه هستند و از چه نوع داده‌هایی تشکیل شده‌اند. وقت آن رسیده اولین و مهم‌ترین دستور SQL را به‌طور کامل یاد بگیری: SELECT. تقریباً هر پرس‌وجویی که برای خواندن داده می‌نویسی، با همین دستور شروع می‌شود — و همان‌طور که در این درس می‌بینی، SELECT فقط برای «نشان‌دادن» ستون‌ها نیست، بلکه می‌تواند نام‌شان را عوض کند، از رویشان محاسبه کند، و ردیف‌های تکراری را هم حذف کند.

ساختار پایه دستور

ساده‌ترین شکل دستور SELECT به این صورت است:

sql
SELECT column1, column2
FROM table_name;

در اینجا column1 و column2 نام ستون‌هایی هستند که می‌خواهیم ببینیم، و table_name نام جدولی است که داده از آن خوانده می‌شود.

انتخاب همه‌ی ستون‌ها با *

اگر بخواهی همه‌ی ستون‌های یک جدول را ببینی، می‌توانی از نماد * استفاده کنی:

sql
SELECT * FROM students;

خروجی این پرس‌وجو روی جدول نمونه‌ی students این‌گونه خواهد بود:

idfull_namecitygrade
1علی محمدیتهران10
2زهرا احمدیاصفهان11
3محمد رضاییشیراز10
نکته مهم: در پروژه‌های واقعی بهتر است به‌جای * فقط ستون‌های موردنیاز را بنویسی. این کار هم خوانایی کد را بیشتر می‌کند و هم عملکرد پرس‌وجو را بهتر می‌کند — مخصوصاً وقتی جدول ده‌ها ستون دارد ولی فقط به دو تای آن‌ها نیاز داری.

انتخاب ستون‌های مشخص

برای مثال اگر فقط نام و شهر دانش‌آموزان را بخواهیم:

sql
SELECT full_name, city
FROM students;

یک نکته‌ی ظریف اما مهم: ترتیب ستون‌ها در خروجی، دقیقاً همان ترتیبی است که خودت در SELECT نوشته‌ای — نه لزوماً ترتیب ستون‌ها در تعریف اصلی جدول. برای مثال همین پرس‌وجو را برعکس هم می‌توان نوشت:

sql
SELECT city, full_name
FROM students;

همین دو ستون هستند، فقط این‌بار شهر قبل از نام نمایش داده می‌شود. کاملاً به خودت بستگی دارد.

تغییر نام ستون در خروجی (Alias)

گاهی می‌خواهیم نام ستون در خروجی، خواناتر یا فارسی‌تر از نام واقعی‌اش در جدول باشد. برای این کار از کلمه‌ی کلیدی AS استفاده می‌کنیم که به آن نام مستعار (Alias) می‌گویند:

sql
SELECT full_name AS Name, city AS City
FROM students;

مهم است بدانی AS فقط روی نمایش خروجی اثر می‌گذارد؛ نام واقعی ستون در جدول اصلاً تغییر نمی‌کند. این ویژگی وقتی خیلی به‌کار می‌آید که بخواهیم از روی چند ستون، یک مقدار جدید بسازیم — که موضوع بخش بعدی است.

ساخت ستون‌های محاسباتی

SELECT محدود به نمایش مستقیم ستون‌ها نیست؛ می‌توان از روی ستون‌های موجود، مقدار تازه‌ای محاسبه کرد. برای مثال، نمره‌ی سال بعد هر دانش‌آموز (با فرض یک پایه بالاتر رفتن):

sql
SELECT full_name, grade, grade + 1 AS NextYearGrade
FROM students;

همین ایده برای متن هم کار می‌کند. برای چسباندن دو رشته‌ی متنی به هم (مثلاً ساخت یک جمله‌ی کامل از چند ستون)، در SQL Server می‌توان از عملگر + یا تابع CONCAT() استفاده کرد:

sql
SELECT full_name + N' از ' + city AS Summary
FROM students;

-- یا معادل امن‌تر آن:
SELECT CONCAT(full_name, N' از ', city) AS Summary
FROM students;
چرا CONCAT بهتر است؟ اگر یکی از ستون‌ها مقدار NULL داشته باشد، عملگر + کل نتیجه را NULL می‌کند، اما CONCAT() مقدار NULL را نادیده می‌گیرد و ادامه می‌دهد. با مفهوم NULL در درس بعدی کامل آشنا می‌شویم.

بیا همین دو ایده — نام مستعار و ستون محاسباتی — را با هم در یک پرس‌وجوی واقعی امتحان کنیم:

امتحانش کن — نام مستعار و ستون محاسباتی

حذف ردیف‌های تکراری با DISTINCT

اگر بخواهی مقادیر تکراری در نتیجه نمایش داده نشوند، از DISTINCT استفاده کن:

sql
SELECT DISTINCT city
FROM students;

نکته‌ای که خیلی‌ها در ابتدا اشتباه می‌گیرند: وقتی DISTINCT را روی چند ستون هم‌زمان اعمال می‌کنی، یکتایی روی ترکیب همه‌ی آن ستون‌ها با هم بررسی می‌شود، نه روی هر ستون به‌طور جداگانه:

sql
SELECT DISTINCT city, grade
FROM students;

در این پرس‌وجو، دو دانش‌آموز از یک شهر ولی با پایه‌ی متفاوت، هر دو در خروجی می‌مانند — چون ترکیب (شهر، پایه) آن‌ها با هم یکسان نیست. بیا هر دو حالت را با هم مقایسه کنیم:

امتحانش کن — تفاوت DISTINCT روی یک ستون و چند ستون
حالا خودت مقدار grade را از پرس‌وجوی بالا حذف کن و فقط SELECT DISTINCT city FROM students; را اجرا کن. می‌بینی تعداد ردیف‌ها کمتر می‌شود — چون این‌بار یکتایی فقط روی خودِ شهر بررسی می‌شود.

نوشتن کامنت (توضیح) در کد SQL

می‌توانی داخل کد SQL برای خودت یا هم‌تیمی‌هایت توضیح بنویسی؛ SQL Server این خط‌ها را کاملاً نادیده می‌گیرد و اجرایشان نمی‌کند:

sql
-- این یک کامنت یک‌خطی است
SELECT full_name FROM students;

/* این هم یک کامنت
   چند‌خطی است */

چند نکته‌ی تکمیلی

  • کلمات کلیدی به بزرگی/کوچکی حروف حساس نیستند: SELECT، select و Select دقیقاً یک معنا دارند. با این حال، رعایت حروف بزرگ برای کلمات کلیدی (مثل نمونه‌های همین درس) خوانایی کد را بیشتر می‌کند.
  • سمی‌کالن (;): در SQL Server معمولاً اجباری نیست، اما گذاشتنش در پایان هر دستور، عادت خوبی است که از اشتباهات آینده (مخصوصاً وقتی چند دستور پشت‌سر‌هم می‌نویسی) جلوگیری می‌کند.
  • اشتباه رایج: اگر نام یک ستون یا جدول را اشتباه تایپ کنی، SQL Server با پیام خطا متوقف می‌شود — این خطاها معمولاً همان جایی هستند که غلط تایپی رخ داده، پس اول از همه املای نام‌ها را چک کن.
یادآوری: ترتیب استاندارد کلمات کلیدی در SQL این‌طور است: SELECTFROMWHEREGROUP BYHAVINGORDER BY. در درس‌های بعدی با هرکدام آشنا می‌شویم.

جمع‌بندی این درس

  • SELECT column1, column2 FROM table; ستون‌های مشخص‌شده را به همان ترتیبی که نوشته‌ای برمی‌گرداند.
  • SELECT * همه‌ی ستون‌ها را برمی‌گرداند، اما در کد واقعی بهتر است از آن پرهیز کنی.
  • با AS می‌توان نام ستون را فقط در خروجی تغییر داد.
  • SELECT می‌تواند از روی ستون‌ها مقدار جدید هم محاسبه کند (اعداد یا متن).
  • DISTINCT ردیف‌های تکراری را حذف می‌کند؛ روی چند ستون، یکتایی بر اساس ترکیب همه‌ی آن‌ها سنجیده می‌شود.

در درس بعدی سراغ WHERE می‌رویم: یاد می‌گیریم چطور فقط ردیف‌هایی را که شرط خاصی دارند، از جدول بیرون بکشیم.