بخش اول: ورود به جهان قدرتمند PostgreSQL
بخش دوم: جادوی جستجو و کوئری‌نویسی
بخش سوم: بهینه‌سازی و ساختارهای پیشرفته
بخش چهارم: امنیت، پشتیبانی، عملکرد و نگه‌داری
کارگاه‌ها و مثال‌های کاربردی

شروع کار با کوئری نویسی و دستورات کاربردی

در این بخش، وارد اولین مرحله از کار عملی با کوئری‌نویسی در PostgreSQL می‌شویم.
این قسمت برای کسانی طراحی شده که تازه با SQL آشنا می‌شوند یا می‌خواهند مهارت خود را در خواندن و فیلتر کردن داده‌ها (DQL) تقویت کنند.
ما با ساختار کلی SELECT شروع می‌کنیم و سپس سراغ مرتب‌سازی، فیلترها، جستجوی متنی، بازه‌ها و NULLها می‌رویم.

🎯 اهداف یادگیری

در پایان این بخش، انتظار می‌رود بتوانید:

✅ داده‌ها را از یک یا چند ستون خاص یا همه‌ی ستون‌ها بازیابی کنید.
✅ نتایج را مرتب و صفحه‌بندی (pagination) کنید.
✅ داده‌ها را بر اساس شرط‌های مختلف فیلتر کنید.
✅ در متون و رشته‌ها جستجو انجام دهید.
✅ با مقدارهای NULL به‌درستی کار کنید.


🔹 موضوع ۱ – دستور SELECT

📘 مفهوم

SELECT پایه‌ای‌ترین دستور SQL برای خواندن داده‌ها از جدول‌ها است.

SELECT column1, column2
FROM table_name;

🔸 برای نمایش همه ستون‌ها از * استفاده می‌کنیم:

SELECT * 
FROM orders;

🔸 می‌توانیم مقادیر ثابت را نیز در خروجی نمایش دهیم:

SELECT 'Northwind Example' AS label, * 
FROM orders;

💡 در این حالت، مقدار 'Northwind Example' در همه‌ی ردیف‌ها تکرار می‌شود — برای تست یا اضافه کردن برچسب ثابت مفید است.


🧠 تمرین‌ها
  1. همه‌ی ستون‌ها را از جدول orders نمایش دهید.
  2. فقط ستون‌های order_id, customer_id, order_date را نشان دهید.
  3. یک ستون ثابت 'Sample Query' با نام label به خروجی اضافه کنید.

🔹 موضوع ۲ – مرتب‌سازی و صفحه‌بندی نتایج (ORDER BY + OFFSET / LIMIT)

📘 مفهوم

با دستور ORDER BY می‌توانیم داده‌ها را بر اساس یک یا چند ستون مرتب کنیم.

SELECT order_id, order_date, ship_country
FROM orders
ORDER BY order_date DESC;

🔹 کلیدواژه‌ها:

  • ASC → صعودی (پیش‌فرض)
  • DESC → نزولی

📄 صفحه‌بندی (Pagination)

در PostgreSQL می‌توانیم از ترکیب OFFSET و LIMIT برای نشان دادن بخشی از داده‌ها استفاده کنیم:

SELECT order_id, customer_id
FROM orders
ORDER BY order_id
OFFSET 10
LIMIT 5;

به این معنا که از ردیف ۱۱ام شروع کن و ۵ ردیف بعدی را نمایش بده.

📘 روش استاندارد SQL نیز پشتیبانی می‌شود:

SELECT order_id, customer_id
FROM orders
ORDER BY order_id
OFFSET 10 ROWS FETCH FIRST 5 ROWS ONLY;

🧠 تمرین‌ها
  • سفارش‌ها را بر اساس ship_country به ترتیب حروف الفبا مرتب کنید.
  • پنج سفارش آخر را (بر اساس order_date) نمایش دهید.

🔹 موضوع ۳ – فیلتر کردن ردیف‌ها با WHERE

📘 مفهوم

WHERE برای محدود کردن ردیف‌ها به کار می‌رود تا فقط داده‌هایی که شرط را برآورده می‌کنند نمایش داده شوند.

SELECT *
FROM orders
WHERE ship_country = 'France';

می‌توانید از عملگرهای مقایسه‌ای و منطقی استفاده کنید:

نوععملگرمثال
مقایسه‌ای=, <, >, <=, <>, !=freight > 100
منطقیAND, OR, NOTcountry = 'USA' AND freight > 100

🧠 تمرین‌ها
  1. سفارش‌هایی که freight > 500 دارند را پیدا کنید.
  2. سفارش‌هایی که مقصدشان Brazil یا Argentina است نمایش دهید.
  3. همه سفارش‌هایی را نشان دهید که هزینه حمل آن‌ها کمتر از ۵۰ است.

🔹 موضوع ۴ – جستجوی متنی با LIKE

📘 مفهوم

