اسکیوال
در مدل رابطهای دادهها، زبان پرسمان[1] ساختیافته (به انگلیسی: Structured Query Language) با کوتهنوشت SQL نوعی زبان خاص دامنه در برنامهنویسی است که برای مدیریت دادههای نگهداریشده در سیستم مدیریت پایگاهداده رابطهای (RDBMS) یا برای پردازشهای جریانی در سیستم مدیریت جریان داده رابطهای (RDSMS) طراحی شدهاست.
الگو برنامهنویسی | اعلانی |
---|---|
خانواده | زبان برنامهنویسی |
طراحی شده توسط | دونالد چامبرلین ریموند بویس |
توسعهدهنده | سازمان بینالمللی استانداردسازی/کمیسیون الکتروتکنیکی بینالمللی |
ظهوریافته در | ۱۹۷۴ |
انتشار پایدار | SQL:2016
دسامبر ۲۰۱۶ |
ایستا، نیرومند | |
سیستمعامل | چندسکویی |
وبگاه | |
پیادهسازیهای بزرگ | |
Many | |
گویش | |
| |
متأثر از | |
دیتالاگ | |
تأثیر گذاشته بر | |
CQL، لینک (زبان برنامهنویسی)، SOQL، ویندوز پاورشل، JPQL, jOOQ، ممبیس | |
پسوند(های) نام پرونده | .sql |
---|---|
نوع رسانهٔ اینترنتی | application/sql |
توسعهدهنده | سازمان بینالمللی استانداردسازی/کمیسیون الکتروتکنیکی بینالمللی |
ارائهٔ اولیه | ۱۹۸۶ |
گونه | پایگاه داده |
استاندارد بینالمللی | ISO/IEC 9075 |
قالب آزاد؟ | بله (اما غیر رایگان) |
وبگاه |
SQL میتواند به دو صورت «اس کیو ال» i/ˌɛsˌkjuːˈɛl/ و نیز «سیکوال» "/ˈsiːkwəl/ "sequel تلفظ گردد.
این زبان مخصوصاً برای رسیدگی به داده ساختیافته مفید میباشد (یعنی دادهای که رابطه بین موجودیتها و متغیرها را در خود گنجاندهاست).
SQL دو مزیت اصلی نسبت به رابطهای کاربردی خواندن-نوشتن قدیمی تر مثل ISAM یا VSAM دارد: اولا، SQL مفهوم دسترسی به چندین رکورد با یک دستور منفرد را معرفی کردهاست، و دوما SQL نیاز به تعیین آنکه «چگونه» باید به یک رکورد رسید را حذف نمودهاست (مثلاً با یا بدون یک اندیس).
زبان SQL از ابتدا مبتنی بر جبر رابطهای و حساب رابطهای چندتاییها بوده[2] و چندین نوع عبارت در آن وجود دارد که میتواند به صورت غیررسمی به صورت زیرزبانها کلاسبندی گردد: زبان پرسمان داده (DQL), زبان تعریف داده (DDL) یک زبان کنترل داده (DCL) و یک زبان دستکاری داده (DML).[3]
قلمرو SQL شامل پرسمان داده، دستکاری داده (ورود، به روزرسانی، و حذف)، تعریف داده (تولید طرحواره و دستکاری آن) و کنترل دسترسی به داده میشود. اگرچه SQL در اساس نوعی زبان اعلانی است (4GL)، این زبان عناصر رویهای نیز دارد.
تاریخچه
منشأ اصلی سیکوال به مقالهٔ سال ۱۹۷۰ ادگار کاد تحت عنوان «مدل رابطهای دادهها برای بانکهای بزرگ دادههای اشتراکی»[4] بازمیگردد. در دههٔ ۷۰ گروهی از شرکت آیبیام در شهر سان خوزه بر روی سیستم پایگاه دادههای سیستم آر بدون توجه به این مقاله کار میکردند و زبان SEQUEL را به منظور عملیات و بازیابی اطلاعات ذخیره شده در سیستم آر ایجاد کردند. اگر چه اسکیوال ناشی از تلاشهای کاد بود اما دونالد چامبرلین و ریموند بویس به عنوان طراحان زبان SEQUEL شناخته میشوند.
سمینارهایی در زمینه فناوری بانک اطلاعاتی و مباحثاتی در مورد مزایای مدل رابطهای جدید برگزار گردید. تا ۱۹۷۶ مشخص بود که آیبیام که طرفدار جدی فناوری بانک اطلاعاتی رابطهای بوده، توجه زیادی نسبت به زبان سیکوال دارد. تبلیغات در زمینه سیستم آر باعث جذب گروهی از مهندسین در منلو پارک در کالیفرنیا گردید. این گروه به این نتیجه رسیدند که تحقیقات آیبیام منجر به یک بازار تجاری برای بانکهای اطلاعاتی رابطهای خواهد گردید.
در ۱۹۷۷ این گروه شرکتی به نام اینک (Inc) و رلیشنال سافتویر (Relational Software) تأسیس نمودند تا یک سامانه مدیریت پایگاههای داده رابطهای بر اساس سیکوال بسازند. محصولی به نام اوراکل در ۱۹۷۹ عرضه گردید، و اولین سامانه مدیریت پایگاه داده رابطهای به وجود آمد. به این ترتیب محصول اوراکل باعث گردید اولین محصول آیبیام برای مدت ۲ سال در بازار دچار رکود باشد. این محصول بر روی مینی کامپیوترهای وکس دیجیتال (VAx Digital) اجرا میشد که خیلی از کامپیوترهای بزرگ آیبیام ارزانتر بودند.
امروزه این شرکت با نام اوراکل اولین فروشنده سیستمهای مدیریت بانک اطلاعاتی رابطهای است. استادان آزمایشگاههای کامپیوتر در دانشگاه برکلی کالیفرنیا نیز در نیمه دهه ۱۹۷۰ مشغول تحقیق در زمینه بانکهای اطلاعاتی رابطهای بودن (مانند تیم تحقیق آیبیام)، گروه فوق نیز یک نمونه از سامانه مدیریت پایگاه داده رابطهای ایجاد نمودند و سیستم خود را اینگرس (Ingres) نام نهادند.
پروژه اینگرس شامل یک زبان پرسوجو به نام QUEL بود، اگر چه از سیکوال خیلی ساخت یافته تر بود، اما شباهت آن به زبان انگلیسی کمتر بود.
در حالیکه اوراکل و اینگرسبرای ارائه محصولات تجاری در رقابت بودند، پروژه سیستم آر شرکت آیبیام در تلاش بودهاست که یک محصو ل تجاری با نام SQL/Data system (یا SQL/DS) عرضه نماید. آیبیام موجودیت SQL/DS را در ۱۹۸۱ اعلام، و در ۱۹۸۲ شروع به عرضه محصول خود نمود. در سال ۱۹۸۳ آیبیام یک نسخه SQL/DS را برای VM/CMS (سیستمعاملی که در کامپیوتر بزرگ آیبیام غالباً استفاده شده بود)، اعلام نمود.
همچنین در سال ۱۹۸۳ شرکت آیبیام، محصول دیبیتو را معرفی نمود که یک سامانه مدیریت پایگاه داده رابطهای برای سیستمهای بزرگ آن شرکت بود. دیبیتو تحت سیستمعامل ویاماس (سیستمعامل مراکز کامپیوتری بزرگ) اجرا میشد. اولین نسخه دیبیتو در ۱۹۸۵ عرضه گردید، و مسئولین آیبیام اعلام نمودند که این محصول یک برنامه استراتژیک برای تکنولوژی نرمافزاری آیبیام میباشد. از آن تاریخ تاکنون دیبیتو سامانه مدیریت پایگاه داده رابطهای شاخصی بوده و آیبیام از آن حمایت نموده و زبان «سیکوال دیبیتو» استاندارد عملی زبان بانک اطلاعاتی بودهاست.
استانداردها
سیکوال استاندارد (ANSI (American National Standards Institute را در سال ۱۹۸۶ و ISO (International Organization for Standardization) را در سال ۱۹۸۷ اتخاذ نمود. استانداردهای مختلفی از اسکیوال تاکنون عرضه شده که در جدول زیر بیان میکنیم:
- اسکیوال-۸۷
- اسکیوال-۸۹
- اسکیوال-۹۲
- اسکیوال:۱۹۹۹
- اسکیوال:۲۰۰۳
- اسکیوال:۲۰۰۵
- اسکیوال:۲۰۰۸
- اسکیوال:۲۰۱۱
حوزه و وسعت
بسیاری از اصطلاحات زبان اسکیوال تحت استاندارد بینالمللی بوده، و در نتیجه، از آنها شبیه بقیه زبانهای استاندارد مثل محصولات شرکت اوراکل PL/SQL[5] یا Sybase و SQL PL (مدل رویهای) از شرکت آیبیام میباشد.
منبع | نام عمومی | نام کامل |
---|---|---|
استاندار ANSI/ISO | SQL/PSM | SQL/Persistent Stored Modules |
Interbase / فایربرد | اسکیوال | Procedural SQL |
دیبی۲ | SQL PL | SQL Procedural Language (به کاربستهٔ SQL/PSM) |
IBM Informix | SPL | Stored Procedural Language |
IBM Netezza | NZPLSQL[6] | (برپایه Postgres PL/pgSQL) |
Invantive | PSQL[7] | Invantive Procedural SQL (به کاربستهٔ SQL/PSM و پیال/اسکیوال) |
ماریادیبی | SQL/PSM, پیال/اسکیوال | SQL/Persistent Stored Module (implements SQL/PSM), Procedural Language/SQL (based on ایدا)[8] |
مایکروسافت / Sybase | تی اس کیو ال | Transact-SQL |
Mimer SQL | SQL/PSM | SQL/Persistent Stored Module (به کاربستهٔ SQL/PSM) |
مایاسکیوال | SQL/PSM | SQL/Persistent Stored Module (به کاربستهٔ SQL/PSM) |
MonetDB | SQL/PSM | SQL/Persistent Stored Module (به کاربستهٔ SQL/PSM) |
NuoDB | SSP | Starkey Stored Procedures |
پایگاه داده اوراکل | پیال/اسکیوال | Procedural Language/SQL (برپایه ایدا (زبان برنامهنویسی)) |
پستگرسکیوال | PL/pgSQL | Procedural Language/PostgreSQL Structured Query Language (به کاربستهٔ SQL/PSM) |
اس آ پ | آباپ | Advanced Business Application Programming |
SAP HANA | SQLScript | SQLScript |
Sybase | Watcom-SQL | SQL Anywhere Watcom-SQL Dialect |
Teradata | SPL | Stored Procedural Language |
اسکیوال برای کارهای ویژه و محدودی (گزارشگیری از دادهها در پایگاه دادههای رابطهای) طراحی شدهاست. بر خلاف زبانهای دستوری مثل بیسیک یا سی که برای حل مسائل طراحی شده، 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
مثال ۱) نشان دادن رکوردهای تمام کتابهای بیش ۱۰۰٫۰۰ واحد قیمت. نتایج بر اساس نام کتاب مرتب میگردد. نماد ستاره(*) به معنای نشان دادن تمام ستونهای (صفات)[9] جدول میباشد:
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 - 3 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 BS12 (Business System ۱۲)
- Tutorial D
- TQL Proposal
- HQL (بر پایه ابزار JAVA
- OSQL(برپایه ابزارهای شی گرای PHP برای عملیات و گزارشگیری)
- Quel (در سال ۱۹۷۴ در دانشگاه برکلی ایجاد شد)
- ODMG (Object Data Management Group)
- linQ
جستارهای وابسته
پانوشتهها
- «پُرسمان» [رایانه و فناوری اطلاعات] همارزِ «query»؛ منبع: گروه واژهگزینی. جواد میرشکاری، ویراستار. دفتر سوم. فرهنگ واژههای مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۶۴-۷۵۳۱-۵۰-۸ (ذیل سرواژهٔ پُرسمان)
- SQL-92, 4.22 SQL-statements, 4.22.1 Classes of SQL-statements "There are at least five ways of classifying SQL-statements:", 4.22.2, SQL statements classified by function "The following are the main classes of SQL-statements:"; SQL:2003 4.11 SQL-statements, and later revisions.
- Chatham, Mark (2012). Structured Query Language By Example - Volume I: Data Query Language. p. 8. ISBN 978-1-291-19951-2.
- A Relational Model of Data for Large Shared Data Banks
- PL: Procedural Language
- "IBM PureData System for Analytics, Version 7.0.3". Archived from the original on 10 December 2019. Retrieved 6 August 2019.
- "Invantive Procedural SQL".
- "CREATE PROCEDURE". MariaDB KnowledgeBase. Retrieved 2019-04-23.
- Attributes
منابع
- مشارکتکنندگان ویکیپدیا. «SQL». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۷ مهٔ ۲۰۲۰.
- سامانههای مدیریّت پایگاه دادهها
- سایت تخصصی پایگاه داده SQLIran
- انجمنهای تخصصی پایگاه داده SQLIran
- آموزش زبان T-SQL
۱- ویکیپدیای انگلیسی
۲- وبلاگ ایفجام (http://www.ifjam.50megs.com)%7B%7Bسخ}}%5Bپیوند+مرده%5D
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. ۲۴۹–۲۶۴
۴- 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, ۲۰۰۵