mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 09:32:01 +00:00
188 lines
15 KiB
Markdown
188 lines
15 KiB
Markdown
---
|
||
machine_translated: true
|
||
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
|
||
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/index.md#operator-is-null) و [IS NOT NULL](operators/index.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/sql_reference/syntax/) <!--hide-->
|