SELECT و alias
ستونهای مشخص را انتخاب و در صورت نیاز alias بدهید.
SELECT id, name, created_at AS joined_atFROM users;
مرجع سریع دستورهای پرکاربرد SQL برای خواندن، فیلترکردن، پیوندزدن و تغییر ایمن دادهها. SELECT ستونهای موردنیاز را میخواند. شرط، ترتیب و محدودیت خروجی را متناسب با dialect پایگاه داده تنظیم کنید. رابطهها را با کلیدهای روشن پیوند دهید؛ شرط join و فیلتر نهایی را جدا بررسی کنید تا ناخواسته رکورد حذف یا تکثیر نشود. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
ستونهای مشخص را انتخاب و در صورت نیاز alias بدهید.
SELECT id, name, created_at AS joined_atFROM users;نتیجه را با شرط و ترتیب روشن محدود کنید.
SELECT id, nameFROM usersWHERE status = 'active'ORDER BY created_at DESC;برای NULL از IS NULL و برای محدوده از BETWEEN استفاده کنید.
SELECT id, emailFROM usersWHERE deleted_at IS NULL AND created_at >= '2025-01-01';syntax محدودکردن نتیجه میان SQL Server و سایر پایگاهها متفاوت است.
-- PostgreSQL / MySQLSELECT id, name FROM usersORDER BY idLIMIT 20 OFFSET 40;فقط ردیفهای دارای تطبیق در هر دو جدول را برمیگرداند.
SELECT orders.id, users.nameFROM ordersINNER JOIN users ON users.id = orders.user_id;همهٔ ردیفهای سمت چپ را حتی بدون تطبیق نگه میدارد.
SELECT users.id, orders.id AS order_idFROM usersLEFT JOIN orders ON orders.user_id = users.id;WHERE پیش از گروهبندی و HAVING پس از محاسبهٔ گروه اعمال میشود.
SELECT user_id, COUNT(*) AS order_countFROM ordersGROUP BY user_idHAVING COUNT(*) > 1;توابع تجمیعی روی مجموعهٔ ردیفها محاسبه میشوند.
SELECT COUNT(*) AS total, AVG(price) AS average_price, SUM(price) AS total_priceFROM products;ستونها را صریح بنویسید و از ترتیب ضمنی schema پرهیز کنید.
INSERT INTO users (name, email)VALUES ('Sara', 'sara@example.test');پیش از اجرای update، همان شرط را در SELECT بررسی کنید.
UPDATE usersSET status = 'active'WHERE id = 42;حذف بدون WHERE ممکن است همهٔ ردیفها را حذف کند.
DELETE FROM sessionsWHERE expires_at < CURRENT_TIMESTAMP;شکل placeholder به درایور وابسته است؛ SQL را با string concatenation نسازید.
PostgreSQL: WHERE id = $1MySQL: WHERE id = ?SQL Server: WHERE id = @idعملیات مرتبط را یکجا commit یا در صورت خطا rollback کنید.
BEGIN;UPDATE accounts SET balance = balance - 25 WHERE id = 1;UPDATE accounts SET balance = balance + 25 WHERE id = 2;COMMIT;کلید اصلی و قید یکتا را در schema ثبت کنید.
CREATE TABLE users ( id INTEGER PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP NOT NULL);رابطهٔ ارجاعی را با foreign key enforce کنید.
CREATE TABLE orders ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id));برای ستون پرتکرار در filter و join، index را با queryهای واقعی ارزیابی کنید.
CREATE INDEX idx_orders_user_createdON orders (user_id, created_at);برنامهٔ اجرای query را بخوانید و هزینه و scanهای بزرگ را بررسی کنید.
EXPLAINSELECT id, created_atFROM ordersWHERE user_id = 42;WITH نتیجهٔ میانی نامدار میسازد و query را به مراحل خوانا تقسیم میکند.
WITH recent_orders AS ( SELECT id, user_id, total FROM orders WHERE created_at >= DATE '2026-01-01')SELECT user_id, SUM(total) AS lifetime_totalFROM recent_ordersGROUP BY user_id;OVER محاسبه را در هر partition انجام میدهد بدون collapse کردن ردیفها.
SELECT user_id, created_at, total, ROW_NUMBER() OVER ( PARTITION BY user_id ORDER BY created_at DESC ) AS order_rankFROM orders;CASE مقدار را دستهبندی میکند و COALESCE اولین مقدار غیر NULL را برمیگرداند.
SELECT id, CASE WHEN score >= 80 THEN 'high' WHEN score >= 50 THEN 'medium' ELSE 'low' END AS score_band, COALESCE(nickname, name, 'Unknown') AS display_nameFROM users;فهرست ستونها را مشخص کنید تا ترتیب schema وابستگی پنهان نسازد.
INSERT INTO products (sku, name, price)VALUES ('A-101', 'Notebook', 4.50), ('A-102', 'Pencil', 1.25);ON CONFLICT به unique constraint تکیه دارد؛ syntax موتورهای دیگر متفاوت است.
INSERT INTO inventory (sku, quantity)VALUES ('A-101', 20)ON CONFLICT (sku)DO UPDATE SET quantity = EXCLUDED.quantity;قید CHECK و NOT NULL را در schema بگذارید تا ورودی نامعتبر رد شود.
CREATE TABLE payments ( id BIGINT PRIMARY KEY, amount DECIMAL(12, 2) NOT NULL CHECK (amount >= 0), currency CHAR(3) NOT NULL);خواندن داده: SELECT name, email FROM users;
فیلتر و مرتبسازی: WHERE status = 'active' ORDER BY created_at DESC
محدودکردن خروجی به dialect وابسته است: LIMIT/OFFSET در PostgreSQL و MySQL؛ TOP در SQL Server.
شرطهای چندگانه را با AND، OR و پرانتز برای تقدم روشن ترکیب کنید.
برای مقدار تهی از IS NULL یا IS NOT NULL استفاده کنید؛ = NULL نتیجهٔ درست نمیدهد.
تجمیع را با COUNT، SUM، AVG و GROUP BY انجام دهید.
شرط روی گروهها: HAVING COUNT(*) > 1 بعد از گروهبندی اعمال میشود.
دادههای مرتبط را با INNER JOIN یا LEFT JOIN بر اساس کلیدها پیوند دهید.
پارامتر کوئری را با placeholder درایور bind کنید؛ شکل آن میان ?، $1 و @p1 متفاوت است.
تغییر و حذف را با WHERE دقیق و تراکنش کنترل کنید؛ شرط را قبل از اجرا بسنجید.
برای منطق چندمرحلهای از CTE، برای رتبهبندی از window function و برای سنجش دسترسی داده از EXPLAIN استفاده کنید.
دستورهای تراکنش و سطح isolation را با مستندات همان پایگاه داده بررسی کنید؛ syntax و رفتار میان dialectها فرق دارد.
قیدهای PRIMARY KEY، FOREIGN KEY، UNIQUE و CHECK را در پایگاه داده تعریف کنید تا یکپارچگی فقط به برنامه وابسته نباشد.
روی ستونهای پرکاربرد index بسازید و هزینهٔ نوشتن و فضای ذخیرهسازی را هم در ارزیابی لحاظ کنید.