mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-29 02:52:13 +00:00
188 lines
15 KiB
Markdown
188 lines
15 KiB
Markdown
---
|
||
machine_translated: true
|
||
machine_translated_rev: d734a8e46ddd7465886ba4133bff743c55190626
|
||
toc_priority: 31
|
||
toc_title: "\u0646\u062D\u0648"
|
||
---
|
||
|
||
# نحو {#syntax}
|
||
|
||
دو نوع تجزیه کننده در سیستم وجود دارد: تجزیه کننده کامل مربع (تجزیه کننده نزول بازگشتی) و تجزیه کننده فرمت داده (تجزیه کننده جریان سریع).
|
||
در تمام موارد به جز `INSERT` پرس و جو, تنها تجزیه کننده کامل گذاشتن استفاده شده است.
|
||
این `INSERT` پرس و جو از هر دو تجزیه کننده استفاده می کند:
|
||
|
||
``` sql
|
||
INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def')
|
||
```
|
||
|
||
این `INSERT INTO t VALUES` قطعه توسط تجزیه کننده کامل و داده ها تجزیه می شود `(1, 'Hello, world'), (2, 'abc'), (3, 'def')` توسط تجزیه کننده جریان سریع تجزیه می شود. شما همچنین می توانید تجزیه کننده کامل برای داده ها با استفاده از [در حال خواندن:](../operations/settings/settings.md#settings-input_format_values_interpret_expressions) تنظیمات. چه زمانی `input_format_values_interpret_expressions = 1` کلیک هاوس اول سعی می کند به تجزیه ارزش با تجزیه کننده جریان سریع. در صورت عدم موفقیت کلیک هاوس تلاش می کند تا از تجزیه کننده کامل برای داده ها استفاده کند و مانند یک مربع درمان شود [عبارت](#syntax-expressions).
|
||
|
||
داده ها می توانند هر فرمت داشته باشند. هنگامی که یک پرس و جو را دریافت کرده است, سرور محاسبه بیش از [بیشینه\_کرکی\_سیز](../operations/settings/settings.md#settings-max_query_size) بایت از درخواست در رم (به طور پیش فرض, 1 مگابایت), و بقیه جریان تجزیه.
|
||
این به این معنی است که سیستم با مشکلات بزرگ ندارد `INSERT` نمایش داده شد, مانند خروجی زیر می کند.
|
||
|
||
هنگام استفاده از `Values` قالب در یک `INSERT` پرس و جو, ممکن است به نظر می رسد که داده ها همان عبارات در تجزیه `SELECT` پرس و جو, اما این درست نیست. این `Values` فرمت بسیار محدود تر است.
|
||
|
||
بعد ما تجزیه کننده کامل را پوشش خواهیم داد. برای کسب اطلاعات بیشتر در مورد تجزیه کننده فرمت, دیدن [فرشها](../interfaces/formats.md) بخش.
|
||
|
||
## فاصلهها {#spaces}
|
||
|
||
ممکن است هر تعداد از نمادهای فضایی بین سازه های نحوی (از جمله شروع و پایان پرس و جو) وجود دارد. علامت فضا شامل فضا, باریکه, خوراک خط, کروم, و خوراک فرم.
|
||
|
||
## توضیحات {#comments}
|
||
|
||
گذاشتن به سبک و ج سبک نظرات پشتیبانی می شوند.
|
||
گذاشتن به سبک نظرات: از `--` به انتهای خط فضای پس از `--` می توان حذف.
|
||
نظرات در ج سبک: از `/*` به `*/`. این نظرات می تواند چند خطی باشد. فضاهای اینجا مورد نیاز نیست, هم.
|
||
|
||
## کلیدواژهها {#syntax-keywords}
|
||
|
||
کلمات کلیدی حساس به حروف هستند که مربوط به:
|
||
|
||
- استاندارد گذاشتن. به عنوان مثال, `SELECT`, `select` و `SeLeCt` همه معتبر هستند.
|
||
- پیاده سازی در برخی از پایگاه داده محبوب (خروجی زیر و یا پست). به عنوان مثال, `DateTime` همان است `datetime`.
|
||
|
||
این که نام نوع داده حساس به حروف باشد را میتوان در `system.data_type_families` جدول
|
||
|
||
در مقایسه با استاندارد گذاشتن تمام کلمات کلیدی دیگر (از جمله نام توابع) عبارتند از **حساس به حالت**.
|
||
|
||
کلمات کلیدی محفوظ نیست (فقط به عنوان کلمات کلیدی در زمینه مربوطه تجزیه می شوند). در صورت استفاده [شناسهها](#syntax-identifiers) همان کلمات کلیدی را به نقل قول محصور. برای مثال پرس و جو `SELECT "FROM" FROM table_name` معتبر است اگر جدول `table_name` دارای ستون با نام `"FROM"`.
|
||
|
||
## شناسهها {#syntax-identifiers}
|
||
|
||
شناسه ها عبارتند از:
|
||
|
||
- خوشه, پایگاه داده, جدول, پارتیشن و ستون نام.
|
||
- توابع.
|
||
- انواع داده ها.
|
||
- [نامگردانهای بیان](#syntax-expression_aliases).
|
||
|
||
شناسه را می توان به نقل و یا غیر نقل. توصیه می شود از شناسه های غیر نقل قول استفاده کنید.
|
||
|
||
شناسه های غیر نقل قول باید عبارت منظم مطابقت `^[a-zA-Z_][0-9a-zA-Z_]*$` و نمی تواند برابر باشد [کلیدواژهها](#syntax-keywords). مثالها: `x, _1, X_y__Z123_.`
|
||
|
||
اگر شما می خواهید به استفاده از شناسه همان کلمات کلیدی و یا شما می خواهید به استفاده از نمادهای دیگر در شناسه, نقل قول با استفاده از دو نقل قول و یا پشت پرده, مثلا, `"id"`, `` `id` ``.
|
||
|
||
## Literals {#literals}
|
||
|
||
وجود دارد: عددی, رشته, ترکیب و `NULL` literals.
|
||
|
||
### عددی {#numeric}
|
||
|
||
تحت اللفظی عددی تلاش می کند به تجزیه شود:
|
||
|
||
- برای اولین بار به عنوان یک شماره امضا 64 بیتی, با استفاده از [استرتول](https://en.cppreference.com/w/cpp/string/byte/strtoul) تابع.
|
||
- اگر ناموفق, به عنوان یک عدد بدون علامت 64 بیتی, با استفاده از [استرول](https://en.cppreference.com/w/cpp/string/byte/strtol) تابع.
|
||
- اگر ناموفق, به عنوان یک عدد شناور نقطه با استفاده از [رشته](https://en.cppreference.com/w/cpp/string/byte/strtof) تابع.
|
||
- در غیر این صورت, یک خطا بازگشته است.
|
||
|
||
مقدار مربوطه کوچکترین نوع است که متناسب با ارزش داشته باشد.
|
||
مثلا, 1 به عنوان تجزیه `UInt8` اما 256 به عنوان تجزیه شده است `UInt16`. برای کسب اطلاعات بیشتر, دیدن [انواع داده ها](../sql_reference/data_types/index.md).
|
||
|
||
مثالها: `1`, `18446744073709551615`, `0xDEADBEEF`, `01`, `0.1`, `1e100`, `-1e-100`, `inf`, `nan`.
|
||
|
||
### رشته {#syntax-string-literal}
|
||
|
||
فقط رشته های رشته ای در نقل قول های تک پشتیبانی می شوند. شخصیت های محصور می تواند بک اسلش فرار. توالی فرار زیر یک مقدار خاص مربوطه: `\b`, `\f`, `\r`, `\n`, `\t`, `\0`, `\a`, `\v`, `\xHH`. در تمام موارد دیگر, فرار توالی در قالب `\c` کجا `c` است هر شخصیت, به تبدیل `c`. این به این معنی است که شما می توانید توالی استفاده کنید `\'`و`\\`. ارزش خواهد شد که [رشته](../sql_reference/data_types/string.md) نوع.
|
||
|
||
حداقل مجموعه ای از شخصیت های که شما نیاز به فرار در لیتر رشته: `'` و `\`. نقل قول تنها را می توان با نقل قول تنها فرار, لیتر `'It\'s'` و `'It''s'` برابر هستند.
|
||
|
||
### ترکیب {#compound}
|
||
|
||
سازه ها برای ارریس پشتیبانی می شوند: `[1, 2, 3]` و تاپل: `(1, 'Hello, world!', 2)`..
|
||
در واقع این نیست literals اما عبارات با آرایه ایجاد اپراتور و چند تایی ایجاد اپراتور بود.
|
||
مجموعه ای باید شامل حداقل یک مورد باشد و یک تاپل باید حداقل دو مورد داشته باشد.
|
||
تاپل یک هدف خاص برای استفاده در `IN` بند یک `SELECT` پرس و جو. توپلس می تواند به عنوان نتیجه یک پرس و جو به دست, اما نمی توان به یک پایگاه داده ذخیره (به غیر از [حافظه](../engines/table_engines/special/memory.md) جدول).
|
||
|
||
### NULL {#null-literal}
|
||
|
||
نشان می دهد که ارزش از دست رفته است.
|
||
|
||
به منظور ذخیره `NULL` در یک میدان جدول باید از [Nullable](../sql_reference/data_types/nullable.md) نوع.
|
||
|
||
بسته به فرمت داده (ورودی یا خروجی), `NULL` ممکن است نمایندگی های مختلف. برای کسب اطلاعات بیشتر, اسناد و مدارک برای دیدن [قالبهای داده](../interfaces/formats.md#formats).
|
||
|
||
بسیاری از تفاوت های ظریف برای پردازش وجود دارد `NULL`. مثلا, اگر حداقل یکی از استدلال از یک عملیات مقایسه است `NULL` نتیجه این عملیات نیز خواهد بود `NULL`. همان درست است برای ضرب است, بعلاوه, و عملیات دیگر. برای کسب اطلاعات بیشتر, خواندن اسناد و مدارک برای هر عملیات.
|
||
|
||
در نمایش داده شد, شما می توانید بررسی کنید `NULL` با استفاده از [IS NULL](operators.md#operator-is-null) و [IS NOT NULL](operators.md) اپراتورها و توابع مرتبط `isNull` و `isNotNull`.
|
||
|
||
## توابع {#functions}
|
||
|
||
توابع مانند یک شناسه با یک لیست از استدلال نوشته شده (احتمالا خالی) در داخل پرانتز. در مقابل به گذاشتن استاندارد, براکت مورد نیاز است, حتی برای یک لیست استدلال خالی. مثال: `now()`.
|
||
توابع منظم و جمع وجود دارد (بخش را ببینید “Aggregate functions”). برخی از توابع دانه می تواند شامل دو لیست از استدلال در براکت. مثال: `quantile (0.9) (x)`. این توابع مجموع نامیده می شوند “parametric” توابع, و استدلال در لیست اول نامیده می شوند “parameters”. نحو توابع کل بدون پارامتر همان است که برای توابع به طور منظم است.
|
||
|
||
## اپراتورها {#operators}
|
||
|
||
اپراتورها در حال تبدیل به توابع مربوط به خود را طی پرس و جو و تجزیه گرفتن اولویت خود را و associativity به حساب آورد.
|
||
برای مثال بیان `1 + 2 * 3 + 4` تبدیل به `plus(plus(1, multiply(2, 3)), 4)`.
|
||
|
||
## انواع داده ها و موتورهای جدول پایگاه داده {#data_types-and-database-table-engines}
|
||
|
||
انواع داده ها و موتورهای جدول در `CREATE` پرس و جو به همان شیوه به عنوان شناسه و یا توابع نوشته شده است. به عبارت دیگر, ممکن است یا ممکن است حاوی یک لیست استدلال در براکت نیست. برای کسب اطلاعات بیشتر به بخش ها مراجعه کنید “Data types,” “Table engines,” و “CREATE”.
|
||
|
||
## نامگردانهای بیان {#syntax-expression_aliases}
|
||
|
||
نام مستعار یک نام تعریف شده توسط کاربر برای بیان در پرس و جو است.
|
||
|
||
``` sql
|
||
expr AS alias
|
||
```
|
||
|
||
- `AS` — The keyword for defining aliases. You can define the alias for a table name or a column name in a `SELECT` بند بدون استفاده از `AS` کلمه کلیدی.
|
||
|
||
For example, `SELECT table_name_alias.column_name FROM table_name table_name_alias`.
|
||
|
||
In the [CAST](sql_reference/functions/type_conversion_functions.md#type_conversion_function-cast) function, the `AS` keyword has another meaning. See the description of the function.
|
||
|
||
- `expr` — Any expression supported by ClickHouse.
|
||
|
||
For example, `SELECT column_name * 2 AS double FROM some_table`.
|
||
|
||
- `alias` — Name for `expr`. نام مستعار باید با پیروی از [شناسهها](#syntax-identifiers) نحو.
|
||
|
||
For example, `SELECT "table t".column_name FROM table_name AS "table t"`.
|
||
|
||
### نکاتی در مورد استفاده {#notes-on-usage}
|
||
|
||
نام مستعار جهانی برای یک پرس و جو و یا زیرخاکی هستند و شما می توانید یک نام مستعار در هر بخشی از یک پرس و جو برای هر بیان تعریف. به عنوان مثال, `SELECT (1 AS n) + 2, n`.
|
||
|
||
نام مستعار قابل مشاهده نیست در subqueries و بین subqueries. مثلا, در حالی که اجرای پرس و جو `SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a` تاتر استثنا را تولید می کند `Unknown identifier: num`.
|
||
|
||
اگر یک نام مستعار برای ستون نتیجه در تعریف `SELECT` بند یک خرده فروشی, این ستون ها در پرس و جو بیرونی قابل مشاهده هستند. به عنوان مثال, `SELECT n + m FROM (SELECT 1 AS n, 2 AS m)`.
|
||
|
||
مراقب باشید با نام مستعار است که همان نام ستون یا جدول می باشد. بیایید مثال زیر را در نظر بگیریم:
|
||
|
||
``` sql
|
||
CREATE TABLE t
|
||
(
|
||
a Int,
|
||
b Int
|
||
)
|
||
ENGINE = TinyLog()
|
||
```
|
||
|
||
``` sql
|
||
SELECT
|
||
argMax(a, b),
|
||
sum(b) AS b
|
||
FROM t
|
||
```
|
||
|
||
``` text
|
||
Received exception from server (version 18.14.17):
|
||
Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Aggregate function sum(b) is found inside another aggregate function in query.
|
||
```
|
||
|
||
در این مثال ما اعلام جدول `t` با ستون `b`. سپس, در هنگام انتخاب داده, ما تعریف `sum(b) AS b` نام مستعار. به عنوان نام مستعار جهانی هستند, خانه را جایگزین تحت اللفظی `b` در عبارت `argMax(a, b)` با بیان `sum(b)`. این جایگزینی باعث استثنا.
|
||
|
||
## ستاره {#asterisk}
|
||
|
||
در یک `SELECT` پرس و جو, ستاره می تواند عبارت جایگزین. برای کسب اطلاعات بیشتر به بخش مراجعه کنید “SELECT”.
|
||
|
||
## عبارتها {#syntax-expressions}
|
||
|
||
بیان یک تابع است, شناسه, تحت اللفظی, استفاده از یک اپراتور, بیان در داخل پرانتز, خرده فروشی, یا ستاره. همچنین می تواند شامل یک نام مستعار.
|
||
لیستی از عبارات یک یا چند عبارت از هم جدا شده توسط کاما است.
|
||
توابع و اپراتورهای, به نوبه خود, می توانید عبارات به عنوان استدلال دارند.
|
||
|
||
[مقاله اصلی](https://clickhouse.tech/docs/en/query_language/syntax/) <!--hide-->
|