اسکيوال (SQL - Structured Query Language) مخفف نام يک زبان کامپيوتريست که براي ايجاد، تغيير، و بازيابي دادهها و نيز عمليات بر روي آنها در مدل رابطهاي ميباشد.
اين زبان به سمت مدل شي گرا- رابطهاي نيز پيشرفت کرده واستانداردهاي ANSI/ISO را نيز دريافت کردهاست.
تاريخچه SQL
منشا اصلي SQL به مقاله F.Codd Edgar تحت عنوان « مدل رابطهاي دادهها براي بانکهاي دادهاي اشتراکي » که در سال 1970 منتشر شد، باز ميگردد. در دهه 70 گروهي از شرکت IBM در شهر San Jose بر روي سيستم پايگاه داده اي (System R) بدون توجه به اين مقاله کار ميکردند و زبان SEQUEL(Structured English Query Language) را به منظور عمليات و بازيابي اطلاعات ذخيره شده در System R ايجاد کردند. اگر چه SQL ناشي از تلاشهاي کاد بود اما Donald D. Chamberlin و Raymond F. Boyce را به عنوان طراحان زبان SEQUEL ميدانند.
در 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، محصول Database 2 يا DB 2 را معرفي نمود که يک DBMS رابطهاي بود براي سيستمهاي بزرگ آن شرکت DB2تحت سيستم عامل) IBM’s VMS سيستم عامل مراکز کامپيوتري بزرگ) اجرا ميشد. اولين نسخه2 DBدر 1985 عرضه گرديد، و مسئولين IBM اعلام نمو دند که اين محصول يک برنامه استراتژيک براي تکنولوژي نرم افزاري IBM ميباش DB2 .از آن تاريخ تاکنون DBMS رابطهاي شاخص بوده و IBM از آن حمايت نموده و زبان DB2’s SQL استاندارد عملي زبان بانک اطلاعاتي بودهاست.
SQL استاندارد( ANSI (American National Standards Institute را در سال 1986 و (ISO (International Organization for Standardizationرا در سال 1987 اتخاذ نمود.
حوزه و وسعت
بسياري از اصطلاحات توسعه يافته 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)
دستورات تعريف داده(DROP,CREATE)
دستورات کنترل داده(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 دستورات تعرف داده يا Data Definition Language (DDL) ميباشد. اين دستورات به کاربر اجازه تعريف جداول جديد و اجزاي آنها را ميدهد. بيشتر 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:
دستورات نحوي(syntax) آن تا حدي مشکل است به نحوي که گاهي آنرا با COBOL مقايسه ميکنند. شيوه استانداردي را براي دستورات چند تکه بزرگ ندارد. نمونههاي مختلف آنها که توسط فروشندگان مختلف ارائه ميشود گاهي با هم سازگاري ندارد. وجود برخي دستورات بلند اشتباه گرفتن وظيفههاي دستوراتي مثل UPDATE و INSERT
مزاياي SQL:
سازگاري با اکثر زبانهاي دستوري سازگاري با اکثر پايگاههاي داده مثل SQL Server,Oracle و حتي MS ACCESS پس از اينکه برنامه نويس اين زبان را درک کرد استفاده از آن بسيار سادهاست کاربرد در زبانهاي جديد و پيشرفته
معرفي سايت مرتبط با اين مقاله