فصل 1. نحو SQL

ساخت وبلاگ

در این فصل نحو SQL شرح داده شده است. این پایه و اساس درک فصل های زیر را تشکیل می دهد که در مورد نحوه اعمال دستورات SQL برای تعریف و اصلاح داده ها به جزئیات می پردازد.

ما همچنین به کاربران توصیه می کنیم که از قبل با SQL آشنا هستند تا این فصل را با دقت بخوانند زیرا چندین قانون و مفهوم وجود دارد که به طور متناقض در بین بانکهای اطلاعاتی SQL اجرا می شوند یا مخصوص PostgreSQL هستند.

1. 1ساختاری

ورودی SQL از دنباله ای از دستورات تشکیل شده است. یک دستور از دنباله ای از نشانه ها تشکیل شده است ، که توسط یک قسمت اصلی ("؛") خاتمه یافته است. انتهای جریان ورودی نیز یک دستور را خاتمه می دهد. کدام نشانه ها معتبر هستند به نحو دستور خاص بستگی دارد.

یک نشانه می تواند یک کلمه کلیدی ، شناسه ، شناسه نقل شده ، یک تحت اللفظی (یا ثابت) یا یک نماد شخصیت خاص باشد. توکن ها معمولاً با فضای سفید (فضا ، برگه ، خط جدید) از هم جدا می شوند ، اما در صورت عدم ابهام لازم نیست (که به طور کلی فقط در صورتی که یک شخصیت خاص در مجاورت برخی دیگر از نوع نشانه ها باشد).

علاوه بر این ، نظرات می تواند در ورودی SQL رخ دهد. آنها نشانه هایی نیستند ، آنها به طور موثری با فضای سفید هستند.

به عنوان مثال ، موارد زیر (به صورت نحوی) ورودی SQL معتبر است:

این یک توالی از سه دستور است ، یک در هر خط (اگرچه این مورد لازم نیست ؛ بیش از یک دستور می تواند روی یک خط باشد و دستورات می توانند به طور مفید در خطوط تقسیم شوند).

نحو SQL با توجه به آنچه نشانه ها دستورات را شناسایی می کنند و عملیات یا پارامترها هستند ، چندان سازگار نیست. چند نشانه اول به طور کلی نام فرمان هستند ، بنابراین در مثال بالا معمولاً از "انتخاب" ، "به روزرسانی" و یک دستور "درج" صحبت می کنیم. اما به عنوان مثالبه روز رسانیفرمان همیشه بهتنظیمنشانه ای که در یک موقعیت خاص ظاهر می شود ، و این تغییر خاص ازدرج کردنهمچنین بهارزش هایبه منظور کامل بودنقوانین نحوی دقیق برای هر دستور در دفترچه راهنمای مرجع PostgreSQL 7. 3. 21 شرح داده شده است.

1. 1. 1. شناسه ها و کلمات کلیدی

نشانه هایی مانندانتخاب کنید, به روز رسانی، یاارزش هایدر مثال بالا نمونه هایی از کلمات کلیدی است ، یعنی کلماتی که در زبان SQL معنای ثابت دارند. نشانه هاmy_tableوتAنمونه هایی از شناسه ها هستند. آنها بسته به دستور مورد استفاده در آنها ، نام جداول ، ستون ها یا سایر اشیاء پایگاه داده را شناسایی می کنند. بنابراین بعضی اوقات آنها به سادگی "نام" خوانده می شوند. کلمات کلیدی و شناسه ها از ساختار واژگانی یکسان برخوردار هستند ، به این معنی که نمی توان دانست که آیا یک نشانه شناسه است یا یک کلمه کلیدی بدون دانستن زبان. لیست کاملی از کلمات کلیدی را می توان در پیوست B یافت.

شناسه های SQL و کلمات کلیدی باید با یک نامه شروع شوند (a-z، اما همچنین حروف با علائم دیاکریتیک و حروف غیر لاتین) یا یک زیرک (_). شخصیت های بعدی در یک شناسه یا کلمه کلیدی می توانند حروف ، رقم باشند (0-9) ، یا تأکید می کند ، اگرچه استاندارد SQL یک کلمه کلیدی را که حاوی رقم باشد تعریف نمی کند یا با یک زیرکانه شروع یا پایان می یابد.

سیستم بیش از آن استفاده نمی کندنامگذاری شده-1 کاراکترهای یک شناسه ؛نام های طولانی تر را می توان در دستورات نوشت ، اما آنها کوتاه می شوند. به صورت پیش فرض،نامگذاری شده64 است بنابراین حداکثر طول شناسه 63 است (اما در آن زمان PostgreSQL ساخته شده است ،نامگذاری شدهقابل تغییر درSRC/شامل/postgres_ext. h).

