این ضمیمه حاوی توضیحات مختصرتری از دستورات مختلف SQL است. هدف ارائه یک مرجع و تعریف سریع و دقیق از SQL است. بخش اول این پیوست عناصر مورد استفاده برای ایجاد دستورات SQL را تعریف می کند. دوم، جزئیات نحو و جملات با شرح مختصری از خود دستورات. موارد زیر قراردادهای استاندارد (به نام شرایط BNF) هستند:
علاوه بر این، از دنباله زیر (.،..) استفاده خواهیم کرد تا نشان دهیم که یکی از موارد قبلی را می توان هر تعداد بار تکرار کرد، با رویدادهای فردی که با کاما از هم جدا شده اند. ویژگی هایی که بخشی از استاندارد رسمی نیستند در توضیحات به عنوان (*غیر استاندارد*) علامت گذاری می شوند.
لطفاً توجه داشته باشید: اصطلاحی که در اینجا استفاده می کنیم، اصطلاحات رسمی 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 >یک کاراکتر الفبایی عددی است. اگر شرایط زیر درست باشد، تطابق رخ خواهد داد:
اگر مسابقه ای رخ دهد،< 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 >. این مقایسه به صورت زیر ارزیابی می شود:
< 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 مراجعه کنید). قوانین زیر اعمال می شود:
عبارت SELECT هر سطر نامزد جدول را که در آن سطرها به طور مستقل ظاهر می شوند، ارزیابی می کند. رشته کاندید به صورت زیر تعریف می شود:
هر ردیف نامزد مقادیری را تولید می کند که گزاره را می سازد<
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