اسکیوال
از ویکیپدیا، دانشنامهٔ آزاد.
اسکیوال (SQL - Structured Query Language) مخفف نام یک زبان كامپیوتریست كه برای ایجاد، تغییر، و بازیابی دادهها و نیز عملیات بر روی آنها در مدل رابطهای میباشد. این زبان به سمت مدل شی گرا- رابطهای نیز پیشرفت كرده است. SQL استانداردهای ANSI/ISO را نیز دریافت كرده است.
فهرست مندرجات |
[ویرایش] تاریخچه SQL
منشا اصلی SQL به مقاله Edgar F. Codd تحت عنوان " مدل رابطهای داده ها برای بانكهای دادهای اشتراكی " كه در سال 1970 منتشر شد،باز میگردد. در دهه 70 گروهی از شركت IBM در شهر San Jose بر روی سیستم پایگاه داده ای (System R) بدون توجه به این مقاله كار میكردند و زبان SEQUEL(Structured English Query Language) را به منظور عملیات و بازیابی اطلاعات ذخیره شده در System R ایجاد كردند. اگر چه SQL ناشی از تلاشهای كاد بود اما Donald D. Chamberlin و Raymond F. Boyce را به عنوان طراحان زبان SEQUEL میدانند.
سمینارهایی در زمینه تکنولوژی بانک اطلاعاتی و مباحثاتی در مورد مزایای مدل رابطهای جدید برگزار گردید. تا 1976 مشخص بود که IBM طرفدار جدی تکنولوژی بانک اطلاعاتی رابطهای بوده، توجه زیادی نسبت به زبانSQL دارد. تبلیغات در زمینه System/R باعث جذب گروهی از مهندسین در Menlo Park در کالیفرنیا گردید، و این گروه به این نتیجه رسیدند که تحقیقات IBM منجر به یک بازار تجاری برای بانکهای اطلاعاتی رابطهای خواهد گردید.
در 1977 این گروه شرکتی بنام Inc وRelational Software تاسیس نمودند تا یک DBMS رابطهای بر اساس SQL بسازند. محصولی بنام Oracle در1979 عرضه گردید، و اولین DBMS رابطهای بوجود آمد. به این ترتیب محصول Oracle باعث گردید اولین محصول IBM برای مدت 2 سال در بازار دچار رکود باشد. این محصول بر روی مینی کامپیوترهای VAx Digital’s اجرا میشد که خیلی از کامپیوترهای بزرگ IBM ارزان تر بودند.
امروزه این شرکت با نام Oracle Corporation اولین فروشنده سیستمهای مدیریت بانک اطلاعاتی رابطهای است. استادان آزمایشگاههای کامپیوتر در دانشگاه برکلی کالیفرنیا نیز در نیمه دهه 1970 مشغول تحقیق در زمینه بانکهای اطلاعاتی رابطهای بودن (مانند تیم تحقیق IBM)، گروه فوق نیز یک نمونه از DBMS رابطهای ایجاد نمودند و سیستم خود را Ingres نام نهادند.
پروژه Ingres شامل یک زبان پرسش یا Query language بود بنام QUEL، اگر چه از SQL خیلی ساخت یافته تر بود، اما شباهت آن به زبان انگلیسی کمتر بود.
در حالیکه Oracle و Ingres برای ارائه محصولات تجاری در رقابت بودند، پروژه System/R شرکت IBM در تلاش بوده است که یک محصو ل تجاری با نام SQL/Data system (یاSQL/DS) عرضه نماید. IBM موجودیت SQL/DS را در 1981 اعلام، و در 1982 شروع به عرضه محصول خود نمود. در سال 1983 IBM یک نسخه SQL/DS را برای VM/CMS (سیستم عاملی که در کامپیوتر بزرگ IBM غالبا استفاده شده بود)، اعلام نمود.
همچنین در سال 1983 شرکتIBM، محصول Database2 یا DB2 را معرفی نمود که یک DBMS رابطهای بود برای سیستمهای بزرگ آن شرکت. DB2 تحت سیستم عامل IBM’s VMS(سیستم عامل مراکز کامپیوتری بزرگ) اجرا میشد. اولین نسخه DB2در 1985 عرضه گردید، و مسئولین IBM اعلام نمو دند که این محصول یک برنامه استراتژیک برای تکنولوژی نرم افزاری IBM میباش DB2 .از آن تاریخ تاکنون DBMS رابطهای شاخص بوده و IBM از آن حمایت نموده و زبان DB2’s SQL استاندارد عملی زبان بانک اطلاعاتی بوده است.
SQL استاندارد (ANSI (American National Standards Institute را در سال 1986 و ISO (International Organization for Standardization) را در سال 1987 اتخاذ نمود. استانداردهای مختلفی از SQL تاكنون عرضه شده كه در جدول زیر بیان میكنیم:
SQL-87
SQL-89
SQL-92
SQL:1999
SQL:2003
[ویرایش] حوزه و وسعت
بسیاری از اصطلاحات توسعه یافته SQL تحت استاندارد بین المللی بوده و در نتیجه از آنها شبیه بقیه زبانهای استاندارد مثل محصولات شركت اوراكل PL/SQL یا Sybase و SQL PL (مدل رویه ای) از شركت IBM میباشد.
SQL برای كارهای ویژه و محدودی (گزارش گیری از داده ها در پایگاه داده رابطه ای) طراحی شده است. بر خلاف زبانهای دستوری مثل بیسیك یا سی كه برای حل مسائل طراحی شده، SQL زبانی بر پایه اعلان است. زبانهای توسعه یافتهای مثل PL/SQL به دنبال كامل كردن زبان به هدف ایجاد زبان برنامه نویسی با حفظ مزیتهای SQL میباشد. شیوه دیگر كار این است كه به كدهای زبان برنامه نویسی اجازه دسترسی به پایگاه داده به كمك دستورات SQL داده شود مثلا PostgreSQL به توابعش اجازه میدهد كه درون كدهای Perl، Tcl و C نوشته شوند. گاهی به شوخی گفته میشود كه SQL نه ساخت یافته است،نه محدود به گزارش گیری ها و اصلا یك زبان نیست!
[ویرایش] واژههای كلیدی SQL
واژههای كلیدی SQL به گروههای مختلفی تقسیم میگردد، در زیر به برخی از آنها اشاره میكنیم آنهایی كه آشنا تر هستند را تنها با یك مثال شرح میدهیم:
- دستورات باز یابی داده(SELECT)
- دستورات عملیات داده(INSERT، UPDATE، MERGE،TRUNCAT و DELETE)
- دستورات تراكنش داده(COMMIT و ROLLBACK)
- دستورات تعریف داده(CREATE وDROP)
- دستورات كنترل داده(GRANT و REVOKE)
[ویرایش] دستورات بازیابی داده
دستور SELECT جهت بازیابی برشی سطری از یك یا چند جدول به كار میرود. این دستور پركاربردترین دستور DML میباشد و برای گزارش گیریهای موثر مورد استفاده قرار میگیرد. ساختمان این دستور میتواند از اجزای زیر تشكیل شده باشد:
- FROM : مشخص كردن جداول و نحوه اتصال آنها به هم.
- WHERE : انتخاب سطر هایی با شرایط خاص.
- GROUP BY : تركیب سطر ها با مقادیر مربوط به مجموعهای از سطرهای كوچكتر.
- HAVING : مشخص كردن سطرهای تركیبی.
- ORDER BY : مشخص كردن اینكه كدام ستونها برای مرتب كردن داده ها به كار میرود.
مثال 1) نشان دادن ركوردهای تمام كتابهای بیش 100.00 واحد قیمت. نتایج بر اساس نام كتاب مرتب میگردد. نماد ستاره(*) به معنای نشان دادن تمام ستون های(صفات) جداول(ها) میباشد:
SELECT * FROM books WHERE price > 100.00
ORDER BY title
مثال 2) این مسئله نحوه استفاده از جداول چندگانه را نشان میدهد. 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
[ویرایش] دستورات عملیات داده
این دستورات به اختصار (DML( Data Manipulation Language گفته میشود و شامل دستوراتی همچون زیر است:
INSERT : اضافه كردن سطر هایی (تاپل هایی) به جدول موجود.
UPDATE : جهت تغییر مقادیر سطرهای موجود جدول.
MERGE : تركیب كردن داده ها در جداول چندگانه این دستور جدید در SQL:2003 اضافه شده است، پیش از این پایگاه داده ها از دستور UPSERT استفاده میكردند.
TRUNCAT : تمام دادههای جدول را حذف میكند(از دستورات غیر استاندارد اما پر كاربرد SQL میباشد)
DELETE : حذف سطر هایی از جدول موجود.
مثال 3)
Example:
INSERT INTO my_table (field1, field2, field3) VALUES ('test', 'N', NULL);
UPDATE my_table SET field1 = 'updated value' WHERE field2 = 'N';
DELETE FROM my_table WHERE field2 = 'N';
[ویرایش] دستورات تراكنش داده
(START TRANSACTION (BEGIN WORK : جهت آغاز یك تراكنش پایگاه داده به كار میرود تا كنترل كند كه تراكنش یا به پایان برسد یا اصلا بی تاثیر باشد.
COMMIT : با عث میشود كه تغییرات درون ترانش به طور دائمی ثبت گردد.
ROLLBACK : باعث میشود كه تغییرات ار آخرین COMMIT یا ROLLBACK دور انداخته شود، در نتیجه وضعیت داده ها به قبل از درخواست دخییرات آنها بر میگردد.
این دو دستور در كنار هم برای كنترل و قفل گذاری به كار میرود و هنگام خروج از تراكنش این كنترل و قفل گذاری از بین میرود.
مثال 4)
START TRANSACTION;
UPDATE inventory SET quantity = quantity - 3 WHERE item = 'pants';
COMMIT;
[ویرایش] دستورات تعریف داده
دومین دسته دستورات SQL دستورات تعرف داده یا (DDL (Data Definition Language میباشد. این دستورات به كاربر اجازه تعریف جداول جدید و اجزای آنها را میدهد. بیشتر SQLهای تجاری دستوراتی با این خصوصیات را دارند. مهمترین گزینههای پایهای DDL دستورات زیر است:
CREATE : ایجاد یك شی (مثلا یك جدول).
DROP : حذف شی تعریف شدهای در پایگاه داده.
بیشتر پایگاههای داده دستور ALTER را نیز دارند كه اجازه تغییر یك شی موجود را به شیوههای مختلف میدهد ( مثلا اضافه كردن یك ستون به جدول).
مثال 5)
CREATE TABLE my_table (
my_field1 INT UNSIGNED,
my_field2 VARCHAR (50),
my_field3 DATE NOT NULL,
PRIMARY KEY (my_field1, my_field2)
)
[ویرایش] دستورات كنترل داده
سومین دسته از دستورات SQL دستورات كنترل داده یا (DCL (Data Control Languageمی باشد. این دستورات جنبههای اجازه دسترسی به داده ها را مشخص میكند و تعیین میكند كدام كاربر میتواند روی پایگاه داده عملیات انجام دهد یا كدام كاربر تنها میتواند قابلیت خواندن آنها را داشته باشد. دو دستور اصلی به قرار زیر است:
GRANT : اجازه دادن به یك یاچند كاربر برای اجرا كردن یك یا مجموعهای ازدستورات بر روی یك شی.
REVOKE : حذف یا محدود كردن قدرت اجرای كاربران.
مثال 6)
Example: SELECT * FROM inventory -- Retrieve everything from inventory table
[ویرایش] معایب SQL
در كاربرد عملی از SQL معایب زیر بر آن وارد است:
- دستورات نحوی(syntax) آن تا حدی مشكل است به نحوی كه گاهی آنرا با COBOL مقایسه میكنند.
- شیوه استانداردی را برای دستورات چند تكه بزرگ ندارد.
- نمونههای مختلف آن ها كه توسط فروشندگان مختلف ارائه میشود گاهی با هم سازگاری ندارد.
- وجود برخی دستورات بلند
- اشتباه گرفتن وظیفههای دستوراتی مثل UPDATE و INSERT .
[ویرایش] مدلهای مشابه SQL
- IBM BS12 (Business System 12)
- Tutorial D
- TQL Proposal
- HQL ( بر پایه ابزار JAVA
- OSQL(برپایه ابزارهای شی گرای PHP برای عملیات و گزارش گیری)
- Quel (در سال 1974 در دانشگاه بركلی ایجاد شد)
- ODMG (Object Data Management Group)
[ویرایش] منابع اصلی و وابسطه
1- ویكی پدیای انگلیسی
2- وبلاگ ایفجام ( http://www.ifjam.50megs.com)
3- Donald D. Chamberlin and Raymond F. Boyce, 1974. "SEQUEL: A structured English query language", International Conference on Management of Data, Proceedings of the 1974 ACM SIGFIDET (now SIGMOD) workshop on Data description, access and control, Ann Arbor, Michigan, pp. 249-264
4- Discussion on alleged SQL flaws (C2 wiki)
5- Web page about FSQL: References and links.
6- Galindo J., Urrutia A., Piattini M., "Fuzzy Databases: Modeling, Design and Implementation". Idea Group Publishing Hershey, USA, 2005