اسکیوال (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 ارزان تر بودند.
واژههای کلیدی SQL به گروههای مختلفی تقسیم میگردد، در زیر به برخی از آنها اشاره میکنیم آنهایی که آشنا تر هستند را تنها با یک مثال شرح میدهیم:
· دستورات بازیابی داده (SELECT)
· دستورات عملیات داده (INSERT، UPDATE، MERGE،TRUNCAT و DELETE)
· دستورات تراکنش داده(COMMIT و ROLLBACK)
· دستورات تعریف داده(CREATE وDROP)
· دستورات کنترل داده(GRANT و REVOKE)
دستور SELECT جهت بازیابی برشی سطری از یک یا چند جدول به کار میرود. این دستور پرکاربردترین دستور DML میباشد و برای گزارش گیریهای موثر مورد استفاده قرار میگیرد. ساختمان این دستور میتواند از اجزای زیر تشکیل شده باشد:
· FROM : مشخص کردن جداول و نحوه اتصال آنها به هم.
· WHERE : انتخاب سطرهایی با شرایط خاص.
· GROUP BY : ترکیب سطرها با مقادیر مربوط به مجموعهای از سطرهای کوچکتر.
· HAVING : مشخص کردن سطرهای ترکیبی.
· ORDER BY : مشخص کردن اینکه کدام ستونها برای مرتب کردن دادهها به کار می رود.
مثال ۱) نشان دادن رکوردهای تمام کتابهای بیش ۱۰۰٫۰۰ واحد قیمت. نتایج بر اساس نام کتاب مرتب میگردد. نماد ستاره(*) به معنای نشان دادن تمام ستون های(صفات) جداول(ها) میباشد:
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 معایب زیر بر آن وارد است:
· دستورات نحوی (syntax) آن تا حدی مشکل است به نحوی که گاهی آنرا با COBOL مقایسه میکنند.
· شیوه استانداردی را برای دستورات چند تکه بزرگ ندارد.
· نمونههای مختلف آنها که توسط فروشندگان مختلف ارائه میشود گاهی با هم سازگاری ندارد.
· وجود برخی دستورات بلند
· اشتباه گرفتن وظیفههای دستوراتی مثل UPDATE و INSERT .
ولی SQL دارای محاسنی هم هست:
· سازگاری با اکثر زبانهای دستوری
· سازگاری با اکثر پایگاههای داده مثل SQL Server,Oracle و حتی MS ACCESS
· پس از اینکه برنامه نویس این زبان را درک کرد استفاده از آن بسیار سادهاست
· کاربرد در زبانهای جدید و پیشرفته