اسکیوال
در مدل رابطهای دادهها، زبان ساختارمند پرسشها یا اسکیوال یا سیکوال (Structured Query Language - SQL) زبانی است سطح بالا مبتنی بر زبان سطح پایین و ریاضی جبر رابطهای که برای ایجاد، تغییر، و بازیابی دادهها و نیز عملیات بر روی آنها بهکار میرود.
زبان SQL به سمت مدل شیگرا - رابطهای نیز پیشرفت کردهاست.
محتویات |
[ویرایش] تاریخچه
منشا اصلی سیکوال به مقالهٔ سال ۱۹۷۰ ادگار کاد تحت عنوان «مدل رابطهای دادهها برای بانکهای بزرگ دادههای اشتراکی»[۱] باز میگردد. در دههٔ ۷۰ گروهی از شرکت آیبیام در شهر سان خوزه بر روی سیستم پایگاه دادههای سیستم آر بدون توجه به این مقاله کار میکردند و زبان SEQUEL [۲] را به منظور عملیات و بازیابی اطلاعات ذخیره شده در سیستم آر ایجاد کردند. اگر چه اسکیوال ناشی از تلاشهای کاد بود اما Donald D. Chamberlin و Raymond F. Boyce را به عنوان طراحان زبان SEQUEL میدانند.
سمینارهایی در زمینه فناوری بانک اطلاعاتی و مباحثاتی در مورد مزایای مدل رابطهای جدید برگزار گردید. تا ۱۹۷۶ مشخص بود که IBM طرفدار جدی فناوری بانک اطلاعاتی رابطهای بوده، توجه زیادی نسبت به زبان سیکوال دارد. تبلیغات در زمینه سیستم آر باعث جذب گروهی از مهندسین در Menlo Park در کالیفرنیا گردید. این گروه به این نتیجه رسیدند که تحقیقات آیبیام منجر به یک بازار تجاری برای بانکهای اطلاعاتی رابطهای خواهد گردید.
در ۱۹۷۷ این گروه شرکتی بنام Inc وRelational Software تأسیس نمودند تا یک دیبیاماس[۳] رابطهای بر اساس سیکوال بسازند. محصولی بنام اوراکل در ۱۹۷۹ عرضه گردید، و اولین دیبیاماس رابطهای بوجود آمد. به این ترتیب محصول اوراکل باعث گردید اولین محصول آیبیام برای مدت ۲ سال در بازار دچار رکود باشد. این محصول بر روی مینی کامپیوترهای VAx Digital’s اجرا میشد که خیلی از کامپیوترهای بزرگ آیبیام ارزان تر بودند.
امروزه این شرکت با نام Oracle Corporation اولین فروشنده سیستمهای مدیریت بانک اطلاعاتی رابطهای است. استادان آزمایشگاههای کامپیوتر در دانشگاه برکلی کالیفرنیا نیز در نیمه دهه ۱۹۷۰ مشغول تحقیق در زمینه بانکهای اطلاعاتی رابطهای بودن (مانند تیم تحقیق آیبیام)، گروه فوق نیز یک نمونه از دیبیاماس رابطهای ایجاد نمودند و سیستم خود را Ingres نام نهادند.
پروژه Ingres شامل یک زبان پرسش[۴] بنام QUEL بود، اگر چه از سیکوال خیلی ساخت یافته تر بود، اما شباهت آن به زبان انگلیسی کمتر بود.
در حالیکه اوراکل و Ingres برای ارائه محصولات تجاری در رقابت بودند، پروژه سیستم آر شرکت آیبیام در تلاش بودهاست که یک محصو ل تجاری با نام SQL/Data system (یاSQL/DS) عرضه نماید. آیبیام موجودیت SQL/DS را در ۱۹۸۱ اعلام، و در ۱۹۸۲ شروع به عرضه محصول خود نمود. در سال ۱۹۸۳ آیبیام یک نسخه SQL/DS را برای VM/CMS (سیستمعاملی که در کامپیوتر بزرگ آیبیام غالبا استفاده شده بود)، اعلام نمود.
همچنین در سال ۱۹۸۳ شرکت آیبیام، محصول دیبیتو[۵] را معرفی نمود که یک دیبیاماس رابطهای بود برای سیستمهای بزرگ آن شرکت. دیبیتو تحت سیستمعامل IBM’s VMS(سیستمعامل مراکز کامپیوتری بزرگ) اجرا میشد. اولین نسخه دیبیتو در ۱۹۸۵ عرضه گردید، و مسئولین آیبیام اعلام نمو دند که این محصول یک برنامه استراتژیک برای تکنولوژی نرمافزاری آیبیام میباش دیبیتو .از آن تاریخ تاکنون دیبیاماس رابطهای شاخص بوده و آیبیام از آن حمایت نموده و زبان «سیکوال دیبیتو»[۶] استاندارد عملی زبان بانک اطلاعاتی بودهاست.
[ویرایش] استانداردها
سیکوال استاندارد (ANSI (American National Standards Institute را در سال ۱۹۸۶ و ISO (International Organization for Standardization) را در سال ۱۹۸۷ اتخاذ نمود. استانداردهای مختلفی از اسکیوال تاکنون عرضه شده که در جدول زیر بیان میکنیم:
- SQL-۸۷
- SQL-۸۹
- SQL-۹۲
- SQL:۱۹۹۹
- SQL:۲۰۰۳
- SQL \ ۲۰۰۵
- SQL \ ۲۰۰۸
[ویرایش] حوزه و وسعت
بسیاری از اصطلاحات زبان اسکیوال تحت استاندارد بینالمللی بوده، و در نتیجه، از آنها شبیه بقیه زبانهای استاندارد مثل محصولات شرکت اوراکل PL/SQL [۷] یا Sybase و SQL PL (مدل رویهای) از شرکت آیبیام میباشد.
اسکیوال برای کارهای ویژه و محدودی (گزارش گیری از دادهها در پایگاه دادههای رابطهای) طراحی شدهاست. بر خلاف زبانهای دستوری مثل بیسیک یا سی که برای حل مسائل طراحی شده، SQL زبانی بر پایه اعلان است. زبانهای توسعه یافتهای مثل PL/SQL به دنبال کامل کردن زبان به هدف ایجاد زبان برنامه نویسی با حفظ مزیتهای SQL میباشد. شیوه دیگر کار این است که به کدهای زبان برنامه نویسی اجازه دسترسی به پایگاه داده به کمک دستورات SQL داده شود مثلاً PostgreSQL به توابعش اجازه میدهد که درون کدهای Perl، Tcl و C نوشته شوند. گاهی به شوخی گفته میشود که SQL نه ساخت یافتهاست، نه محدود به گزارش گیریها و اصلاً یک زبان نیست!
[ویرایش] واژههای کلیدی
واژههای کلیدی اسکیوال به گروههای مختلفی تقسیم میگردد، در زیر به برخی از آنها اشاره میکنیم آنهایی که آشنا تر هستند را تنها با یک مثال شرح میدهیم:
- دستور بازیابی دادهها: SELECT
- دستورات عملیات دادهها: INSERT ،UPDATE ،MERGE ،TRUNCAT ، DELETE
- دستورات تراکنش دادهها: COMMIT و ROLLBACK
- دستورات تعریف دادهها: CREATE وDROP
- دستورات کنترل دادهها: GRANT و REVOKE
[ویرایش] دستور بازیابی دادهها
دستور SELECT جهت بازیابی برشی سطری از یک یا چند جدول به کار میرود. این دستور پرکاربردترین دستور DML میباشد و برای گزارش گیریهای موثر مورد استفاده قرار میگیرد. ساختمان این دستور میتواند از اجزای زیر تشکیل شده باشد:
- FROM: مشخص کردن جداول و نحوه اتصال آنها به هم.
- WHERE: انتخاب سطرهایی با شرایط خاص.
- GROUP BY: ترکیب سطرها با مقادیر مربوط به مجموعهای از سطرهای کوچکتر.
- HAVING: مشخص کردن سطرهای ترکیبی.
- ORDER BY: مشخص کردن اینکه کدام ستونها برای مرتب کردن دادهها به کار میرود.
- JOIN یا INNER JOIN: برای اتصال دو یا چند جدول استفاده میشود و اگر بین جدولها حداقل یک مورد مشترک مشاهده شود ردیفهای دارای اشتراک را بازیابی می کند.
- LEFT JOIN: تمام ردیفهای جدول سمت چپ را بازیابی میکند و از جدول سمت راست فقط ردیف هایی که مورد مشابه دارند بازیابی می شوند.
- RIGHT JOIN: تمام ردیفهای جدول سمت راست را بازیابی میکند و از جدول سمت چپ فقط ردیف هایی که مورد مشابه دارند بازیابی می شوند.
- FULL JOIN: اگر مورد مشابهی یافت شود تمام ردیفهای جدول سمت راست و جدول سمت چپ بازیابی می شوند.gh fg
مثال ۱) نشان دادن رکوردهای تمام کتابهای بیش ۱۰۰٫۰۰ واحد قیمت. نتایج بر اساس نام کتاب مرتب میگردد. نماد ستاره(*) به معنای نشان دادن تمام ستونهای ( صفات)[۸] جدول میباشد:
SELECT * FROM books WHERE price = ۱۰۰٫۰۰ ORDER BY title
مثال ۲) این مسئله نحوه استفاده از جداول چندگانه را نشان میدهد. bk و ba نام مستعار جداول میباشد. در این مثال تعداد مولفان مختلف هر کتاب را نشان داده میشود:
SELECT bk.title, COUNT(*) AS Authors FROM books AS bk, book_authors AS ba WHERE bk.book_number = ba.book_number GROUP BY bk.title
مثال ۳) نشان دادن اتصال دو جدول books و customers که فقط ردیفهای دارای اشتراک بازیابی شوند و به ترتیب نام فامیل مشتری ها: ( pid شماره مخصوص هر مشتری است)
SELECT * FROM books JOIN customers ON books.pid = customers.pid ORDER BY customers.lastName
[ویرایش] دستورات عملیات روی دادهها
این دستورات به اختصار (DML ( Data Manipulation Language گفته میشود و شامل دستوراتی همچون زیر است:
INSERT: اضافه کردن سطرهایی (تاپلهایی) به جدول موجود.
INSERT INTO My_table (field1, field2, field3) VALUES ('test', 'N', NULL);
UPDATE: جهت تغییر مقادیر سطرهای موجود جدول.
UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N';
MERGE: ترکیب کردن دادهها در جداول چندگانه. این دستور جدید در SQL:۲۰۰۳ اضافه شدهاست، پیش از این پایگاه دادهها از دستور UPSERT استفاده میکردند.
TRUNCAT: تمام دادههای جدول را حذف میکند (از دستورات غیر استاندارد اما پر کاربرد SQL میباشد)
DELETE: حذف سطرهایی از جدول موجود.
DELETE FROM My_table WHERE field2 = 'N';
[ویرایش] دستورات تراکنش دادهها
(START TRANSACTION (BEGIN WORK: جهت آغاز یک تراکنش پایگاه داده به کار میرود تا کنترل کند که تراکنش یا به پایان برسد یا اصلاً بی تأثیر باشد.
COMMIT : با عث میشود که تغییرات درون تراكنش به طور دائمی ثبت گردد.
ROLLBACK : باعث میشود که تغییرات از آخرین COMMIT یا ROLLBACK دور انداخته شود، در نتیجه وضعیت دادهها به قبل از درخواست تغییرات آنها بر میگردد.
این دو دستور در کنار هم برای کنترل و قفل گذاری به کار میرود و هنگام خروج از تراکنش این کنترل و قفل گذاری از بین میرود.
مثال ۴)
START TRANSACTION;
UPDATE inventory SET quantity = quantity - ۳ WHERE item = 'pants';
COMMIT;
[ویرایش] دستورات تعریف دادهها
دومین دسته دستورات سیکوال دستورات تعریف دادهها یا (DDL (Data Definition Language میباشد. این دستورات به کاربر اجازه تعریف جداول جدید و اجزای آنها را میدهد. بیشتر SQLهای تجاری دستوراتی با این خصوصیات را دارند. مهمترین گزینههای پایهای DDL دستورات زیر است:
CREATE: ایجاد یک شی (مثلاً یک جدول).
DROP: حذف شی تعریف شدهای در پایگاه داده.
بیشتر پایگاههای دادهها دستور ALTER را نیز دارند که اجازه تغییر یک شی موجود را به شیوههای مختلف میدهد ( مثلاً اضافه کردن یک ستون به جدول).
مثال ۵:
CREATE TABLE My_table ( my_field1 INT, my_field2 VARCHAR (50), my_field3 DATE NOT NULL, PRIMARY KEY (my_field1, my_field2) );
[ویرایش] دستورات کنترل داده
سومین دسته از دستورات SQL دستورات کنترل داده یا (DCL (Data Control Language میباشد. این دستورات جنبههای اجازه دسترسی به دادهها را مشخص میکند و تعیین میکند کدام کاربر میتواند روی پایگاه داده عملیات انجام دهد یا کدام کاربر تنها میتواند قابلیت خواندن آنها را داشته باشد. دو دستور اصلی به قرار زیر است:
GRANT: اجازه دادن به یک یاچند کاربر برای اجرا کردن یک یا مجموعهای ازدستورات بر روی یک شی.
REVOKE: حذف یا محدود کردن قدرت اجرای کاربران.
مثال ۶:
SELECT * FROM inventory;
همهٔ اقلام موجود در جدول inventory بازیابی شود.
[ویرایش] معایب اس کیوال
در کاربرد عملی از SQL معایب زیر بر آن وارد است:
- دستورات نحوی(syntax) آن تا حدی مشکل است به نحوی که گاهی آنرا با COBOL مقایسه میکنند.
- شیوه استانداردی را برای دستورات چند تکه بزرگ ندارد.
- نمونههای مختلف آنها که توسط فروشندگان مختلف ارائه میشود گاهی با هم سازگاری ندارد.
- وجود برخی دستورات بلند
- اشتباه گرفتن وظیفههای دستوراتی مثل UPDATE و INSERT .
[ویرایش] محاسن اسکیوال
ولی سیکوال دارای محاسنی هم هست:
- سازگاری با اکثر زبانهای دستوری
- سازگاری با اکثر پایگاههای داده مثل SQL Server,Oracle و حتی MS ACCESS
- پس از اینکه برنامه نویس این زبان را درک کرد استفاده از آن بسیار سادهاست
- کاربرد در زبانهای جدید و پیشرفته
[ویرایش] زبانهای مشابه اسکیوال
- IBM BS۱۲ (Business System ۱۲)
- Tutorial D
- TQL Proposal
- HQL ( بر پایه ابزار JAVA
- OSQL(برپایه ابزارهای شی گرای PHP برای عملیات و گزارش گیری)
- Quel (در سال ۱۹۷۴ در دانشگاه برکلی ایجاد شد)
- ODMG (Object Data Management Group)
- linQ
[ویرایش] پانوشتهها
[ویرایش] جستارهای وابسته
[ویرایش] منابع
- سامانههای مدیریّت پایگاه دادهها
- سایت تخصصی پایگاه داده SQLIran
- انجمنهای تخصصی پایگاه داده SQLIran
- آموزش زبان T-SQL
۱- ویکیپدیای انگلیسی ۲- وبلاگ ایفجام ( http://www.ifjam.50megs.com)
۳- Donald D. Chamberlin and Raymond F. Boyce, ۱۹۷۴. «SEQUEL: A structured English query language», International Conference on Management of Data, Proceedings of the ۱۹۷۴ ACM SIGFIDET (now SIGMOD) workshop on Data description, access and control, Ann Arbor, Michigan, pp. ۲۴۹-۲۶۴
۴- Discussion on alleged SQL flaws (C۲ wiki)
۵- Web page about FSQL: References and links.
۶- Galindo J., Urrutia A., Piattini M., «Fuzzy Databases: Modeling, Design and Implementation». Idea Group Publishing Hershey, USA, ۲۰۰۵
[ویرایش] پیوندهای بیرونی
- «وبگاه رسمی سیکوال سرور» (انگلیسی).
- «وبگاه رسمی مایاسکیوال (یا مایسیکوال)» (انگلیسی).
- «ادگار اف. كاد» (انگلیسی).