شناسه و نام کلمات کلیدی غیر حساس هستند. از این رو

می تواند به طور معادل به عنوان نوشته شود

یک کنوانسیون که اغلب مورد استفاده قرار می گیرد نوشتن کلمات کلیدی در موارد بزرگ و نام ها در موارد پایین ، به عنوان مثال ،

یک نوع دوم شناسه وجود دارد: شناسه محدود یا شناسه نقل شده. با محصور کردن یک دنباله دلخواه از کاراکترها در حروف دوتایی تشکیل می شود ("). شناسه محدود همیشه یک شناسه است ، هرگز یک کلمه کلیدی نیست. بنابراین"انتخاب کنید"می توان برای اشاره به یک ستون یا جدول به نام "انتخاب" استفاده کرد ، در حالی که یک نامشخص استانتخاب کنیدبه عنوان یک کلمه کلیدی در نظر گرفته می شود و بنابراین هنگام استفاده از نام جدول یا ستون ، خطای تجزیه را تحریک می کند. مثال را می توان با شناسه های نقل شده مانند این نوشت:

شناسه های نقل شده می توانند شامل هر شخصیتی غیر از یک نقل قول مضاعف باشند. برای شامل یک نقل قول مضاعف ، دو نقل قول دوتایی بنویسید. این اجازه می دهد تا نامهای جدول یا ستون ایجاد کنید که در غیر این صورت امکان پذیر نیست ، مانند مواردی که حاوی فضاها یا آمپر است. محدودیت طول هنوز اعمال می شود.

به نقل از یک شناسه ، آن را حساس به مورد نیز می کند ، در حالی که نام های بدون سیم همیشه به موارد کمتری تاشو می شوند. به عنوان مثال ، شناسه هافحش, فحشوت"فو"توسط postgresql یکسان محسوب می شوند ، اما"فو"وت"فو"با این سه و یکدیگر متفاوت هستند.[1]

1. 1. 2. ثابت

سه نوع ثابت به طور ضمنی در PostgreSQL وجود دارد: رشته ها ، رشته های بیت و اعداد. ثابت همچنین می تواند با انواع صریح مشخص شود ، که می تواند نمایندگی دقیق تر و کارآمدتر توسط سیستم را فعال کند. ثابت های ضمنی در زیر شرح داده شده است. ثابت های صریح پس از آن مورد بحث قرار می گیرد.

1. 1. 2. 1. ثابت

ثابت رشته در SQL یک توالی دلخواه از شخصیت ها است که توسط نقل قول های منفرد ("" ") محدود شده است ، به عنوان مثال ،"این یک رشته است"بشرSQL اجازه می دهد تا با تایپ دو نقل قول مجاور مجاور ، نقل قول های منفرد در رشته ها تعبیه شود (به عنوان مثال ،"اسب دایان"). در نقل قول های مجرد PostgreSQL ممکن است با یک backslash فرار شود ("" ، به عنوان مثال ،"اسب دایان").

فرار از پشتی به سبک C نیز موجود است:x08فضای پشتی است ،fیک خوراک فرم است ، یک خط جدید است ، بازگشت کالسکه است ، یک برگه است ، وxxx، جایی کهxxxیک عدد اکتال است ، شخصیتی با کد ASCII مربوطه است. هر شخصیت دیگری که به دنبال پشتی است ، به معنای واقعی کلمه گرفته می شود. بنابراین ، برای قرار دادن یک پشتی در یک رشته ثابت ، دو قسمت پشتی را تایپ کنید.

شخصیت با کد صفر نمی تواند در یک رشته ثابت باشد.

دو ثابت رشته ای که فقط با فضای سفید با حداقل یک خط جدید از هم جدا می شوند ، به هم پیوسته و به طور مؤثر درمان می شوند که گویی رشته در یک ثابت نوشته شده است. مثلا:

برابر است با

نحو معتبر نیست.(این رفتار کمی عجیب توسط SQL مشخص شده است ؛ PostgreSQL استاندارد را دنبال می کند.)

1. 1. 2. 2. ثبات رشته ای

ثابت های رشته ای مانند ثابت های رشته ای با یکB(مورد بالا یا پایین) بلافاصله قبل از نقل قول افتتاح (بدون فضای سفید مداخله) ، به عنوان مثال ،B'1001 'بشرتنها شخصیت های مجاز در ثابت رشته های بیت هستند0وت1.

از طرف دیگر ، ثابت های رشته بیت را می توان با استفاده از یک پیشرو در نماد شش ضلعی مشخص کردX(مورد بالا یا پایین) ، به عنوان مثال ،x'1ff 'بشراین نماد معادل یک رشته بیت با چهار رقم باینری برای هر رقم شش ضلعی است.

هر دو شکل از ثابت بیت می توانند در خطوط به همان روشی که ثابت های رشته معمولی ادامه دارند ، ادامه یابد.

1. 1. 2. 3. ثبات عددی

ثابت های عددی در این اشکال کلی پذیرفته می شوند:

جایی کهرقمیک یا چند رقم اعشاری است (0 تا 9). در صورت استفاده از یک رقم حداقل باید قبل یا بعد از نقطه اعشاری باشد. حداقل یک رقم باید از نشانگر Exponent استفاده کند (e) ، اگر یکی حضور داشته باشد. ممکن است هیچ فضایی یا شخصیت های دیگر تعبیه شده در ثابت وجود نداشته باشد. توجه داشته باشید که هر علامت پیشرو به علاوه یا منهای در واقع بخشی از ثابت محسوب نمی شود. این یک اپراتور است که به ثابت اعمال می شود.

اینها چند نمونه از ثابت های عددی معتبر است:

ثابت عددی که نه نقطه اعشاری و نه یک نماینده در ابتدا تصور می شود که نوع باشدعدد صحیحاگر مقدار آن در نوع باشدعدد صحیح(32 بیت) ؛در غیر این صورت فرض می شود نوع باشدبا ابلهاگر مقدار آن در نوع باشدبا ابله(64 بیت) ؛در غیر این صورت از نوع استفاده می شودعددیبشرثابت هایی که حاوی نقاط اعشاری و/یا نمایندگان هستند همیشه در ابتدا تصور می شوند که نوع هستندعددی.

نوع داده در ابتدا اختصاص داده شده از ثابت عددی فقط یک نقطه شروع برای الگوریتم های وضوح نوع است. در بیشتر موارد ، بسته به متن ، ثابت به طور خودکار به مناسب ترین نوع اجبار می شود. در صورت لزوم ، می توانید یک مقدار عددی را مجبور کنید که با ریخته گری آن به عنوان یک نوع داده خاص تفسیر شود. به عنوان مثال ، می توانید یک مقدار عددی را مجبور کنید که به عنوان نوع رفتار شودواقعی (float4) با نوشتن

1. 1. 2. 4. ثابت در انواع دیگر

ثابت از نوع دلخواه با استفاده از هر یک از نمادهای زیر می تواند وارد شود:

متن رشته برای نوع نامگذاری شده به روال تبدیل ورودی منتقل می شودنوعبشرنتیجه ثابت از نوع مشخص شده است. اگر هیچ ابهام در مورد نوع ثابت وجود نداشته باشد ، ممکن است بازیگران نوع صریح حذف شوند (برای مثال ، وقتی به عنوان یک آرگومان به یک عملکرد غیر بارگیری نشده منتقل می شود) ، در این صورت به طور خودکار اجبار می شود.

همچنین می توان با استفاده از یک نحو شبیه به عملکرد ، یک اجبار نوع را مشخص کرد:

اما ممکن است از همه نام ها به این روش استفاده نشود. برای جزئیات بیشتر به بخش 1. 2. 6 مراجعه کنید.

در::, قالب()، و نحوهای عملکرد عملکرد نیز می توانند برای مشخص کردن تبدیل نوع زمان اجرا از عبارات دلخواه ، همانطور که در بخش 1. 2. 6 بحث شده است ، استفاده شود. اما فرمنوع 'رشتهفقط می تواند برای مشخص کردن نوع ثابت تحت اللفظی استفاده شود. محدودیت دیگری درنوع 'رشتهاین است که برای انواع آرایه کار نمی کند. استفاده کنید::یاقالب()برای مشخص کردن نوع ثابت یک آرایه.

1. 1. 2. 5. ثابت

قالب کلی یک آرایه ثابت موارد زیر است:

جایی کهمباشرتشخصیت تعیین کننده برای نوع است ، همانطور که در آن ثبت شده استpg_typeورود(برای همه انواع داخلی ، این شخصیت کاما است "," .) هر یکدرهیا ثابت از نوع عنصر آرایه یا یک زیر مجموعه است. نمونه ای از ثابت آرایه است

این ثابت یک آرایه دو بعدی ، 3 بر 3 است که از سه زیر مجموعه اعداد صحیح تشکیل شده است.

عناصر آرایه فردی را می توان بین علائم دوتایی قرار داد (") برای جلوگیری از مشکلات ابهام در رابطه با فضای سفید. بدون علامت نقل قول ، تجزیه کننده ارزش آرایه از فضای پیشرو استفاده می کند.

(ثابت های آرایه در واقع فقط یک مورد خاص از ثابت های نوع عمومی است که در بخش قبلی مورد بحث قرار گرفته است. ثابت در ابتدا به عنوان یک رشته تحت درمان قرار می گیرد و به روال تبدیل ورودی آرایه منتقل می شود. یک مشخصات نوع صریح ممکن است لازم باشد.)

1. 1. 3. عملگر

یک اپراتور دنباله ای از تانامگذاری شده-1 (63 به طور پیش فرض) کاراکترهایی از لیست زیر:

$(دلار) نمی تواند یک اپراتور تک شخصیت باشد ، اگرچه می تواند بخشی از نام اپراتور چند شخصیت باشد.

--وت/*نمی تواند در هر جایی به نام اپراتور ظاهر شود ، زیرا آنها به عنوان شروع یک نظر گرفته می شوند.

یک نام اپراتور چند شخصیت نمی تواند به پایان برسد+یا-، مگر اینکه نام نیز حداقل یکی از این شخصیت ها را داشته باشد:

هنگام کار با نام های اپراتور استاندارد غیر SQL ، برای جلوگیری از ابهام ، معمولاً باید اپراتورهای مجاور را با فضاها جدا کنید. به عنوان مثال ، اگر یک اپراتور Unary چپ را به نام تعریف کرده اید@، شما نمی توانید بنویسیدX*@Y؛شما باید بنویسیدX* @Yبرای اطمینان از اینکه PostgreSQL آن را به عنوان دو نام اپراتور خوانده است نه یکی.

1. 1. 4. شخصیت های خاص

برخی از شخصیت هایی که الفبایی نیستند معنای خاصی دارند که با اپراتور بودن متفاوت است. جزئیات مربوط به استفاده را می توان در محلی که عنصر نحوی مربوطه در آن شرح داده شده است ، یافت. این بخش فقط برای مشاوره در مورد وجود و خلاصه کردن اهداف این شخصیت ها وجود دارد.

یک علامت دلار ($) به دنبال آن رقم ها برای نشان دادن پارامترهای موقعیتی در بدنه تعریف عملکرد استفاده می شود. در زمینه های دیگر ، علامت دلار ممکن است بخشی از نام اپراتور باشد.

پرانتز (()) معنای معمول خود را برای گروه های گروهی و اجرای تقدم دارد. در بعضی موارد پرانتز به عنوان بخشی از نحو ثابت یک دستور SQL خاص مورد نیاز است.

براکت ([]) برای انتخاب عناصر یک آرایه استفاده می شود. برای اطلاعات بیشتر در مورد آرایه ها به بخش 5. 12 مراجعه کنید.

کاما (,) در برخی از سازه های نحوی برای جدا کردن عناصر یک لیست استفاده می شود.

نیمه رنگ (;) دستور SQL را خاتمه می دهد. نمی تواند در هیچ کجا در یک دستور ظاهر شود ، به جز در یک رشته ثابت یا شناسه نقل شده.

روده بزرگ (:) برای انتخاب "برش" از آرایه ها استفاده می شود.(به بخش 5. 12 مراجعه کنید.) در برخی از گویش های SQL (مانند SQL تعبیه شده) ، از روده بزرگ برای پیشوند نام های متغیر استفاده می شود.

ستاره (*) در صورت استفاده درانتخاب کنیدفرمان یا با عملکرد کل شمارش.

دوره (.) در ثابت های نقطه شناور و برای جدا کردن طرح ، جدول و نام ستون استفاده می شود.

1. 1. 5. نظرات

یک نظر یک دنباله دلخواه از شخصیت ها است که با مضاعف شروع می شود و تا انتهای خط گسترش می یابد ، به عنوان مثال:

از طرف دیگر ، می توان از نظرات بلوک به سبک C استفاده کرد:

از جایی که نظر با شروع می شود/*و به وقوع تطبیق گسترش می یابد*/بشراین نظرات بلوک ، همانطور که در SQL99 مشخص شده است ، اما برخلاف C ، لانه می کند ، به طوری که می توان بلوک های بزرگتر کد را که ممکن است حاوی نظرات بلوک موجود باشد ، اظهار نظر کند.

یک نظر از جریان ورودی قبل از تجزیه و تحلیل نحو بیشتر حذف می شود و به طور مؤثر توسط فضای سفید جایگزین می شود.

1. 1. 6. تقدم لغوی

جدول 1-1 برتری و همبستگی اپراتورها در PostgresQL را نشان می دهد. بیشتر اپراتورها دارای همان تقدم هستند و از نظر چپ نیز هستند. تقدم و همبستگی اپراتورها به سختی به تجزیه کننده می پردازد. این ممکن است به رفتار غیر شهودی منجر شود. به عنوان مثال اپراتورهای بولیوت>برتری متفاوتی نسبت به اپراتورهای بولی داشته باشیدوت>=بشرهمچنین ، شما گاهی اوقات هنگام استفاده از ترکیبی از اپراتورهای باینری و متناوب ، نیاز به اضافه کردن پرانتز دارید. برای مثال

تجزیه می شود به عنوان

از آنجا که تجزیه کننده هیچ ایده ای ندارد - تا اینکه خیلی دیر نشده - این!به عنوان یک اپراتور postfix تعریف شده است ، نه یک infix. برای به دست آوردن رفتار مورد نظر در این مورد ، باید بنویسید

این همان قیمتی است که برای قابل توسعه پرداخت می کند.

جدول 1-1. برتری اپراتور (کاهش)

 

عملگر/عنصر وابسته بودن شرح
. ترک کرد جداکننده جدول/نام ستون
:: ترک کرد typecast postgresq l-style
[ ] ترک کرد انتخاب عنصر آرایه
- درست منهای
^ ترک کرد مفهوم
* / % ترک کرد ضرب ، تقسیم ، مدول
+ - ترک کرد علاوه بر این ، تفریق
IS درست است, دروغ است, ناشناخته است, تهی است
isnull آزمون برای تهی
تهی نیست آزمون برای تهی نکردن
(هر دیگری) ترک کرد تمام اپراتورهای دیگر بومی و تعریف شده توسط کاربر
IN عضویت را تعیین کنید
بین مهار
همپوشانی همپوشانی فاصله زمانی
پسندیدن من دوست دارم مشابه تطبیق الگوی رشته
> کمتر از ، بیشتر از
= درست برابری ، واگذاری
نه درست نفی منطقی
وت ترک کرد پیوستگی منطقی
OR ترک کرد تفکیک منطقی

توجه داشته باشید که قوانین اولویت اپراتور همچنین در مورد اپراتورهای تعریف شده توسط کاربر که دارای نام های مشابه اپراتورهای داخلی است که در بالا ذکر شد ، اعمال می شود. به عنوان مثال ، اگر یک اپراتور "+" را برای برخی از نوع داده های سفارشی تعریف کنید ، همان مقدمات داخلی "+" است ، مهم نیست که شما چه کاری انجام می دهد.

هنگامی که از یک نام اپراتور با صلاحیت طرحواره استفاده می شوداپراتورنحو ، به عنوان مثال در

دراپراتورساختار گرفته شده است تا پیش فرض پیش فرض در جدول 1-1 برای اپراتور "سایر" نشان داده شود. این درست است که نام اپراتور خاص در داخل ظاهر می شوداپراتور().

یادداشت

تاشو نامهای بدون سیم به موارد پایین در PostgreSQL با استاندارد SQL ناسازگار است ، که می گوید نامهای بدون سیم باید به صورت بالایی جمع شوند. بدین ترتیب،فحشباید معادل باشد"فو"نه"فو"با توجه به استاندارداگر می خواهید برنامه های قابل حمل را بنویسید ، توصیه می شود همیشه یک نام خاص را نقل کنید یا هرگز آن را نقل نکنید.< SPAN> توجه داشته باشید که قوانین اولویت اپراتور همچنین در مورد اپراتورهای تعریف شده توسط کاربر که نام های مشابهی با اپراتورهای داخلی ذکر شده در بالا دارند ، اعمال می شود. به عنوان مثال ، اگر یک اپراتور "+" را برای برخی از نوع داده های سفارشی تعریف کنید ، همان مقدمات داخلی "+" است ، مهم نیست که شما چه کاری انجام می دهد.

آشنایی با رمزارزها...
ما را در سایت آشنایی با رمزارزها دنبال می کنید

برچسب : نویسنده : بهاءالدین خرمشاهی بازدید : <-PostHit-> تاريخ : پنجشنبه 25 اسفند 1401 ساعت: 16:28