SQL WITH
آن کلمه کلیدی SQL چگونه دوباره کار میکند؟
مرجع نحو SQL
آن کلمه کلیدی SQL چگونه دوباره کار میکند؟
SQL ALL
بررسی میکند که آیا همه مقادیر در یک زیرپرسوجو یک شرط را برآورده میکنند.
WITH widget_prices AS (
SELECT price
FROM products
WHERE category = 'Widget'
)
SELECT
title,
price,
category
FROM
products
WHERE
price > ALL (SELECT price FROM widget_prices);
SQL AND
ردیفهایی که چندین شرط در آنها درست است را فیلتر میکند.
SELECT
*
FROM
products
WHERE
category = 'Gizmo'
AND price > 50;
SQL ANY
بررسی میکند که آیا هر مقدار در یک زیرپرسوجو یک شرط را برآورده میکند. ANY و SOME یکسان هستند.
SELECT
title,
price
FROM
products
WHERE
price > ANY (
SELECT price
FROM products
WHERE category = 'Widget'
);
SQL ARRAY
به شما امکان کار با آرایههای مقادیر را میدهد. (نحو بر اساس پایگاه داده متفاوت است، اما در اینجا یک مثال به سبک Postgres است.)
SELECT ARRAY[price, 100, 200] AS price_array
FROM products
LIMIT 1;
SQL AVG
میانگین مقدار یک ستون عددی را محاسبه میکند.
SELECT
AVG(price)
FROM
products;
SQL AS
یک نام مستعار برای یک ستون در نتایج ایجاد میکند.
SELECT
title AS "Product Name",
category AS "Product Category"
FROM
products;
SQL BETWEEN
بررسی میکند که آیا یک مقدار در یک محدوده (شامل) است.
SELECT
*
FROM
products
WHERE
price BETWEEN 10 AND 20;
همچنین فیلتر کردن SQL بر اساس تاریخ را ببینید.
SQL CASE
مقادیر را بر اساس شرایط برمیگرداند، مثل if-else.
SELECT
title,
CASE
WHEN price > 100 THEN 'Expensive'
ELSE 'Affordable'
END AS price_category
FROM
products;
SQL CAST
یک مقدار را از یک نوع داده به نوع دیگر تبدیل میکند.
CAST(24.99 AS VARCHAR) AS price_text,
CAST('2024-01-01' AS DATE) AS order_date
همچنین فیلتر کردن SQL بر اساس تاریخ را ببینید.
SQL COUNT
تعداد ردیفها را میشمارد.
SELECT
COUNT(*)
FROM
orders;
SQL CURRENT_DATE
تاریخ فعلی را از سیستم برمیگرداند.
SELECT
CURRENT_DATE AS today,
CURRENT_DATE - INTERVAL '1' DAY AS yesterday,
CURRENT_DATE + INTERVAL '1' DAY AS tomorrow;
INTERVAL و فیلتر کردن SQL بر اساس تاریخ را ببینید.
SQL DATE
یک مقدار تاریخ از یک رشته ایجاد میکند یا بخش تاریخ را از یک timestamp استخراج میکند.
-- Create a date from a string
SELECT DATE '2024-05-04' AS specific_date;
بیشتر پایگاههای داده '2025-05-04` را به عنوان تاریخ استنباط میکنند، اما بهتر است صریح باشید.
همچنین فیلتر کردن SQL بر اساس تاریخ را ببینید.
SQL CURRENT_TIME
زمان فعلی را از سیستم برمیگرداند.
SELECT
CURRENT_TIME AS right_now,
CURRENT_TIME + INTERVAL '30' MINUTE AS thirty_mins_later;
INTERVAL و فیلتر کردن SQL بر اساس تاریخ را ببینید.
SQL DISTINCT
فقط مقادیر منحصر به فرد را برمیگرداند.
SELECT
DISTINCT category
FROM
products;
SQL EXCEPT
ردیفهایی از پرسوجوی اول که در پرسوجوی دوم نیستند را برمیگرداند.
SELECT
id
FROM
people
EXCEPT
SELECT
user_id
FROM
orders;
SQL EXISTS
بررسی میکند که آیا یک زیرپرسوجو هر ردیفی برمیگرداند.
SELECT
name
FROM
people
WHERE
EXISTS (
SELECT 1
FROM orders
WHERE orders.user_id = people.id
);
SQL EXTRACT
یک بخش خاص (سال، ماه، روز و غیره) را از یک تاریخ یا timestamp استخراج میکند.
SELECT
created_at as "timestamp",
EXTRACT(YEAR FROM created_at) AS "year",
EXTRACT(MONTH FROM created_at) AS "month",
EXTRACT(DAY FROM created_at) AS "day",
EXTRACT(HOUR FROM created_at) AS "hour",
EXTRACT(DOW FROM created_at) AS "day of week"
FROM
orders;
که نتیجه میدهد:
| timestamp | year | month | day | hour | day of week |
| -------------------------- | ----- | ----- | --- | ---- | ----------- |
| February 11, 2025, 9:40 PM | 2,025 | 2 | 11 | 21 | 3 |
| May 15, 2024, 8:04 AM | 2,024 | 5 | 15 | 8 | 4 |
| December 6, 2025, 10:22 PM | 2,025 | 12 | 6 | 22 | 7 |
| August 22, 2025, 4:30 PM | 2,025 | 8 | 22 | 16 | 6 |
| October 10, 2024, 3:34 AM | 2,024 | 10 | 10 | 3 | 5 |
| November 6, 2025, 4:38 PM | 2,025 | 11 | 6 | 16 | 5 |
همچنین فیلتر کردن SQL بر اساس تاریخ را ببینید.
SQL FROM
جدولی که باید پرسوجو شود را مشخص میکند.
SELECT
*
FROM
products;
SQL GROUP BY
ردیفهایی که مقادیر یکسانی در ستونهای مشخص شده دارند را گروهبندی میکند.
SELECT
category,
COUNT(*)
FROM
products
GROUP BY
category;
SQL HAVING
گروهها را پس از تجمیع فیلتر میکند (با GROUP BY استفاده میشود).
SELECT
category,
COUNT(*)
FROM
products
GROUP BY
category
HAVING
COUNT(*) > 2;
SQL IN
بررسی میکند که آیا یک مقدار با هر مقدار در یک فهرست یا زیرپرسوجو مطابقت دارد.
استفاده از یک فهرست مقادیر:
SELECT
*
FROM
products
WHERE
category IN ('Gizmo', 'Widget');
استفاده از یک زیرپرسوجو:
SELECT
*
FROM
orders
WHERE
user_id IN (
SELECT id
FROM people
WHERE state = 'VT'
);
SQL INTERVAL
یک دوره زمانی برای محاسبات تاریخ/زمان مشخص میکند. واحدهای رایج شامل سال، ماه، هفته، روز، ساعت، دقیقه و ثانیه است.
میتوانید از INTERVAL برای افزودن روز استفاده کنید:
SELECT
created_at,
-- Add 7 days to a date
created_at + INTERVAL '7' DAY AS next_week
FROM
orders;
کم کردن ماه:
SELECT
created_at,
-- Subtract 2 months from a date
created_at - INTERVAL '2' MONTH AS two_months_ago
FROM
orders;
واحدهای datetime SQL شامل:
YEARMONTHDAYHOURMINUTE-SECOND
همچنین فیلتر کردن SQL بر اساس تاریخ را ببینید.
SQL INNER JOIN
ردیفهایی را برمیگرداند که در هر دو جدول یک تطابق وجود دارد.
SELECT
orders.id,
products.title
FROM
orders
INNER JOIN products ON orders.product_id = products.id;
همچنین ترکیب جداول با joinهای SQL را ببینید.
SQL INTERSECT
ردیفهایی که در هر دو پرسوجو ظاهر میشوند را برمیگرداند.
SELECT
id
FROM
people
INTERSECT
SELECT
user_id
FROM
orders;
SQL IS NULL
برای مقادیر گمشده (null) بررسی میکند.
SELECT
*
FROM
products
WHERE
vendor IS NULL;
SQL JOIN
ردیفها را از دو یا چند جدول بر اساس یک ستون مرتبط ترکیب میکند.
SELECT
orders.id,
products.title
FROM
orders
JOIN products ON orders.product_id = products.id;
همچنین ترکیب جداول با joinهای SQL را ببینید.
SQL LEFT JOIN
همه ردیفها را از جدول چپ، و ردیفهای مطابق از جدول راست برمیگرداند.
SELECT
people.name,
orders.id
FROM
people
LEFT JOIN orders ON people.id = orders.user_id;
همچنین ترکیب جداول با joinهای SQL را ببینید.
SQL LIKE
ردیفها را با تطابق الگو فیلتر میکند.
SELECT
*
FROM
products
WHERE
title LIKE '%Wool%';
همچنین فیلتر کردن SQL بر اساس متن را ببینید.
SQL LIMIT
تعداد ردیفهای برگردانده شده را محدود میکند.
SELECT
*
FROM
products
LIMIT
3;
SQL MAX
حداکثر مقدار در یک ستون را برمیگرداند.
SELECT
MAX(price)
FROM
products;
SQL MIN
حداقل مقدار در یک ستون را برمیگرداند.
SELECT
MIN(price)
FROM
products;
SQL MOD
تابع ریاضی که باقیمانده یک تقسیم را برمیگرداند. میتواند برای نمونهگیری ردیفها با IDهای توزیع شده تصادفی استفاده شود.
SELECT
*
FROM
products
WHERE
MOD(id, 10) = 3;
SQL NOT
یک شرط را نفی میکند.
SELECT
*
FROM
products
WHERE
NOT category = 'Gizmo';
SQL NULL
داده گمشده یا ناشناخته را نشان میدهد.
SELECT
*
FROM
products
WHERE
vendor IS NULL;
SQL ON
شرط join بین جداول را مشخص میکند.
SELECT
orders.id,
products.title
FROM
orders
JOIN products ON orders.product_id = products.id;
SQL OR
ردیفهایی که حداقل یک شرط در آنها درست است را فیلتر میکند.
SELECT
*
FROM
products
WHERE
category = 'Gizmo'
OR price > 100;
SQL ORDER BY
مجموعه نتیجه را بر اساس یک یا چند ستون مرتب میکند.
SELECT
title,
price
FROM
products
ORDER BY
price DESC;
SQL RIGHT JOIN
همه ردیفها را از جدول راست، و ردیفهای مطابق از جدول چپ برمیگرداند.
SELECT
orders.id,
people.name
FROM
orders
RIGHT JOIN people ON orders.user_id = people.id;
SQL SELECT
ستونهایی که باید از یک جدول برگردانده شوند را مشخص میکند.
-- Get all columns
SELECT
*
FROM
products;
-- Get specific columns
SELECT
title,
category
FROM
products;
SQL SOME
مشابه ANY - بررسی میکند که آیا هر مقدار در یک زیرپرسوجو یک شرط را برآورده میکند.
SELECT
title,
price
FROM
products
WHERE
price > SOME (
SELECT price
FROM products
WHERE category = 'Widget'
);
SQL SUM
مقادیر در یک ستون را جمع میکند.
SELECT
SUM(price)
FROM
products;
SQL UNION
نتایج دو پرسوجو را ترکیب میکند (تکراریها را حذف میکند).
SELECT
title
FROM
products
UNION
SELECT
name
FROM
people;
SQL UNION ALL
نتایج دو پرسوجو را ترکیب میکند و همه ردیفها را نگه میدارد، حتی تکراریها. پس اگر همان مقدار در هر دو پرسوجو ظاهر شود، دو بار آن را خواهید دید.
SELECT
title
FROM
products
UNION ALL
SELECT
name
FROM
people;
SQL WHERE
ردیفها را بر اساس شرایط مشخص شده فیلتر میکند.
SELECT
*
FROM
products
WHERE
MOD(id, 10) = 3;
SQL WITH
یک عبارت جدول مشترک (CTE) که میتوانید در پرسوجوی خود استفاده کنید را تعریف میکند. مثل یک مجموعه نتیجه موقت است.
WITH expensive_products AS (
SELECT *
FROM products
WHERE price > 100
)
SELECT title FROM expensive_products;