اسکیوال (SQL - Structured Query Language) مخفف نام یک زبان کامپیوتری است که برای ایجاد، تغییر، و بازیابی دادهها و نیز عملیات بر روی آنها در مدل رابطهای میباشد. این زبان به سمت مدل شی گرا- رابطهای نیز پیشرفت کردهاست. SQL استانداردهای ANSI/ISO را نیز دریافت کردهاست.
منشا اصلی SQL به مقاله Edgar F. Codd تحت عنوان « مدل رابطهای دادهها برای بانکهای دادهای اشتراکی » که در سال ۱۹۷۰ منتشر شد،باز میگردد. در دهه ۷۰ گروهی از شرکت IBM در شهر San Jose بر روی سیستم پایگاه داده ای (System R) بدون توجه به این مقاله کار میکردند و زبان SEQUEL(Structured English Query Language) را به منظور عملیات و بازیابی اطلاعات ذخیره شده در System R ایجاد کردند. اگر چه SQL ناشی از تلاشهای کاد بود اما Donald D. Chamberlin و Raymond F. Boyce را به عنوان طراحان زبان SEQUEL میدانند.
سمینارهایی در زمینه فناوری بانک اطلاعاتی و مباحثاتی در مورد مزایای مدل رابطهای جدید برگزار گردید. تا ۱۹۷۶ مشخص بود که IBM طرفدار جدی فناوری بانک اطلاعاتی رابطهای بوده، توجه زیادی نسبت به زبان SQL دارد. تبلیغات در زمینه System/R باعث جذب گروهی از مهندسین در Menlo Park در کالیفرنیا گردید، و این گروه به این نتیجه رسیدند که تحقیقات IBM منجر به یک بازار تجاری برای بانکهای اطلاعاتی رابطهای خواهد گردید.
در ۱۹۷۷ این گروه شرکتی بنام Inc و Relational Software تأسیس نمودند تا یک DBMS رابطهای بر اساس SQL بسازند. محصولی بنام Oracle در ۱۹۷۹ عرضه گردید، و اولین DBMS رابطهای بوجود آمد. به این ترتیب محصول Oracle باعث گردید اولین محصول IBM برای مدت ۲ سال در بازار دچار رکود باشد. این محصول بر روی مینی کامپیوترهای VAx Digital’s اجرا میشد که خیلی از کامپیوترهای بزرگ IBM ارزان تر بودند.
در حالیکه Oracle و Ingres برای ارائه محصولات تجاری در رقابت بودند، پروژه System/R شرکت IBM در تلاش بودهاست که یک محصول تجاری با نام SQL/Data system (یاSQL/DS ) عرضه نماید. IBM موجودیت SQL/DS را در ۱۹۸۱ اعلام، و در ۱۹۸۲ شروع به عرضه محصول خود نمود. در سال ۱۹۸۳ IBM یک نسخه SQL/DS را برای VM/CMS (سیستم عاملی که در کامپیوتر بزرگ IBM غالبا استفاده شده بود)، اعلام نمود.
همچنین در سال ۱۹۸۳ شرکت IBM، محصول Database۲ یا DB۲ را معرفی نمود که یک DBMS رابطهای بود برای سیستمهای بزرگ آن شرکت. DB۲ تحت سیستم عامل IBM’s VMS(سیستم عامل مراکز کامپیوتری بزرگ) اجرا میشد. اولین نسخه DB۲ در ۱۹۸۵ عرضه گردید، و مسئولین IBM اعلام نمودند که این محصول یک برنامه استراتژیک برای تکنولوژی نرم افزاری IBM میباشد. DB۲ از آن تاریخ تاکنون DBMS رابطهای شاخص بوده و IBM از آن حمایت نموده و زبان DB۲ SQL استاندارد عملی زبان بانک اطلاعاتی بودهاست.
SQL استاندارد ANSI ((American National Standards Institute را در سال ۱۹۸۶ و ISO (International Organization for Standardization) را در سال ۱۹۸۷ اتخاذ نمود. استانداردهای مختلفی از SQL تاکنون عرضه شده که در زیر بیان میکنیم :
SQL۸۷
SQL۸۹
SQL۹۲
SQL۱۹۹۹
SQL۲۰۰۳
بسیاری از اصطلاحات توسعه یافته SQL تحت استاندارد بین المللی بوده و در نتیجه از آنها شبیه بقیه زبانهای استاندارد مثل محصولات شرکت اوراکل PL/SQL یا Sybase و SQL PL (مدل رویهای) از شرکت IBM میباشد.
SQL برای کارهای ویژه و محدودی (گزارش گیری از دادهها در پایگاه داده رابطهای) طراحی شدهاست. بر خلاف زبانهای دستوری مثل بیسیک یا سی که برای حل مسائل طراحی شده، SQL زبانی بر پایه اعلان است. زبانهای توسعه یافتهای مثل PL/SQL به دنبال کامل کردن زبان به هدف ایجاد زبان برنامه نویسی با حفظ مزیتهای SQL میباشد. شیوه دیگر کار این است که به کدهای زبان برنامه نویسی اجازه دسترسی به پایگاه داده به کمک دستورات SQL داده شود مثلاً PostgreSQL به توابعش اجازه میدهد که درون کدهای Perl، Tcl و C نوشته شوند. گاهی به شوخی گفته میشود که SQL نه ساخت یافتهاست،نه محدود به گزارش گیریها و اصلاً یک زبان نیست!
واژههای کلیدی SQL به گروههای مختلفی تقسیم میگردد، در زیر به برخی از آنها اشاره میکنیم آنهایی که آشنا تر هستند را تنها با یک مثال شرح میدهیم:
دستور SELECT جهت بازیابی برشی سطری از یک یا چند جدول به کار میرود. این دستور پرکاربردترین دستور DML میباشد و برای گزارش گیریهای موثر مورد استفاده قرار میگیرد. ساختمان این دستور میتواند از اجزای زیر تشکیل شده باشد:
مثال ۱) نشان دادن رکوردهای تمام کتابهای بیش ۱۰۰٫۰۰ واحد قیمت. نتایج بر اساس نام کتاب مرتب میگردد. نماد ستاره(*) به معنای نشان دادن تمام ستون های(صفات) جداول(ها) میباشد:
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
این دستورات به اختصار (DML( Data Manipulation Language گفته میشود و شامل دستوراتی همچون زیر است:
INSERT : اضافه کردن سطرهایی (تاپلهایی) به جدول موجود.
UPDATE : جهت تغییر مقادیر سطرهای موجود جدول.
MERGE : ترکیب کردن دادهها در جداول چندگانه این دستور جدید در SQL ۲۰۰۳ اضافه شدهاست، پیش از این پایگاه دادهها از دستور UPSERT استفاده میکردند.
TRUNCAT : تمام دادههای جدول را حذف میکند(از دستورات غیر استاندارد اما پر کاربرد SQL میباشد)
DELETE : حذف سطرهایی از جدول موجود.
مثال ۳)
Example:
INSERT INTO my_table (field۱,
field۲,
field۳)
VALUES ('test', 'N', NULL);
UPDATE my_table SET field۱
= 'updated value' WHERE field۲
= 'N';
DELETE FROM my_table WHERE field۲
= 'N';
(START TRANSACTION (BEGIN WORK : جهت آغاز یک تراکنش پایگاه داده به کار میرود تا کنترل کند که تراکنش یا به پایان برسد یا اصلاً بی تأثیر باشد.
COMMIT : باعث میشود که تغییرات درون ترانش به طور دائمی ثبت گردد.
ROLLBACK : باعث میشود که تغییرات ار آخرین COMMIT یا ROLLBACK دور انداخته شود، در نتیجه وضعیت دادهها به قبل از درخواست دخییرات آنها بر میگردد.
این دو دستور در کنار هم برای کنترل و قفل گذاری به کار میرود و هنگام خروج از تراکنش این کنترل و قفل گذاری از بین میرود.
مثال ۴)
START TRANSACTION;
UPDATE inventory SET quantity = quantity -
۳
WHERE item = 'pants';
COMMIT;
دومین دسته دستورات SQL دستورات تعرف داده یا (DDL (Data Definition Language میباشد. این دستورات به کاربر اجازه تعریف جداول جدید و اجزای آنها را میدهد. بیشتر SQLهای تجاری دستوراتی با این خصوصیات را دارند. مهمترین گزینههای پایهای DDL دستورات زیر است:
CREATE : ایجاد یک شی (مثلاً یک جدول).
DROP : حذف شی تعریف شدهای در پایگاه داده.
بیشتر پایگاههای داده دستور ALTER را نیز دارند که اجازه تغییر یک شی موجود را به شیوههای مختلف میدهد ( مثلاً اضافه کردن یک ستون به جدول).
مثال ۵)
CREATE TABLE my_table
(
my_field۱
INT UNSIGNED,
my_field۲
VARCHAR (۵۰),
my_field۳
DATE NOT NULL,
PRIMARY KEY (my_field۱,
my_field۲)
)
سومین دسته از دستورات SQL دستورات کنترل داده یا (DCL (Data Control Languageمی باشد. این دستورات جنبههای اجازه دسترسی به دادهها را مشخص میکند و تعیین میکند کدام کاربر میتواند روی پایگاه داده عملیات انجام دهد یا کدام کاربر تنها میتواند قابلیت خواندن آنها را داشته باشد. دو دستور اصلی به قرار زیر است:
GRANT :
اجازه دادن به یک یا چند کاربر برای اجرا کردن یک یا مجموعهای ازدستورات بر روی یک
شی.
REVOKE
: حذف یا محدود کردن قدرت اجرای کاربران.
مثال ۶)
Example: SELECT * FROM inventory -- Retrieve everything from inventory table
در کاربرد عملی از SQL معایب زیر بر آن وارد است:
ولی SQL دارای محاسنی هم هست: