در این بخش، وارد اولین مرحله از کار عملی با کوئرینویسی در PostgreSQL میشویم.
این قسمت برای کسانی طراحی شده که تازه با SQL آشنا میشوند یا میخواهند مهارت خود را در خواندن و فیلتر کردن دادهها (DQL) تقویت کنند.
ما با ساختار کلی SELECT شروع میکنیم و سپس سراغ مرتبسازی، فیلترها، جستجوی متنی، بازهها و NULLها میرویم.
در پایان این بخش، انتظار میرود بتوانید:
✅ دادهها را از یک یا چند ستون خاص یا همهی ستونها بازیابی کنید.
✅ نتایج را مرتب و صفحهبندی (pagination) کنید.
✅ دادهها را بر اساس شرطهای مختلف فیلتر کنید.
✅ در متون و رشتهها جستجو انجام دهید.
✅ با مقدارهای NULL بهدرستی کار کنید.
SELECT پایهایترین دستور SQL برای خواندن دادهها از جدولها است.
SELECT column1, column2
FROM table_name;
🔸 برای نمایش همه ستونها از * استفاده میکنیم:
SELECT *
FROM orders;
🔸 میتوانیم مقادیر ثابت را نیز در خروجی نمایش دهیم:
SELECT 'Northwind Example' AS label, *
FROM orders;
💡 در این حالت، مقدار 'Northwind Example' در همهی ردیفها تکرار میشود — برای تست یا اضافه کردن برچسب ثابت مفید است.
orders نمایش دهید.order_id, customer_id, order_date را نشان دهید.'Sample Query' با نام label به خروجی اضافه کنید.با دستور ORDER BY میتوانیم دادهها را بر اساس یک یا چند ستون مرتب کنیم.
SELECT order_id, order_date, ship_country
FROM orders
ORDER BY order_date DESC;
🔹 کلیدواژهها:
ASC → صعودی (پیشفرض)DESC → نزولیدر 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 برای محدود کردن ردیفها به کار میرود تا فقط دادههایی که شرط را برآورده میکنند نمایش داده شوند.
SELECT *
FROM orders
WHERE ship_country = 'France';
میتوانید از عملگرهای مقایسهای و منطقی استفاده کنید:
| نوع | عملگر | مثال |
|---|---|---|
| مقایسهای | =, <, >, <=, <>, != | freight > 100 |
| منطقی | AND, OR, NOT | country = 'USA' AND freight > 100 |
freight > 500 دارند را پیدا کنید.برای جستجو در متنها از LIKE استفاده میشود.
علامتهای جایگزین (wildcards):
| نماد | توضیح |
|---|---|
% | هر تعداد کاراکتر (حتی صفر) |
_ | دقیقاً یک کاراکتر |
SELECT company_name
FROM customers
WHERE company_name LIKE 'A%'; -- نامهایی که با A شروع میشوند
SELECT product_name
FROM products
WHERE product_name LIKE '%choco%'; -- شامل "choco"
برای بررسی عضویت در یک مجموعه:
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 شامل دو سر بازه هم هست (>= و <=).
freight آنها بین ۱۰۰ و ۲۰۰ است.ship_country آنها جزو آمریکا و فرانسه نیست (NOT IN) را نشان دهید.NULL در SQL به معنی ناشناخته یا مقدار موجود نیست است، نه صفر یا رشتهی خالی.
| عبارت | نتیجه |
|---|---|
۵ < NULL | Unknown |
NULL = NULL | Unknown |
NULL <> NULL | Unknown |
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 باشد، نتیجهاش unknown است و در شرط WHERE نادیده گرفته میشود مگر اینکه بهصورت صریح بررسی شود.
SELECT order_id
FROM orders
WHERE freight > 100 OR freight IS NULL;
🔹 این دستور، سفارشهایی را برمیگرداند که یا هزینهی حمل بیش از ۱۰۰ دارند، یا مقدار آن مشخص نیست (NULL).
| مفهوم | کلیدواژهها | جدولهای پیشنهادی تمرین |
|---|---|---|
| واکشی داده | SELECT, *, محاسبات | orders, customers |
| مرتبسازی و صفحهبندی | ORDER BY, OFFSET, LIMIT | orders |
| فیلتر کردن | WHERE, عملگرها، AND, OR | orders, products |
| جستجوی متنی | LIKE, %, _ | customers, products |
| بازه و مجموعه | BETWEEN, IN, NOT IN | orders |
| دادههای گمشده | IS NULL, IS NOT NULL, منطق NULL | orders, 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، دستهبندی و مرتبسازی – با هم ترکیب شدهاند.