نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی

عبارات جدول پرس و جوهای ساده SQL - مرجع سریع و مثال

این ضمیمه حاوی توضیحات مختصرتری از دستورات مختلف SQL است. هدف ارائه یک مرجع و تعریف سریع و دقیق از SQL است. بخش اول این پیوست عناصر مورد استفاده برای ایجاد دستورات SQL را تعریف می کند. دوم، جزئیات نحو و جملات با شرح مختصری از خود دستورات. موارد زیر قراردادهای استاندارد (به نام شرایط BNF) هستند:

  • کلمات کلیدی با حروف بزرگ تایپ می شوند.
  • SQL و سایر شرایط خاص در براکت های زاویه ای محصور شده و به صورت مورب تایپ می شوند.< و >)
  • قسمت های اختیاری دستورات در پرانتز () قرار دارند.
  • بیضی (...) نشان می دهد که قسمت قبل از دستور ممکن است هر چند بار تکرار شود.
  • یک نوار عمودی (|) به این معنی است که آنچه قبل از آن است را می توان با چیزی که پس از آن قرار می گیرد جایگزین کرد.
  • پرانتزهای فرفری ((و)) ​​نشان می‌دهند که برای ارزیابی سایر کاراکترها (مثلاً میله‌های عمودی یا بیضی) باید با همه چیز در داخل آنها به عنوان یک کل برخورد کرد.
  • دو نقطه و مساوی (::=) به این معنی است که آنچه به دنبال آنها می آید، تعریف آن چیزی است که قبل از آنها می آید.

    علاوه بر این، از دنباله زیر (.،..) استفاده خواهیم کرد تا نشان دهیم که یکی از موارد قبلی را می توان هر تعداد بار تکرار کرد، با رویدادهای فردی که با کاما از هم جدا شده اند. ویژگی هایی که بخشی از استاندارد رسمی نیستند در توضیحات به عنوان (*غیر استاندارد*) علامت گذاری می شوند.

    لطفاً توجه داشته باشید: اصطلاحی که در اینجا استفاده می کنیم، اصطلاحات رسمی ANSI نیست. اصطلاحات رسمی می تواند بسیار گیج کننده باشد، بنابراین ما آن را کمی ساده کرده ایم.

    به همین دلیل، ما گاهی اوقات از اصطلاحاتی استفاده می کنیم که با ANSI متفاوت است، یا از همان اصطلاحات استفاده می کنیم اما به روشی کمی متفاوت. مثلاً تعریف ما این است< predicate >متفاوت از ترکیب ANSI تعریف استاندارد< predicate >با< search condition >.

    عناصر SQL

    این بخش عناصر دستورات SQL را تعریف می کند. آنها به دو دسته تقسیم می شوند: عناصر اساسی زبان، و عناصر کارکردی زبان.

    عناصر اصلیبلوک های زبانی هستند که در حال ایجاد هستند. هنگامی که SQL یک دستور را بررسی می کند، ابتدا هر کاراکتر در متن دستور را بر حسب آن عناصر ارزیابی می کند. جداکننده ها< separator >یک قسمت از تیم را از دیگری جدا کنید. همه چیز بین جداکننده ها< separator >به عنوان یک ماژول پردازش می شود. بر اساس این تقسیم، SQL دستور را تفسیر می کند.

    عناصر عملکردیچیزهای مختلفی غیر از کلمات کلیدی هستند که می توانند به عنوان ماژول تفسیر شوند. اینها قسمت هایی از دستور هستند که با جداکننده ها از هم جدا شده اند< separator >که در SQL معنای خاصی دارند. برخی از آنها مختص دستورات خاصی هستند و در ادامه این ضمیمه به همراه آن دستورات توضیح داده خواهد شد. در اینجا عناصر مشترک برای همه دستورات توصیف شده فهرست شده است. عناصر عملکردی ممکن است بر حسب یکدیگر یا حتی در شرایط خاص خود تعریف شوند. مثلاً محمول< predicate >، آخرین و پیچیده ترین مورد ما، حاوی یک محمول در تعریف خودش است. دلیلش این است که محمول< predicate >استفاده از AND یا OR می تواند شامل هر تعداد محمول باشد< predicate >که می تواند مستقل کار کند. ما به شما یک محمول ارائه کردیم< predicate >با توجه به تنوع و پیچیدگی این عنصر کاربردی زبان، در بخش جداگانه ای در این پیوست. او به طور مداوم در هنگام بحث در مورد سایر بخش های عملکردی تیم ها حضور خواهد داشت.

    عناصر اصلی زبان

    تعریف عنصر< separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space >فضا< newline >انتهای رشته کاراکتر تعریف شده توسط پیاده سازی< identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а идентификатор < identifier >نباید بیشتر از 18 کاراکتر باشد. تعریف عنصر< underscore > - < percent sign > % < delimiter >هر یک از موارد زیر: , ()< > . : = + " - | <> > = < = или < string > < string >[هر متن قابل چاپ در نقل قول واحد] توجه: در< string >، دو نقل قول متوالی ("") به عنوان یک ("") تفسیر می شود.< SQL term >بسته به زبان اصلی پایان می یابد. (*فقط تودرتو*)

    عناصر عملکردی

    جدول زیر عناصر عملکردی دستورات SQL و تعاریف آنها را نشان می دهد: ELEMENT DEFINITION< query >بند SELECT< subquery >یک عبارت SELECT در پرانتز در یک شرط دیگر که در واقع به طور جداگانه برای هر ردیف نامزد عبارت دیگر ارزیابی می شود.< value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator >هر یک از موارد زیر: + - / *< primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant >کاربر |< implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint >NOT NULL | منحصر به فرد | بررسی(< predicate >) | کلید اصلی | منابع< table name >[(< column name >)] < tabconstraint >منحصر بفرد(< column list >) | بررسی(< predicate >) | کلید اولیه (< column list >) | کلید خارجی (< column list >) منابع< table name >[(< column list >)] < defvalue >پیش فرض =< value expression > < data type >نوع داده معتبر (برای شرح انواع ارائه شده توسط ANSI به پیوست B و برای سایر انواع رایج به پیوست C مراجعه کنید.)< size >ارزش بستگی دارد< data type >(به پیوست B مراجعه کنید.)< cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(*غیر استاندارد*)< owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,..

    مقدمات

    در زیر لیستی از انواع محمول تعریف می شود< predicate >در صفحات زیر شرح داده شده است:

    < predicate > ::=

    { < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate >عبارتی است که می تواند درست، نادرست یا ناشناخته باشد، به جز< exists predicate >و< null predicate >، که فقط می تواند درست یا نادرست باشد.

    اگر مقادیر NULL از خروجی پاسخ دریافتی جلوگیری کند، ناشناخته دریافت خواهد شد. هر زمان که یک مقدار NULL با هر مقداری مقایسه شود این اتفاق می افتد. عملگرهای بولی استاندارد - AND، OR، و NOT - را می توان با یک گزاره استفاده کرد. نه درست = نادرست، نه نادرست = درست، و نه ناشناخته = ناشناخته. نتایج AND و OR در ترکیب با گزاره ها در جداول زیر نشان داده شده است:

    AND AND درست غلط ناشناخته درست درست غلط ناشناخته ناشناخته نادرست نادرست نادرست ناشناخته ناشناخته نادرست ناشناخته یا یا درست غلط ناشناخته درست درست درست درست غلط درست نادرست ناشناخته ناشناخته درست ناشناخته

    این جداول به روشی شبیه به جدول ضرب خوانده می شوند: شما مقادیر صحیح، نادرست یا ناشناخته را از سطرها با ستون های آنها ترکیب می کنید تا نتیجه را در جدول ضربدری به دست آورید. به عنوان مثال، در یک جدول AND، ستون سوم (ناشناخته) و ردیف اول (درست) در تقاطع گوشه سمت راست بالا منجر به مجهول می شود، به عبارت دیگر: درست و ناشناخته = ناشناخته. ترتیب ارزشیابی با پرانتز مشخص می شود. آنها هر بار ظاهر نمی شوند. ابتدا NOT و سپس AND و OR ارزیابی می شود. انواع محمول< predicate >به طور جداگانه در بخش بعدی مورد بحث قرار می گیرند.

    < comparison predicate >(محمول مقایسه)

    نحو

    < value expresslon > < relational op > < value expresslon > |
    < subquery >
    < relatlonal op > :: =
    =
    | <
    | >
    | <
    | >=
    | < >

    اگر هر کدام< value expression >= NULL، یا< comparison predicate >= ناشناخته به عبارت دیگر، اگر مقایسه درست باشد، درست است، یا اگر مقایسه نادرست باشد، نادرست است.
    < relational op >دارای مقادیر ریاضی استاندارد برای مقادیر عددی است. برای سایر انواع مقادیر، این مقادیر برای پیاده سازی خاص هستند.
    هر دو< value expression >باید انواع داده های قابل مقایسه داشته باشد. اگر استعلام فرعی< subquery >استفاده می شود، باید حاوی یک عبارت باشد< value expression >در عبارت SELECT که مقدار آن جایگزین عبارت دوم می شود< value expression >در محمول مقایسه ای< comparision predicate >، هر بار که< subquery >در واقع انجام می شود.

    < between predicate >

    نحو

    < value expression >بین< value expression >
    و< value expression >

    < between predicate >- A BETWEEN B AND C به همان معنی است< predicate >- (A >= B AND< = C). < between predicate >که برای آن A NOT BETWEEN B AND C همان معنای NOT (بین B و C) را دارد.< value expression >می توان با یک پرس و جو سفارشی استنباط کرد< subquery >(*غیر استاندارد*).

    < in prediicate >

    نحو

    < value expression >که در< value list > | < subquery >

    فهرست ارزش ها< value list >شامل یک یا چند مقدار شمارش شده، محصور در پرانتز و از هم جدا شده با کاما، که قابل مقایسه با< value expression >نوع داده. اگر از یک پرسش فرعی استفاده شود< subquery >، باید فقط یک عبارت داشته باشد< value expression >در بند SELECT (احتمالاً بیشتر، اما این قبلاً خارج از استاندارد ANSI است). استعلام فرعی< subquery >در واقع، برای هر ردیف کاندید پرس و جو اصلی به طور جداگانه اجرا می شود و مقادیری که نمایش می دهد لیستی از مقادیر را تشکیل می دهد.< value list >برای این خط در هر حال محمول< in predicate >درست خواهد بود اگر عبارت< value expression >در لیست مقادیر نشان داده شده است< value list >، مگر اینکه NOT مشخص شده باشد. عبارت A NOT IN (B, C) معادل عبارت NOT (A IN (B, C)) است.

    < like predicate >

    نحو

    < charvalue >پسندیدن< pattern >

    < charvalue >هر عبارت *غیر استاندارد* است< value expression >نوع الفبایی< charvalue >شاید طبق استاندارد فقط یک ستون خاص باشد< column spec >. نمونه< pattern >شامل یک رشته است که برای مطابقت با آن بررسی می شود< charvalue >. نماد پایان< escapechar >یک کاراکتر الفبایی عددی است. اگر شرایط زیر درست باشد، تطابق رخ خواهد داد:

  • برای هر خط زیر< underscore >در نمونه< pattern >که مقدم بر کاراکتر پایانی نیست< escapechar >، یک کاراکتر مربوطه وجود دارد< charvalue >.
  • برای همه< percent sign >در نمونه< pattern >، که مقدم نیست< escapechar >، صفر یا چند کاراکتر متناظر در آن وجود دارد< charvalue >.
  • برای همه< escapechar >که در< pattern >که بر دیگری مقدم نیست< escapechar >، هیچ کاراکتر مربوطه در آن وجود ندارد< charvalue >.
  • برای هر شخصیت دیگری در< pattern >، همان نماد در علامت مربوطه در تنظیم شده است< charvalue >.

    اگر مسابقه ای رخ دهد،< like predicate >- درست است اگر NOT مشخص شده باشد. عبارت NOT LIKE "text" معادل NOT (A LIKE "text") است.

    < null predicate >

    نحو

    < column spec >تهی است

    < column spec >اگر مقدار NULL در این ستون وجود داشته باشد IS NULL است. کارساز خواهد بود< null predicate >درست است اگر NULL مشخص نشده باشد. عبارت< column spec >IS NOT NULL، همان نتیجه NOT را دارد (< column spec >NULL است).

    < quantified predicate >

    نحو

    < value expression > < relational op >
    < quantifier > < subquery >
    < quantifier >::= هر گونه | همه | مقداری

    عبارت SELECT< subquery >باید حاوی یک و تنها یک عبارت مقدار باشد< value expression >. همه مقادیر توسط پرس و جوی فرعی برگردانده شده است< subquery >مجموعه نتیجه را تشکیل می دهد< result set >. < value expression >مقایسه با استفاده از حامل< relational operator >، با هر یک از اعضای مجموعه نتیجه< result set >. این مقایسه به صورت زیر ارزیابی می شود:

  • اگر یک< quantifier >= ALL و هر یک از اعضای مجموعه نتیجه< result set >این مقایسه را درست می کند،< quantified predicate >- درست است، واقعی.
  • اگر یک< quantifier >= ANY و حداقل یک عضو از مجموعه نتایج وجود دارد< result set >، که این مقایسه را درست می کند، پس< quantified predicate >درست است.
  • اگر نتیجه تنظیم شد< result set >پس خالی< quantified predicate >درست است اگر< quantifier >= ALL، و در غیر این صورت نادرست است.
  • اگر یک< quantifier >= برخی، اثر مشابه ANY است.
  • اگر یک< quantified predicate >نه وفادار و نه بی وفا، او ناشناخته است.

    < exists predicate >

    نحو:

    وجود دارد (< subquery >)

    اگر استعلام فرعی< subquery >یک یا چند خط خروجی را چاپ می کند،< exists predicate >- درست است، واقعی؛ و در غیر این صورت نادرست است.

    دستورات SQL

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

    لطفاً توجه داشته باشید دستوراتی که با کلمات شروع می شوند - EXEC SQL، و همچنین دستورات یا جملاتی که با یک کلمه ختم می شوند - فقط در SQL تودرتو قابل استفاده هستند.

    بخش اعلام را آغاز کنید

    نحو

    EXEC SQL BEGIN DECLARE SECTION< SQL term > < host-language variable declarations >EXEC SQL END DECLARE SECTION< SQL term >

    این دستور یک بخش برنامه زبان اصلی برای اعلام متغیرهای اصلی در آن ایجاد می کند تا در دستورات SQL تودرتو مورد استفاده قرار گیرد. متغیر SQLCODE باید به عنوان یکی از متغیرهای زبان میزبان اعلام شده گنجانده شود.

    بستن مکان نما

    نحو

    EXEC SQL CLOSE CURSOR< cursor name > < SQL term >;

    این دستور به مکان نما می گوید که ببندد، پس از آن هیچ مقداری از آن انتخاب نمی شود تا زمانی که دوباره باز شود.

    تعهد (کار)

    نحو

    این دستور تمام تغییرات ایجاد شده در پایگاه داده را بدون تغییر می گذارد تا زمانی که تراکنش شروع شده به پایان برسد و تراکنش جدید شروع شود.

    ایجاد شاخص

    (*غیر استاندارد*)

    نحو

    ایجاد شاخص< Index name >
    بر< table name > (< column list >);

    این دستور یک مسیر میانبر کارآمد برای یافتن ردیف های حاوی ستون های مشخص شده ایجاد می کند. اگر UNIQUE مشخص شده باشد، جدول نمی تواند حاوی مقادیر تکراری در آن ستون ها باشد.

    ایجاد مترادف (*غیر استاندارد*)
    (ایجاد مترادف) (*غیر استاندارد*)

    نحو

    مترادف IPUBLICl را ایجاد کنید< synonym >برای
    < owner >.< table name >;

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

    ایجاد جدول

    نحو

    ایجاد جدول< table name >
    ({< column name > < data type >[< size >]
    [< colconstralnt > . . .]
    [< defvalue >]} . , . . < tabconstraint > . , . .);

    دستور یک جدول در پایگاه داده ایجاد می کند. این جدول متعلق به سازنده آن خواهد بود. ستون ها به ترتیب اسمی در نظر گرفته می شوند.< data type >- نوع داده ای که ستون حاوی آن خواهد بود را تعریف می کند. استاندارد< data type >شرح داده شده در ضمیمه B؛ همه انواع داده های دیگر استفاده شده است< data type >، در ضمیمه ج بحث شده است. ارزش اندازه< size >بستگی به نوع داده دارد< data type >.
    < colconstraint >و< tabconstraint >محدودیت هایی را بر روی مقادیری که می توان در یک ستون وارد کرد، اعمال کنید.
    < defvalue >مقدار (پیش‌فرض) را تعریف می‌کند که اگر مقدار دیگری برای این ردیف مشخص نشده باشد، به طور خودکار درج می‌شود. (برای جزئیات در مورد خود دستور CREATE TABLE به فصل 17 و برای جزئیات بیشتر در مورد محدودیت ها و فصل 18 و< defvalue >).

    ایجاد نمای

    نحو

    ایجاد نمای< table name >
    مانند< query >
    ;

    نمایش مانند هر جدول در دستورات SQL رفتار می شود. وقتی دستوری به نام جدول اشاره می کند< table name >، درخواست< query >اجرا می شود و خروجی آن با محتوای جدول مشخص شده در این دستور مطابقت دارد.
    برخی از نماها را می توان تغییر داد، به این معنی که دستورات اصلاح را می توان در آن نماها اجرا کرد و به جدولی که در پرس و جو به آن ارجاع داده شد منتقل شد.< query >. اگر عبارت WITH CHECK OPTION مشخص شده باشد، این اصلاح باید شرط محمول را نیز برآورده کند.< predicate >در درخواست< query >.

    اعلام مکان نما (اعلان مکان نما)

    نحو

    EXEC SQL DECLARE< cursor name >مکان نما برای
    < query >< SQL term >

    این دستور آنها را به مکان نما متصل می کند< cursor name >، با یک درخواست< query >. هنگامی که مکان نما باز است (به باز کردن مکان نما مراجعه کنید)، پرس و جو< query >اجرا می شود و می توان نتیجه آن را (با دستور FETCH) برای خروجی انتخاب کرد. اگر مکان نما قابل تغییر است، جدول توسط پرس و جو ارجاع داده می شود< query >، می تواند محتوا را با استفاده از عملیات اصلاح روی مکان نما تغییر دهد (برای مکان نماهای قابل تغییر به فصل 25 مراجعه کنید).

    حذف

    نحو

    حذف از< table name >
    { ; }
    | جایی که در حال حاضر< cursorname >< SQL term >

    اگر بند WHERE وجود نداشته باشد، تمام ردیف های جدول حذف می شوند. اگر عبارت WHERE از گزاره استفاده کند< predicate >، ردیف هایی که شرط این محمول را برآورده می کنند< predicate >حذف می شوند. اگر عبارت WHERE دارای آرگومان CURRENT OF در نام مکان نما باشد< cursor name >، ردیف از جدول< table name >در حال حاضر با نام مکان نما ارجاع داده شده است< cursor name >حذف خواهد شد. فرم WHERE CURRENT فقط در SQL تودرتو و فقط با مکان نماهای قابل تغییر قابل استفاده است.

    EXEC SQL (EXECUTE SQL)

    نحو

    EXEC SQL< embedded SQL command > < SQL term >

    EXEC SQL برای نشان دادن شروع تمام دستورات SQL تو در تو در زبان دیگر استفاده می شود.

    رفتن و آوردن

    نحو

    واکشی EXEC SQL< cursorname >
    به< host-varlable llst >< SQL term >

    FETCH خروجی را از رشته پرس و جو فعلی می گیرد< query >، آن را در لیست متغیرهای اصلی قرار می دهد< host-variable list >و مکان نما را به خط بعدی منتقل می کند. فهرست کنید< host-variable list >ممکن است متغیر نشانگر را به عنوان متغیر هدف شامل شود (به فصل 25 مراجعه کنید.)

    اعطا کردن

    نحو (استاندارد)

    اعطای همه
    | (انتخاب کنید
    | درج کنید
    | حذف
    | به روز رسانی [(< column llst >)]
    | منابع [(< column llst >)l). ، . .
    بر< table name > . , . .
    به عموم |< Authorization ID > . , . .
    ;

    آرگومان ALL، با یا بدون PRIVILEGES، هر امتیاز را در لیست امتیازات قرار می دهد. PUBLIC شامل همه کاربران موجود و همه کسانی است که در آینده ایجاد می شوند. این دستور به شما اجازه می دهد تا حقوق را برای انجام اقدامات روی یک جدول با نام مشخص شده منتقل کنید. REFERENCES به شما اجازه می دهد تا برای استفاده از ستون ها در لیست ستون ها مجوز دهید< column list >به عنوان کلید اصلی برای کلید خارجی. سایر امتیازات شامل حق اجرای دستوراتی است که امتیازات با نام آنها در جدول مشخص شده است. UPDATE شبیه به منابع است و می تواند محدودیت هایی را برای ستون های خاصی ایجاد کند. GRANT OPTION به شما امکان می دهد این امتیازات را به سایر کاربران منتقل کنید.

    نحو (غیر استاندارد)

    GRANT DBA
    | منبع
    | اتصال ... .
    به< Authorization ID > . , . .
    | < privilege > . , . . }
    از (عمومی
    | < Authorization ID > . , . . };

    امتیاز< privelege >می تواند هر یک از موارد مشخص شده در دستور GRANT باشد. کاربری که ReEVOKE را ارائه می دهد باید از همان امتیازاتی برخوردار باشد که کاربر GRANT را ارائه می دهد. اگر یک امتیاز از نوع خاص بر روی یک شی خاص استفاده شود، بند ON می تواند استفاده شود.

    برگشت (کار)
    (بازگشت) (معاملات)

    نحو

    دستور تمام تغییرات پایگاه داده ایجاد شده در طول تراکنش جاری را لغو می کند. همچنین معامله فعلی را به پایان می رساند و یک تراکنش جدید را شروع می کند.

    انتخاب کنید

    نحو

    SELECT(IDISTINCT|ALL]< value expression > . , . . } / *
    از جانب< table reference > . , . .

    . , . . ];

    این بند پرس و جو را سازماندهی می کند و مقادیر را از پایگاه داده بازیابی می کند (به فصل 3 - فصل 14 مراجعه کنید). قوانین زیر اعمال می شود:

  • اگر نه ALL و نه DISTINCT مشخص نشده باشد، ALL فرض می شود.
  • اصطلاح< value expression >شامل< column spec >، تابع کل< aggregate funct >، عملکرد غیر استاندارد< nonstandard fu nction >، مقدار ثابت< constant >، یا هر ترکیبی از آنها با عملگرها در عبارات معتبر.
  • جدول مرجع< table reference >، شامل نام جدول، شامل پیشوند مالک در صورتی که کاربر فعلی مالک نباشد، یا مترادف (غیر استاندارد) جدول است. جدول می تواند یک جدول پایه یا یک نمای باشد. در اصل، نام مستعار می تواند نشان دهد که کدام نام مستعار برای یک جدول فقط برای مدت زمان دستور فعلی استفاده می شود. نام جدول یا مترادف آن باید با یک یا چند جداکننده از نام مستعار جدا شود< separator >.
  • اگر از GROUP BY استفاده می شود، همه ستون ها< column spec >استفاده شده در عبارت SELECT باید به عنوان یک گروه ستون استفاده شود< grouping column >اگر در یک تابع مجموع وجود نداشته باشند< aggregate funct >. کل گروه ستون ها< grouping column >باید در بین عبارات وجود داشته باشد< value expressions >در بند SELECT مشخص شده است. برای هر ترکیب متمایز از مقادیر گروه ستون< grouping column >، یک و تنها یک خط خروجی وجود خواهد داشت.
  • اگر از HAVING استفاده شود، محمول< predicate >به هر سطر تولید شده توسط عبارت GROUP BY اعمال می شود و آن سطرهایی که آن گزاره را درست می کنند، خروجی خواهند بود.
  • اگر از ORDER BY استفاده شود، خروجی دنباله خاصی دارد. شناسه هر ستون< column identifer >به مشخص شده اشاره دارد< value expression >در بند SELECT اگر این< value expression >ستون مشخص شده است< column spec >, < co lumn identifier >ممکن است همان باشد< column spec >. در غیر این صورت< co lumn identifier >می تواند یک عدد صحیح مثبت باشد که مکان را نشان می دهد< value expression >در دنباله بند SELECT. خروجی برای تناسب با مقادیر موجود در آن فرمت می شود< column identifier >به ترتیب صعودی اگر DESC مشخص نشده باشد. نام شناسه ستون< column identifier >اولین مورد در عبارت ORDER BY قبل از نام‌های بعدی در تعریف دنباله خروجی قرار می‌گیرد.

    عبارت SELECT هر سطر نامزد جدول را که در آن سطرها به طور مستقل ظاهر می شوند، ارزیابی می کند. رشته کاندید به صورت زیر تعریف می شود:

  • اگر فقط یک جدول ارجاع داده شود< table reference >گنجانده شده است، هر ردیف از این جدول به نوبه خود یک ردیف نامزد است.
  • اگر بیش از یک جدول ارجاع داده شود< table reference >شامل، هر ردیف از هر جدول باید به نوبه خود با هر ترکیبی از سطرهای همه جداول دیگر ترکیب شود. هر یک از این ترکیب ها به نوبه خود یک رشته نامزد خواهد بود.

    هر ردیف نامزد مقادیری را تولید می کند که گزاره را می سازد< predicate >در عبارت WHERE درست، نادرست یا ناشناخته است. اگر از GROUP BY استفاده نمی شود، هر کدام< value expression >به نوبه خود برای هر ردیف کاندید که مقدار آن گزاره را درست می کند اعمال می شود و نتیجه این عملیات خروجی است.
    اگر از GROUP BY استفاده شود، سطرهای نامزد با استفاده از توابع جمع ترکیب می شوند. اگر محمولی وجود ندارد< predicate >تنظیم نشده است، هر عبارت< value expression >برای هر ردیف یا گروه نامزد اعمال می شود. اگر DISTINCT مشخص شده باشد، ردیف های تکراری از خروجی حذف خواهند شد.

    اتحاد. اتصال

    نحو

    < query >(اتحاد. اتصال< query > } . . . ;

    خروجی دو یا چند پرس و جو< query >ادغام خواهد شد. هر درخواستی< query >باید شامل همان عدد باشد< value expression >در عبارت SELECT و به ترتیبی که 1..n از هر کدام با نوع داده سازگار باشد< data type >و اندازه< size >با 1..n همه دیگران.

    به روز رسانی (تغییر)

    نحو

    به روز رسانی< table name >
    تنظیم(< column name > = < value expression > } . , . .
    ([ جایی که< predlcate >]; }
    | {
    < SQL term >]}

    UPDATE مقادیر هر ستون نامگذاری شده را تغییر می دهد< column name >به مقدار مربوطه< value expression >. اگر عبارت WHERE از گزاره استفاده کند< predicate >، سپس فقط ردیف های جدولی که مقادیر فعلی آن گزاره را می سازد< predicate >صحیح، قابل تغییر است. اگر WHERE از عبارت CURRENT OF استفاده می کند، مقادیر موجود در ردیف جدول به نام< table name >در مکان نما با نام قرار دارد< cursor name >در حال تغییر. WHERE CURRENT OF فقط در SQL تودرتو و فقط با نشانگرهای قابل تغییر قابل استفاده است. اگر بند WHERE وجود نداشته باشد، تمام ردیف ها تغییر می کنند.

    هر زمان (هر زمان که)

    نحو

    EXEC SQL در هر زمان< SQLcond > < actlon > < SQL term >
    < SQLcond >::= SQLERROR | یافت نشد | SQLWARNING
    (آخری غیر استاندارد است)
    < action >::=ادامه | قابل اعتماد و متخصص< target >| قابل اعتماد و متخصص< target >
    < target >::= به زبان میزبان بستگی دارد

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

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

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

    جدول - بیایید پوشه ای را تصور کنیم که اسناد را بر اساس یک ویژگی خاص، به عنوان مثال، لیستی از سفارشات ماه گذشته، گروه بندی می کند. این جدول در کامپیوتر است.یک جدول جداگانه نام منحصر به فرد خود را دارد.

    نوع داده - نوع اطلاعاتی که مجاز است در یک ستون یا ردیف خاص ذخیره شود. این می تواند اعداد یا متن با فرمت خاصی باشد.

    ستون و ردیف- همه ما با صفحات گسترده ای کار کرده ایم که دارای ردیف و ستون هستند. هر پایگاه داده رابطه ای با جداول به همین صورت کار می کند. سطرها را گاهی رکورد می نامند.

    کلید اصلی- هر ردیف جدول می تواند یک یا چند ستون برای شناسایی منحصر به فرد داشته باشد. بدون کلید اصلی، به روز رسانی، اصلاح و حذف ردیف های مورد نظر بسیار دشوار است.

    SQL چیست؟

    SQL(انگلیسی - زبان پرس و جو ساختاریافته) فقط برای کار با پایگاه های داده توسعه یافته است و در حال حاضر استاندارد تمام DBMS های محبوب است. نحو زبان از تعداد کمی عملگر تشکیل شده است و یادگیری آن آسان است. اما، با وجود سادگی خارجی، امکان ایجاد پرس و جوهای sql برای عملیات پیچیده با پایگاه داده با هر اندازه را فراهم می کند.

    از سال 1992 یک استاندارد عمومی پذیرفته شده به نام ANSI SQL وجود دارد. این سینتکس و توابع اولیه اپراتورها را تعریف می کند و توسط تمام رهبران بازار DBMS مانند ORACLE پشتیبانی می شود. پوشش همه امکانات زبان در یک مقاله کوچک غیرممکن است، بنابراین ما به طور خلاصه فقط پرس و جوهای اولیه SQL را بررسی خواهیم کرد. مثال ها به وضوح سادگی و امکانات زبان را نشان می دهند:

    • ایجاد پایگاه داده و جداول؛
    • نمونه گیری داده ها؛
    • اضافه کردن سوابق؛
    • اصلاح و حذف اطلاعات

    انواع داده های SQL

    همه ستون ها در جدول پایگاه داده یک نوع داده را ذخیره می کنند. انواع داده ها در SQL مانند سایر زبان های برنامه نویسی است.

    ایجاد جداول و پایگاه داده

    دو راه برای ایجاد پایگاه داده ها، جداول و سایر پرس و جوهای جدید در SQL وجود دارد:

    • دستورات SQL از طریق کنسول DBMS
    • با استفاده از ابزارهای مدیریت تعاملی همراه با سرور پایگاه داده.

    یک پایگاه داده جدید توسط اپراتور ایجاد می شود ایجاد پایگاه داده<наименование базы данных>; . همانطور که می بینید، نحو ساده و مختصر است.

    ما جداول را در داخل پایگاه داده با استفاده از دستور CREATE TABLE با پارامترهای زیر ایجاد می کنیم:

    • نام جدول
    • نام ستون ها و انواع داده ها

    به عنوان مثال، بیایید یک جدول کالا با ستون های زیر ایجاد کنیم:

    ما یک جدول ایجاد می کنیم:

    کالای جدول را ایجاد کنید

    (commodity_id CHAR(15) NOT NULL،

    vendor_id CHAR(15) NOT NULL،

    commodity_name CHAR(254) NULL،

    commodity_price DECIMAL(8,2) NULL,

    commodity_desc VARCHAR(1000) NULL);

    جدول دارای پنج ستون است. پس از نام، نوع داده، ستون ها با کاما از هم جدا می شوند. مقدار یک ستون می تواند خالی باشد (NULL) یا باید پر شود (NOT NULL)، و این زمانی که جدول ایجاد می شود مشخص می شود.

    انتخاب داده ها از جدول

    عملگر انتخاب داده رایج ترین پرس و جوی SQL است. برای به دست آوردن اطلاعات باید مشخص کنید که از چنین جدولی چه چیزی را می خواهیم انتخاب کنیم. ابتدا یک مثال ساده:

    SELECT_commodity_name از کالا

    بعد از دستور SELECT نام ستون را برای بدست آوردن اطلاعات مشخص می کنیم و FROM جدول را تعریف می کند.

    نتیجه اجرای پرس و جو، تمام ردیف های جدول با مقادیر Commodity_name به ترتیبی که در پایگاه داده وارد شده اند، خواهد بود، یعنی. بدون هیچ گونه مرتب سازی یک بند اضافی ORDER BY برای سفارش نتیجه استفاده می شود.

    برای پرس و جو در چندین فیلد، آنها را با کاما از هم جدا کنید، مانند مثال زیر:

    SELECT commodity_id, commodity_name, commodity_price FROM Commodity

    می توان مقدار تمام ستون های یک ردیف را به عنوان نتیجه پرس و جو بدست آورد. برای این کار از علامت "*" استفاده می شود:

    انتخاب * از کالا

    • علاوه بر این SELECT پشتیبانی می کند:
    • مرتب سازی داده ها (ORDER BY)
    • انتخاب با توجه به شرایط (WHERE)
    • اصطلاح گروه بندی (GROUP BY)

    اضافه کردن یک خط

    برای افزودن یک ردیف به جدول، از پرس و جوهای SQL با عبارت INSERT استفاده می شود. اضافه کردن را می توان به سه روش انجام داد:

    • یک خط کامل جدید اضافه کنید.
    • بخشی از یک رشته؛
    • نتایج پرس و جو

    برای اضافه کردن یک ردیف کامل، باید نام جدول و مقادیر ستون‌ها (فیلدها) ردیف جدید را مشخص کنید. در اینجا یک مثال است:

    INSERT INTO Commodity VALUES("106"، "50"، "کوکاکولا"، "1.68"، "بدون الکل،)

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

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

    INSERT INTO Commodity (commodity_id، vendor_id، commodity_name)

    VALUES("106"، "50"، "کوکاکولا"،)

    ما فقط شناسه های محصول، تامین کننده و نام آن را وارد کردیم و بقیه قسمت ها را خالی گذاشتیم.

    افزودن نتایج پرس و جو

    INSERT در درجه اول برای افزودن ردیف استفاده می شود، اما می تواند برای افزودن نتایج یک دستور SELECT نیز استفاده شود.

    داده ها را تغییر دهید

    برای تغییر اطلاعات در فیلدهای جدول پایگاه داده، باید از عبارت UPDATE استفاده کنید. اپراتور به دو صورت قابل استفاده است:

    • تمام ردیف های جدول به روز می شوند.
    • فقط برای یک خط خاص.

    UPDATE از سه عنصر اصلی تشکیل شده است:

    • جدولی که در آن تغییرات لازم است؛
    • نام فیلدها و مقادیر جدید آنها؛
    • شرایط انتخاب سطرها برای تغییر

    یک مثال را در نظر بگیرید. فرض کنید قیمت یک محصول با ID=106 تغییر کرده است، بنابراین این ردیف باید به روز شود. عملگر زیر را می نویسیم:

    به روز رسانی مجموعه کالا commodity_price = "3.2" WHERE commodity_id = "106"

    نام جدول را مشخص کردیم، در مورد ما Commodity، جایی که به روز رسانی انجام می شود، سپس بعد از SET - مقدار جدید ستون را مشخص کردیم و با تعیین مقدار ID مورد نظر در WHERE، رکورد مورد نظر را پیدا کردیم.

    برای تغییر چندین ستون، چندین جفت ستون-مقدار را مشخص کنید که بعد از دستور SET با کاما از هم جدا شده اند. بیایید به نمونه ای نگاه کنیم که در آن نام و قیمت محصول به روز می شود:

    به روز رسانی مجموعه کالا commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

    برای حذف اطلاعات در یک ستون، اگر ساختار جدول اجازه می دهد، می توانید آن را روی NULL تنظیم کنید. باید به خاطر داشت که NULL دقیقاً مقدار "بدون" است و به صورت متن یا عدد صفر نیست. حذف توضیحات محصول:

    به روز رسانی مجموعه کالا commodity_desc = NULL WHERE commodity_id = "106"

    حذف ردیف ها

    پرس و جوهای SQL برای حذف ردیف ها در جدول با دستور DELETE اجرا می شوند. دو مورد استفاده وجود دارد:

    • ردیف های خاصی در جدول حذف می شوند.
    • تمام ردیف های جدول حذف می شوند.

    مثالی از حذف یک ردیف از جدول:

    DELETE FROM Commodity WHERE commodity_id = "106"

    بعد از DELETE FROM نام جدولی را که سطرهای آن حذف می شود را مشخص می کنیم. عبارت WHERE شامل شرایطی است که با آن سطرها برای حذف انتخاب می شوند. در مثال، خط محصول با ID=106 را حذف می کنیم. مشخص کردن WHERE بسیار مهم است. حذف این عبارت تمام ردیف های جدول را حذف می کند. این در مورد تغییر مقدار فیلدها نیز صدق می کند.

    دستور DELETE نام ستون یا متاکاراکترها را مشخص نمی کند. به طور کامل ردیف ها را حذف می کند، اما نمی تواند یک ستون را حذف کند.

    استفاده از SQL در Microsoft Access

    معمولاً به صورت تعاملی برای ایجاد جداول، پایگاه‌های داده، مدیریت، اصلاح، تجزیه و تحلیل داده‌ها در پایگاه داده و پیاده‌سازی پرس‌وجوهای SQL Access از طریق یک طراح پرس و جو تعاملی مناسب (Query Designer) استفاده می‌شود، که با استفاده از آن می‌توانید دستورات SQL با هر پیچیدگی را بسازید و بلافاصله اجرا کنید.

    حالت دسترسی به سرور نیز پشتیبانی می‌شود، که در آن Access DBMS می‌تواند به‌عنوان تولیدکننده پرسش‌های SQL به هر منبع داده ODBC استفاده شود. این قابلیت به برنامه های Access اجازه می دهد تا با هر فرمتی تعامل داشته باشند.

    برنامه های افزودنی SQL

    از آنجایی که پرس و جوهای SQL تمام ویژگی های زبان های برنامه نویسی رویه ای مانند حلقه ها، شاخه ها و غیره را ندارند، فروشندگان DBMS نسخه خود را از SQL با ویژگی های پیشرفته توسعه می دهند. اول از همه، این پشتیبانی از رویه های ذخیره شده و اپراتورهای استاندارد زبان های رویه ای است.

    رایج ترین گویش های زبان:

    • پایگاه داده اوراکل - PL/SQL
    • Interbase، Firebird - PSQL
    • Microsoft SQL Server - Transact-SQL
    • PostgreSQL - PL/pgSQL.

    SQL به وب

    MySQL DBMS تحت مجوز عمومی عمومی گنو توزیع شده است. مجوز تجاری با قابلیت توسعه ماژول های سفارشی وجود دارد. به عنوان بخشی جدایی ناپذیر، در محبوب ترین مجموعه های سرورهای اینترنتی مانند XAMPP، WAMP و LAMP گنجانده شده است و محبوب ترین DBMS برای توسعه برنامه های کاربردی در اینترنت است.

    این توسط Sun Microsystems توسعه یافته و در حال حاضر توسط Oracle Corporation نگهداری می شود. پشتیبانی از پایگاه های داده تا 64 ترابایت، استاندارد نحوی SQL:2003، تکرار پایگاه های داده و خدمات ابری.

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

    همه این توابع یک مقدار واحد را برمی‌گردانند. در عین حال، توابع COUNT، MINو حداکثردر حالی که برای هر نوع داده ای اعمال می شود جمعو AVGفقط برای فیلدهای عددی استفاده می شود. تفاوت بین عملکرد شمردن(*)و شمردن(<имя поля>) این است که دومی در هنگام محاسبه مقادیر NULL را در نظر نمی گیرد.

    مثال. حداقل و حداکثر قیمت را برای رایانه های شخصی بیابید:

    مثال. تعداد رایانه های موجود تولید شده توسط سازنده A را بیابید:

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

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

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

    اگر باید تعداد مدل های PC تولید شده توسط هر یکسازنده، شما باید استفاده کنید GROUP BY پیشنهاد، به صورت نحوی به دنبال بعد از بندهای WHERE.

    GROUP BY پیشنهاد

    GROUP BY پیشنهادبرای تعریف گروه هایی از خطوط خروجی که می توان روی آنها اعمال کرد استفاده می شود توابع انبوه (COUNT، MIN، MAX، AVG و SUM). اگر این بند وجود ندارد و از توابع جمع استفاده می شود، تمام ستون ها با نام های ذکر شده در انتخاب کنید، باید در آن گنجانده شود توابع کل، و این توابع برای کل مجموعه سطرهایی که گزاره پرس و جو را برآورده می کنند اعمال خواهند شد. در غیر این صورت، تمام ستون های لیست SELECT، شامل نمی شوددر توابع جمع، باید مشخص شود در بند GROUP BY. در نتیجه، تمام ردیف های خروجی پرس و جو به گروه هایی تقسیم می شوند که با ترکیب مقادیر یکسانی در این ستون ها مشخص می شوند. پس از آن، توابع جمعی برای هر گروه اعمال می شود. توجه داشته باشید که برای GROUP BY، تمام مقادیر NULL برابر هستند، یعنی. هنگام گروه بندی توسط یک فیلد حاوی مقادیر NULL، همه این ردیف ها در یک گروه قرار می گیرند.
    اگر یک اگر بند GROUP BY وجود داشته باشد، در بند SELECT بدون توابع جمعی، سپس پرس و جو به سادگی یک ردیف از هر گروه را برمی گرداند. این ویژگی به همراه کلمه کلیدی DISTINCT می تواند برای حذف ردیف های تکراری در یک مجموعه نتیجه استفاده شود.
    یک مثال ساده را در نظر بگیرید:
    مدل SELECT، COUNT(model) AS Qty_model، AVG(price) AS Avg_price
    از کامپیوتر
    GROUP BY مدل;

    در این کوئری برای هر مدل رایانه شخصی تعداد و میانگین هزینه آنها مشخص می شود. همه سطرها با یک مدل (شماره مدل) یک گروه را تشکیل می دهند و خروجی SELECT تعداد مقادیر و میانگین قیمت ها را برای هر گروه محاسبه می کند. نتیجه پرس و جو جدول زیر خواهد بود:
    مدل Qty_model میانگین_قیمت
    1121 3 850.0
    1232 4 425.0
    1233 3 843.33333333333337
    1260 1 350.0

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

    چندین خاص وجود دارد قوانین برای اجرای توابع جمع:

    • اگر در نتیجه درخواست هیچ ردیفی دریافت نشد(یا بیش از یک ردیف برای این گروه)، پس هیچ داده اولیه برای محاسبه هیچ یک از توابع جمع وجود ندارد. در این صورت نتیجه اجرای COUNT توابع صفر و نتیجه سایر توابع NULL خواهد بود.
    • بحث و جدلتابع کل خود نمی تواند شامل توابع جمع باشد(تابع از تابع). آن ها مثلاً در یک درخواست، دریافت حداکثر مقادیر متوسط ​​غیرممکن است.
    • نتیجه اجرای تابع COUNT می باشد عدد صحیح(INTEGER). سایر توابع انبوه، انواع داده های مقادیر پردازش شده را به ارث می برند.
    • اگر هنگام اجرای تابع SUM، نتیجه ای به دست آمد که از حداکثر مقدار نوع داده مورد استفاده فراتر رفت، اشتباه.

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

    داشتن پیشنهاد

    اگر یک بند WHEREسپس یک گزاره برای فیلتر رشته تعریف می کند بند داشتنکاربردی پس از گروه بندیبرای تعریف گروه های فیلتر گزاره مشابه با مقادیر توابع کل. این بند برای اعتبار سنجی مقادیری که با آنها به دست می آیند مورد نیاز است تابع کلنه از ردیف های جداگانه منبع رکورد تعریف شده در بند FROM، و از گروه هایی از این قبیل خطوط. بنابراین، چنین چکی را نمی توان در آن گنجاند بند WHERE.

    نحو:

    * جایی که فیلدها 1- فیلدهای انتخابی که با کاما جدا شده اند، همچنین می توانید تمام فیلدها را با * مشخص کنید. جدول- نام جدولی که داده ها را از آن بیرون می آوریم. شرایط- شرایط نمونه برداری؛ فیلدها 2- فیلد یا فیلدهایی که با کاما از هم جدا شده اند و بر اساس آنها مرتب می شود. شمردن- تعداد ردیف هایی که باید دانلود شوند.
    * پرس و جو در پرانتز برای واکشی داده اختیاری است.

    موارد استفاده ساده برای انتخاب

    1. نمونه گیری داده های عادی:

    > SELECT * FROM کاربران

    2. انتخاب داده با پیوستن به دو جدول (JOIN):

    SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id

    * در این مثال، داده ها با پیوستن به جداول انتخاب می شوند کاربرانو کاربران_حقوق. آنها بر اساس فیلدها گروه بندی می شوند. شناسه کاربر(در جدول users_rights) و شناسه(کاربران). فیلد نام از جدول اول و تمام فیلدها از جدول دوم بازیابی شده است.

    3. نمونه برداری با فاصله زمانی و/یا تاریخ

    الف) نقطه شروع و یک بازه زمانی مشخص مشخص است:

    * داده های ساعت گذشته انتخاب خواهد شد (فیلد تاریخ).

    ب) تاریخ شروع و پایان مشخص است:

    25.10.2017 و 25.11.2017 .

    ج) تاریخ شروع و پایان + زمان مشخص است:

    * داده ها را انتخاب کنید 2018/03/25 0 ساعت 15 دقیقهو 2018/04/25 15 ساعت و 33 دقیقه و 9 ثانیه.

    د) داده ها را برای یک ماه و سال خاص بیرون بکشید:

    * استخراج داده ها در جایی که در این زمینه است تاریخمقادیری برای وجود دارد آوریل 2018از سال.

    4. نمونه برداری از مقدار حداکثر، حداقل و میانگین:

    > حداکثر (منطقه)، حداقل (منطقه)، میانگین (منطقه) از کشور را انتخاب کنید

    * حداکثر- حداکثر مقدار؛ دقیقه- کمترین؛ میانگین- میانگین.

    5. استفاده از طول رشته:

    * این پرس و جو باید همه کاربرانی را که نام آنها از 5 کاراکتر تشکیل شده است را نشان دهد.

    نمونه هایی از پرس و جوهای پیچیده تر یا به ندرت استفاده می شود

    1. ادغام با گروه بندی داده های انتخاب شده در یک خط (GROUP_CONCAT):

    * از جدول کاربرانواکشی داده ها بر اساس فیلد شناسه، همه آنها در یک خط قرار می گیرند، مقادیر از هم جدا می شوند کاما.

    2. گروه بندی داده ها بر اساس دو یا چند فیلد:

    > انتخاب * از کاربران گروه بر اساس CONCAT (عنوان، "::"، تولد)

    * مجموع، در این مثال، داده ها را از جدول کاربران بارگیری می کنیم و آنها را بر اساس فیلدها گروه بندی می کنیم عنوانو تولد. قبل از گروه بندی، فیلدها را با جداکننده در یک خط ادغام می کنیم :: .

    3. ترکیب نتایج از دو جدول (UNION):

    > (انتخاب شناسه، فیو، آدرس، «کاربران» به عنوان کاربران از نوع FROM)
    اتحاد. اتصال
    (شناسه، فیو، آدرس، «مشتریان» را به عنوان مشتریان از نوع FROM انتخاب کنید)

    * در این مثال، داده ها از جداول بازیابی می شوند کاربرانو مشتریان.

    4. نمونه ای از میانگین های گروه بندی شده برای هر ساعت:

    میانگین (دما)، DATE_FORMAT (به‌روزرسانی تاریخ، «%Y-%m-%d %H») به‌عنوان ساعت_تاریخ از بایگانی GROUP BY DATE_FORMAT (به‌روزرسانی ساعت، «%Y-%m-%d %H»)

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

    درج (INSERT)

    نحو 1:

    > INSERT INTO

    () ارزش های ( )

    نحو 2:

    > INSERT INTO

    ارزش های ( )

    * جایی که جدول- نام جدولی که داده ها را در آن وارد می کنیم. زمینه های- شمارش فیلدهایی که با کاما از هم جدا شده اند.ارزش های- شمارش مقادیر جدا شده با کاما.
    * گزینه اول به شما امکان می دهد فقط فیلدهای لیست شده را درج کنید - بقیه مقادیر پیش فرض را دریافت خواهند کرد. گزینه دوم برای همه فیلدها نیاز به درج دارد.

    درج نمونه ها

    1. چندین ردیف را با یک پرس و جو وارد کنید:

    > درج در شهرها ("نام"، "کشور") VALUES ("مسکو"، "روسیه")، ("پاریس"، "فرانسه")، ("Funafuti"، "Tuvalu")؛

    * در این مثال، 3 رکورد را با یک کوئری SQL اضافه می کنیم.

    2. از جدول دیگری درج کنید (کپی ردیف ها، INSERT + SELECT):

    * تمام رکوردها را از جدول استخراج کنید شهرها، که نام آنها با "M" شروع می شود و در جدول وارد می شود شهرها - جدید.

    به روز رسانی (UPDATE)

    نحو:

    * جایی که جدول- نام جدول؛ رشته- فیلدی که مقدار آن را تغییر می دهیم. مقدار- ارزش جدید؛ شرایط- یک شرط (انجام به روز رسانی بدون آن خطرناک است - می توانید تمام داده ها را در کل جدول جایگزین کنید).

    به روز رسانی با استفاده از جایگزینی (REPLACE):

    به روز رسانی

    تنظیم = جایگزین ( , "<что меняем>", "<на что>");

    به روز رسانی شهرها SET name = REPLACE (نام، "Maskva"، "Moscow")؛

    اگر بخواهیم ایمن بازی کنیم، ابتدا می‌توان نتیجه تعویض را با SELECT بررسی کرد:

    حذف (DELETE)

    نحو:

    * جایی که جدول- نام جدول؛ شرایط- یک شرط (همانطور که در مورد به روز رسانی، استفاده از DELETE بدون شرط خطرناک است - DBMS درخواست تأیید نمی کند، بلکه به سادگی تمام داده ها را حذف می کند).

    یک جدول ایجاد کنید

    نحو:

    > ایجاد جدول

    ( , )

    > در صورت عدم وجود «حقوق_کاربر»، جدول ایجاد کنید (
    «id» int(10) بدون امضا NOT NULL،
    «user_id» int(10) بدون امضا NOT NULL،
    "حقوق" int(10) بدون امضا NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    * جایی که جدول- نام جدول (در مثال کاربران_حقوق); فیلد1، فیلد2- نام فیلدها (در مثال، 3 فیلد ایجاد شده است - شناسه، شناسه کاربر، حقوق); گزینه 1، گزینه 2- پارامترهای میدان (در مثال int(10) بدون علامت NOT NULL); گزینه های جدول- پارامترهای کلی جدول (در مثال ENGINE=InnoDB DEFAULT CHARSET=utf8).

    استفاده از Requests در PHP

    اتصال به پایگاه داده:

    mysql_connect("localhost"، "login"، "password") or die("خطای اتصال MySQL");
    mysql_select_db("db_name");
    mysql_query("SET NAMES "utf8"");

    * جایی که اتصال به پایگاه داده در سرور محلی ( میزبان محلی) اعتبار اتصال - وارد شدنو کلمه عبور(به ترتیب، ورود و رمز عبور)؛ به عنوان پایه استفاده می شود db_name; رمزگذاری استفاده شده UTF-8.

    همچنین می توانید یک اتصال دائمی ایجاد کنید:

    mysql_pconnect("localhost"، "login"، "password") یا die("خطای اتصال MySQL");

    *اما دسترسی به حداکثر مجاز میزبانی امکان پذیر است. این روش باید در سرورهای خودمان استفاده شود، جایی که خودمان می توانیم وضعیت را کنترل کنیم.

    پایان اتصال:

    * به طور خودکار در PHP انجام می شود، به جز اتصالات دائمی (mysql_pconnect).

    پرس و جو برای MySQL (Mariadb) در PHP توسط تابع mysql_query() انجام می شود و واکشی داده ها از یک query توسط mysql_fetch_array():

    $result = mysql_query("SELECT * FROM users");
    در حالی که ($mass = mysql_fetch_array($result)) (
    پژواک $ جرم . "
    ";
    }

    * در این مثال، یک پرس و جو روی جدول انجام شد کاربران. نتیجه پرس و جو در یک متغیر قرار می گیرد $نتیجه. چرخه زیر استفاده می شود در حالی که، که هر تکرار آن آرایه ای از داده ها را استخراج کرده و در یک متغیر قرار می دهد جرم دلار- در هر تکرار، ما با یک ردیف از پایگاه داده کار می کنیم.

    تابع mysql_fetch_array() استفاده شده یک آرایه انجمنی را برمی‌گرداند که کار با آن راحت است، اما جایگزین دیگری وجود دارد - mysql_fetch_row()، که یک آرایه شماره‌دار منظم را برمی‌گرداند.

    محافظ

    اگر نیاز دارید که یک کاراکتر خاص را در رشته پرس و جو اضافه کنید، به عنوان مثال، %، باید از escaping با کاراکتر بک اسلش استفاده کنید - \

    مثلا:

    * اگر چنین پرس و جوی بدون فرار اجرا شود، علامت % به هر تعداد کاراکتر بعد از 100 تعبیر می شود.

    همین. اگر برای درخواست کمک نیاز دارید، لطفاً به من ایمیل بزنید.

    SQL برای بازیابی داده ها از پایگاه داده استفاده می شود. SQL یک زبان برنامه نویسی است که شباهت زیادی به زبان انگلیسی دارد اما برای برنامه های مدیریت پایگاه داده در نظر گرفته شده است. SQL در هر پرس و جو در Access استفاده می شود.

    درک نحوه عملکرد SQL به شما کمک می کند تا پرس و جوهای دقیق تری ایجاد کنید و رفع پرس و جوهایی را که نتایج نادرست برمی گردند آسان تر می کند.

    این مقاله بخشی از سری مقالات SQL for Access است. اصول استفاده از SQL برای بازیابی داده ها را شرح می دهد و نمونه هایی از نحو SQL را ارائه می دهد.

    در این مقاله

    SQL چیست؟

    SQL یک زبان برنامه نویسی است که برای کار با مجموعه ای از حقایق و روابط بین آنها طراحی شده است. برنامه های پایگاه داده رابطه ای مانند Microsoft Office Access از SQL برای دستکاری داده ها استفاده می کنند. برخلاف بسیاری از زبان های برنامه نویسی، SQL حتی برای مبتدیان به راحتی قابل خواندن و درک است. مانند بسیاری از زبان های برنامه نویسی، SQL یک استاندارد بین المللی است که توسط کمیته های استاندارد مانند ISO و ANSI به رسمیت شناخته شده است.

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

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

    نام خانوادگی را انتخاب کنید
    از مخاطبین
    WHERE First_Name = "مریم";

    توجه داشته باشید:زبان SQL نه تنها برای انجام عملیات روی داده ها، بلکه برای ایجاد و اصلاح ساختار اشیاء پایگاه داده مانند جداول نیز استفاده می شود. بخشی از SQL که برای ایجاد و تغییر اشیاء پایگاه داده استفاده می شود DDL نامیده می شود. DDL در این مقاله پوشش داده نشده است. برای اطلاعات بیشتر، به ایجاد و اصلاح جداول یا نمایه‌ها با استفاده از پرس و جوی تعریف داده مراجعه کنید.

    عبارات را انتخاب کنید

    دستور SELECT برای توصیف مجموعه ای از داده ها در SQL استفاده می شود. این شامل توضیحات کاملی از مجموعه داده هایی است که باید از پایگاه داده بازیابی شوند، از جمله موارد زیر:

      جداول حاوی داده ها؛

      پیوند بین داده ها از منابع مختلف؛

      فیلدها یا محاسباتی که بر اساس آن داده ها انتخاب می شوند.

      شرایط انتخابی که باید توسط داده های موجود در نتیجه پرس و جو برآورده شود.

      نیاز و روش مرتب سازی

    عبارات SQL

    یک دستور SQL از چندین بخش به نام clause تشکیل شده است. هر عبارت در دستور SQL یک هدف دارد. برخی از پیشنهادات اجباری است. جدول زیر متداول ترین عبارات SQL مورد استفاده را فهرست می کند.

    بند SQL

    شرح

    اجباری

    فیلدهایی را که حاوی داده های مورد نیاز هستند تعریف می کند.

    جداول حاوی فیلدهای مشخص شده در عبارت SELECT را تعریف می کند.

    معیارهای انتخاب رشته را مشخص می کند که همه رکوردهای موجود در نتایج باید رعایت کنند.

    ترتیب مرتب سازی نتایج را مشخص می کند.

    در یک دستور SQL که حاوی توابع جمع است، فیلدهایی را مشخص می کند که هیچ مقدار خلاصه ای برای آنها در عبارت SELECT محاسبه نمی شود.

    فقط در صورت وجود چنین زمینه هایی

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

    شرایط SQL

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

    اصطلاح SQL

    بخش قابل مقایسه از گفتار

    تعریف

    مثال

    مشخص کننده

    اسم

    نامی که برای شناسایی یک شی پایگاه داده استفاده می شود، مانند نام فیلد.

    مشتریان.[PhoneNumber]

    اپراتور

    فعل یا قید

    کلمه کلیدی که یک عمل را نشان می دهد یا آن را تغییر می دهد.

    مقدار ثابت

    اسم

    مقداری که تغییر نمی کند، مانند عدد یا NULL.

    اصطلاح

    صفت

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

    >= کالاها.[قیمت]

    بندهای اصلی SQL: SELECT، FROM و WHERE

    فرمت کلی دستورات SQL به صورت زیر است:

    فیلد_1 را انتخاب کنید
    از جدول_1
    معیار WHERE_1
    ;

    یادداشت:

      Access به شکست خط در دستور SQL احترام نمی گذارد. با وجود این، توصیه می شود که هر جمله را در یک خط جدید شروع کنید تا دستور SQL هم برای شخصی که آن را نوشته و هم برای بقیه قابل خواندن باشد.

      هر دستور SELECT با یک نقطه ویرگول (;) به پایان می رسد. نقطه ویرگول می تواند در انتهای جمله آخر یا در یک خط جداگانه در انتهای دستور SQL باشد.

    مثال در Access

    مثال زیر نشان می دهد که یک عبارت SQL در Access برای یک پرس و جو انتخاب ساده چگونه می تواند باشد.

    1. بند SELECT

    2. بند FROM

    3. بند WHERE

    بیایید مثال را با جملات تقسیم کنیم تا بفهمیم نحو SQL چگونه کار می کند.

    بند SELECT

    انتخاب، شرکت

    این یک بند SELECT است. این شامل یک عبارت (SELECT) و به دنبال آن دو شناسه ("[Email Address]" و "Company") است.

    اگر شناسه دارای فاصله یا کاراکترهای خاص باشد (مثلاً «آدرس ایمیل»)، باید در پرانتز قرار گیرد.

    در بند SELECT، نیازی به تعیین جداول حاوی فیلدها نیست و نمی‌توانید شرایط انتخابی را که داده‌ها باید داشته باشند تا در نتایج لحاظ شود، تعیین کنید.

    در دستور SELECT، عبارت SELECT همیشه قبل از عبارت FROM قرار می گیرد.

    بند FROM

    از مخاطبین

    این بند FROM است. این شامل یک عبارت (FROM) و به دنبال آن یک شناسه (Contacts) است.

    عبارت FROM فیلدهایی را برای انتخاب مشخص نمی کند.

    بند WHERE

    WHERE City = سیاتل

    این بند WHERE است. این شامل یک عملگر (WHERE) به دنبال یک عبارت (City="Rostov") است.

    شما می توانید بسیاری از کارها را با بندهای SELECT، FROM و WHERE انجام دهید. برای اطلاعات بیشتر در مورد نحوه استفاده از این پیشنهادات، به مقالات زیر مراجعه کنید:

    مرتب سازی نتایج: ORDER BY

    مانند مایکروسافت اکسل، اکسس به شما اجازه می دهد تا نتایج یک پرس و جو را در یک جدول مرتب کنید. با استفاده از عبارت ORDER BY، می‌توانید نحوه مرتب‌سازی نتایج را هنگام اجرای پرس و جو نیز مشخص کنید. اگر از عبارت ORDER BY استفاده می شود، باید در انتهای دستور SQL باشد.

    عبارت ORDER BY حاوی لیستی از فیلدها برای مرتب سازی است، به همان ترتیبی که مرتب سازی اعمال خواهد شد.

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

    سفارش توسط DESC شرکت،

    توجه داشته باشید:به طور پیش فرض، Access مقادیر را به ترتیب صعودی (A تا Z، کوچکترین به بزرگ) مرتب می کند. برای مرتب کردن مقادیر به ترتیب نزولی، باید کلمه کلیدی DESC را مشخص کنید.

    برای اطلاعات بیشتر در مورد ORDER BY clause، ORDER BY clause را ببینید.

    کار با داده های خلاصه: GROUP BY و HAVING clauses

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

    توانایی استفاده از یک تابع تجمعی خاص به نوع داده در فیلد و عبارت مورد نظر بستگی دارد. برای اطلاعات بیشتر در مورد توابع انبوه موجود، به مقاله SQL Aggregate Functions مراجعه کنید.

    تعیین فیلدهایی که در یک تابع جمع استفاده نمی شوند: عبارت GROUP BY

    هنگام استفاده از توابع جمع، معمولاً باید یک بند GROUP BY ایجاد کنید. عبارت GROUP BY تمام فیلدهایی را که تابع تجمیع در آنها اعمال نمی شود مشخص می کند. اگر توابع انبوه برای همه فیلدهای یک پرس و جو اعمال می شود، نیازی به ایجاد بند GROUP BY ندارید.

    اگر بند WHERE وجود نداشته باشد، بند GROUP BY باید بلافاصله از بند WHERE یا FROM پیروی کند. در بند GROUP BY، فیلدها به همان ترتیبی که در عبارت SELECT مشخص شده است.

    بیایید مثال قبلی را ادامه دهیم. اگر عبارت SELECT فقط تابع مجموع را در فیلد [آدرس ایمیل] اعمال کند، بند GROUP BY به شکل زیر خواهد بود:

    گروه بر اساس شرکت

    برای اطلاعات بیشتر در مورد بند GROUP BY، به بند GROUP BY مراجعه کنید.

    محدود کردن مقادیر جمع شده با شرایط گروه بندی: عبارت HAVING

    اگر می‌خواهید شرایطی را برای محدود کردن نتایج مشخص کنید، اما فیلدی که می‌خواهید آن‌ها را اعمال کنید در یک تابع جمع استفاده می‌شود، نمی‌توانید از عبارت WHERE استفاده کنید. به جای آن باید از عبارت HAVING استفاده شود. عبارت HAVING مانند عبارت WHERE کار می کند اما برای داده های انبوه استفاده می شود.

    برای مثال، فرض کنید که تابع AVG (که مقدار میانگین را محاسبه می‌کند) به اولین فیلد در عبارت SELECT اعمال می‌شود:

    SELECT COUNT()، شرکت

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

    داشتن COUNT()>1

    توجه داشته باشید:یک پرس و جو می تواند شامل یک بند WHERE و یک عبارت HAVING باشد، با معیارهای فیلدهایی که در توابع انبوه مشخص شده در عبارت WHERE استفاده نمی شوند، و شرایط برای فیلدهایی که در توابع انبوه استفاده می شوند در عبارت HAVING مشخص شده اند. .

    برای اطلاعات بیشتر در مورد بند HAVING، به بند HAVING مراجعه کنید.

    ترکیب نتایج پرس و جو: اپراتور UNION

    عملگر UNION برای مشاهده همزمان تمام داده های بازگردانده شده توسط چندین پرس و جو انتخابی مشابه به عنوان یک مجموعه ترکیبی استفاده می شود.

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

    توجه داشته باشید:در کوئری های اتحادیه، انواع داده های عددی و متنی با هم سازگار هستند.

    با استفاده از عملگر UNION، می توانید تعیین کنید که آیا ردیف های تکراری، در صورت وجود، در نتایج پرس و جو گنجانده شوند یا خیر. برای این کار از کلمه کلیدی ALL استفاده کنید.

    یک پرس و جو برای پیوستن به دو عبارت SELECT دارای نحو اصلی زیر است:

    فیلد_1 را انتخاب کنید
    از جدول_1
    اتحاد. اتصال
    فیلد_a را انتخاب کنید
    از جدول_a
    ;

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

    نام، قیمت، گارانتی_موجود، پیشنهاد_انحصاری را انتخاب کنید
    از محصولات
    اتحاد همه
    نام، قیمت، تضمین_موجود، پیشنهاد_انحصاری را انتخاب کنید
    از خدمات
    ;

    برای اطلاعات بیشتر در مورد ترکیب دستورات SELECT با استفاده از عملگر UNION، به مقاله مراجعه کنید

    برترین مقالات مرتبط