برای جستجو در متن‌ها از LIKE استفاده می‌شود.
علامت‌های جایگزین (wildcards):

نمادتوضیح
%هر تعداد کاراکتر (حتی صفر)
_دقیقاً یک کاراکتر

📗 مثال‌ها
SELECT company_name
FROM customers
WHERE company_name LIKE 'A%';   -- نام‌هایی که با A شروع می‌شوند
SELECT product_name
FROM products
WHERE product_name LIKE '%choco%';  -- شامل "choco"

🧠 تمرین‌ها
  • مشتریانی که نامشان با B شروع می‌شود را لیست کنید.
  • محصولاتی که شامل عبارت “choco” هستند را بیابید.
  • نام شرکت‌هایی که شامل عبارت “Ltd” هستند نمایش دهید.

🔹 موضوع ۵ – فیلترهای مجموعه‌ای (IN / NOT IN) و بازه‌ای (BETWEEN)

📘 مفهوم

برای بررسی عضویت در یک مجموعه:

SELECT order_id, ship_country
FROM orders
WHERE ship_country IN ('Germany', 'France', 'UK');

برای بازه‌ها:

SELECT order_id, freight
FROM orders
WHERE freight BETWEEN 50 AND 100;

🔹 BETWEEN شامل دو سر بازه هم هست (>= و <=).


🧠 تمرین‌ها
  • سفارش‌هایی را نمایش دهید که کشور ارسال آن‌ها Mexico, Spain, یا Portugal است.
  • سفارش‌هایی را بیابید که مقدار freight آن‌ها بین ۱۰۰ و ۲۰۰ است.
  • سفارش‌هایی که ship_country آن‌ها جزو آمریکا و فرانسه نیست (NOT IN) را نشان دهید.

🔹 موضوع ۶ – کار با NULL

📘 مفهوم

NULL در SQL به معنی ناشناخته یا مقدار موجود نیست است، نه صفر یا رشته‌ی خالی.

عبارتنتیجه
۵ < NULLUnknown
NULL = NULLUnknown
NULL <> NULLUnknown

🔹 بررسی وجود یا نبود مقدار
WHERE column IS NULL
WHERE column IS NOT NULL

📗 مثال:

SELECT order_id, shipped_date
FROM orders
WHERE shipped_date IS NULL;  -- سفارش‌هایی که هنوز ارسال نشده‌اند

🧠 تمرین‌ها
  • سفارش‌هایی که هنوز ارسال نشده‌اند را نمایش دهید.
  • تعداد مشتریانی را پیدا کنید که مقدار fax برایشان NULL است.
  • لیستی از مشتریان که مقدار region مشخصی ندارند (NULL) نشان دهید.

🔹 موضوع ۷ – درک منطقی NULL

📘 مفهوم کلیدی

هر عبارت مقایسه‌ای که شامل NULL باشد، نتیجه‌اش unknown است و در شرط WHERE نادیده گرفته می‌شود مگر اینکه به‌صورت صریح بررسی شود.

SELECT order_id
FROM orders
WHERE freight > 100 OR freight IS NULL;

🔹 این دستور، سفارش‌هایی را برمی‌گرداند که یا هزینه‌ی حمل بیش از ۱۰۰ دارند، یا مقدار آن مشخص نیست (NULL).


✅ جمع‌بندی بخش اول

مفهومکلیدواژه‌هاجدول‌های پیشنهادی تمرین
واکشی دادهSELECT, *, محاسباتorders, customers
مرتب‌سازی و صفحه‌بندیORDER BY, OFFSET, LIMITorders
فیلتر کردنWHERE, عملگرها، AND, ORorders, products
جستجوی متنیLIKE, %, _customers, products
بازه و مجموعهBETWEEN, IN, NOT INorders
داده‌های گمشدهIS NULL, IS NOT NULL, منطق NULLorders, customers

💬 یک مثال عملی

می‌توانید در پایان این بخش، تمرین تحلیلی زیر را به‌عنوان جمع‌بندی انجام دهید – دستور Case را البته در بخش بعدی بررسی خواهیم کرد:

SELECT 
  o.order_id,
  o.customer_id,
  o.ship_country,
  o.freight,
  CASE 
    WHEN o.freight IS NULL THEN 'Unknown Freight'
    WHEN o.freight > 200 THEN 'High'
    WHEN o.freight BETWEEN 50 AND 200 THEN 'Medium'
    ELSE 'Low'
  END AS freight_category
FROM orders o
WHERE o.ship_country IN ('Germany', 'France', 'UK')
ORDER BY o.freight DESC
LIMIT 10;

🔹 در این مثال، تمام مفاهیم یادگرفته‌شده – انتخاب، فیلتر، شرط، NULL، دسته‌بندی و مرتب‌سازی – با هم ترکیب شده‌اند.

فروشگاه
جستجو
دوره ها

لطفا کلمات کلیدی را وارد کنید