حسام جعفرزاده
حسام جعفرزاده
خواندن ۳ دقیقه·۳ سال پیش

آموزش postgres - دستور select

آموزش دستور Select در Postgres
آموزش دستور Select در Postgres


توی این آموزش یاد میگیریم که چجوری از دستور select برای دریافت اطلاعات از جدول‌ها استفاده کنیم...

یکی از پرکاربردترین دستورات هنگام کار با دیتابیس، دستور select است که با اون میتونیم اطلاعاتی رو با توجه به شرایط تعیین شده از جدول(ها) دریافت کنیم.

این دستور یکسری بند (که از این پس caluse می‌نامیم ) داره که ابتدا اونها رو یک بررسی مختصر میکنیم:

  • بند DISTINCT که ردیف‌های متمایز را از یک جدول دریافت می‌کند و موارد تکراری فقط یک بار آورده می‌شوند.
  • استفاده از ORDER BY که وظیفه‌ی sort کردن رو بر عهده داره.
  • فیلتر کردن row ها بر اساس WHERE
  • دریافت یک مجموعه‌ی محدود شده از نتایج با استفاده از LIMIT و FETCH
  • گروه‌بندی کردن rowها با کمک GROUP BY
  • اعمال شرط و فیلتر روی گروه‌ها با استفاده از HAVING
  • متصل کردن جدول‌ها با یکدیگر با استفاده از شکل‌های متفاوت join مثل INNER JOIN - LEFT JOIN - CROSS JOIN و یا FULL OUTER JOIN

ابتدا با شکل ساده‌ی SELECT شروع می‌کنیم

SELECT select_list FROM table_name;
  • در دستور بالا مقدار select_list می‌تواند نام ستون‌ یا ستون‌هایی باشد که قصد دارید داده‌‌های آنها دریافت شود و اگر بخواهید که نام چند ستون را بنویسید باید آنها را با , از هم جدا کنید. البته گاهی اوقات شما نیاز دارید تا داده‌های تمام ستون‌ها را دریافت کنید، در این صورت به جای نوشتن نام تک تک ستون‌ها، از علامت * استفاده می‌کنیم که به معنای تمامی ستون‌ها می‌باشد.
  • مقدار table_name هم باید نام جدولی باشد که قصد دارید query روی آن اجرا شود.

نکته: توجه داشته باشید که مقدار FROM قبل از دستور SELECT بررسی می‌شود.

نکته: دستورات SQL به کوچک یا بزرگ بودن حروف حساس نیستند، یعنی اگر شما به جای SELECT از select و یا Select استفاده کنید تفاوتی ایجاد نمی‌شود اما به طور قرارداد، برای اینکه دستورات راحت‌تر خوانده شوند آنها را با حروف بزرگ می‌نویسیم.

نکته: توجه کنید که دستور FROM به عنوان بخش الزامی و اجباری از دستور SELECT نیست و میتوان آنرا حذف کرد و دستور SELECT تنها یک expression را محاسبه کند. (در طول آموزش و قسمت‌های بعدی نمونه‌هایی خواهیم دید)


خب، بهتر است که چند مثال از این دستور را ببینیم. فرض کنید یک جدول با نام customer به شکل زیر داریم:

جدول customer
جدول customer

با استفاده از کد زیر تنها مقادیر ستون first_name را دریافت می‌کنیم:

SELECT first_name FROM customer;

خروجی دستور به این شکل می‌شود:

دریافت مقادیر ستون first_name از جدول customer
دریافت مقادیر ستون first_name از جدول customer


اگر در دستور بالا به جای first_name از علامت * استفاده می‌کردیم، مقادیر تمامی ستون‌ها از جدول customer برایمان لیست میشد. توجه داشته باشید که استفاده از * در تمامی حالات مناسب نیست زیرا:

  • ممکنه که جدول شما دارای ستون‌های زیادی باشه که تنها به چندتا از آنها نیاز داشته باشید، پس اگر در اینجا از * استفاده کنیم می‌تونه به جای اینکه مفید باشه کارایی دیتابیس رو کاهش بده.
  • دوم اینکه گاهی اوقات دریافت اطلاعات زیادی و بدون فایده از دیتابیس میتونه باعث ایجاد ترافیک زیاد بین برنامه‌ی شما و سرور بشه که درنتیجه منجر به کندی برنامه شما خواهد شد.

نکته:‌ علامت ; که در انتهای query نوشتیم جزیی از دستور SQL نیست و تنها با استفاده از آن به SQL میفهمانیم که دستور ما در اینجا به پایان رسید و البته برای جدا کردن چند دستور SQL هم به کار می‌رود.


گاهی اوقات ممکن است که نیاز داشته باشید که در دستور select از یک expression هم استفاده کنید.

به طور مثال فرض کنید که قصد دارید از جدول customer، مقدار ستون email و مقدار ترکیب شده‌ی ستون‌های first_name و last_name رو دریافت کنید، در این حالت به این شکل عمل می‌کنیم:

SELECT first_name || ' ' || last_name, email FROM customer;

که خروجی دستور بالا به این شکل خواهد بود:

استفاده concatenation operator در دستور select
استفاده concatenation operator در دستور select

در مثال بالا از concatenation operator استفاده کردیم تا بتوانیم مقادیر ستون‌ first_name و last_name رو با هم ترکیب کنیم اما اگر به خروجی توجه کنید می‌بینید که اسم ستون حاصل از این ترکیب به صورت ?column? در آمده که در آموزش‌ تعیین نام مستعار برای یک ستون توضیح دادم که چجوری این مشکل رو برطرف کنید.


استفاده از دستور SELECT بدون FROM:

SELECT 5 * 3;


که خروجی آن به صورت زیر خواهد بود:

استفاده از دستور ‌SELECT بدون FROM
استفاده از دستور ‌SELECT بدون FROM


هنوز کلی با دستور SELECT کار داریم، پس فعلا اینها رو تمرین کنید تا بریم سراغ آموزش بعدی...


پستگرسpostgressqlدیتابیساس کیو ال
به دنبال یادگیری بیشتر - اطلاعات بیشتر در مورد من در: hesij.ir
شاید از این پست‌ها خوشتان بیاید