پرش به محتوا

اس‌کیوال

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از SQL)
اس‌کیوال (زبان برنامه‌نویسی)
پارادایم برنامه‌نویسیاعلانی
خانوادهزبان برنامه‌نویسی
طراحی شده توسطدونالد چامبرلین
ریموند بویس
توسعه‌دهندهسازمان بین‌المللی استانداردسازی/کمیسیون الکتروتکنیکی بین‌المللی
ظهوریافته در۱۹۷۴؛ ۵۰ سال پیش (۱۹۷۴-خطا: زمان نامعتبر}})
انتشار پایدار
SQL:2016 / دسامبر ۲۰۱۶؛ ۸ سال پیش (۲۰۱۶}})
ایستا، نیرومند
سیستم‌عاملچندسکویی
وبگاه
پیاده‌سازی‌های بزرگ
Many
گویش
متأثر از
دیتالاگ
تأثیر گذاشته بر
CQL، لینک (زبان برنامه‌نویسی)، SOQL، ویندوز پاورشل، JPQL, jOOQ، مم‌بیس

Structured Query Language در ویکی‌کتاب (انگلیسی)
اس‌کیوال (فرمت فایل)
پسوند(های) نام پرونده
.sql
نوع رسانهٔ اینترنتی
application/sql
توسعه‌دهندهسازمان بین‌المللی استانداردسازی/کمیسیون الکتروتکنیکی بین‌المللی
ارائهٔ اولیه۱۹۸۶ (۱۹۸۶)
گونهپایگاه داده
استاندارد بین‌المللیISO/IEC 9075
آزاد؟بله (اما غیر رایگان)
وبگاه

در مدل رابطه‌ای داده‌ها، زبان پرسمان[۱] ساخت‌یافته (به انگلیسی: Structured Query Language) با کوته‌نوشت SQL نوعی زبان خاص دامنه در برنامه‌نویسی است که برای مدیریت داده‌های نگهداری‌شده در سیستم مدیریت پایگاه‌داده رابطه‌ای (RDBMS) یا برای پردازش‌های جریانی در سیستم مدیریت جریان داده رابطه‌ای (RDSMS) طراحی شده‌است.

SQL می‌تواند به دو صورت «اس کیو ال» گوش دهیدi‎/ˌɛsˌk[invalid input: 'ju:']ˈɛl/‎ و نیز «سی‌کوال» "‎/ˈskwəl/‎ "sequel تلفظ گردد. این زبان مخصوصاً برای رسیدگی به داده ساخت‌یافته مفید می‌باشد (یعنی داده‌ای که رابطه بین موجودیت‌ها و متغیرها را در خود گنجانده‌است).

SQL دو مزیت اصلی نسبت به رابط‌های کاربردی خواندن-نوشتن قدیمی تر مثل ISAM یا VSAM دارد: اولا، SQL مفهوم دسترسی به چندین رکورد با یک دستور منفرد را معرفی کرده‌است، و دوما SQL نیاز به تعیین آنکه «چگونه» باید به یک رکورد رسید را حذف نموده‌است (مثلاً با یا بدون یک اندیس).

زبان SQL از ابتدا مبتنی بر جبر رابطه‌ای و حساب رابطه‌ای چندتایی‌ها بوده[۲] و چندین نوع عبارت در آن وجود دارد که می‌تواند به صورت غیررسمی به صورت زیرزبان‌ها کلاس‌بندی گردد: زبان پرسمان داده (DQL), زبان تعریف داده (DDL) یک زبان کنترل داده (DCL) و یک زبان دستکاری داده (DML).[۳]

قلمرو SQL شامل پرسمان داده، دستکاری داده (ورود، به روزرسانی، و حذف)، تعریف داده (تولید طرح‌واره و دستکاری آن) و کنترل دسترسی به داده می‌شود. اگرچه SQL در اساس نوعی زبان اعلانی است (4GL)، این زبان عناصر رویه‌ای نیز دارد.

تاریخچه

[ویرایش]

منشأ اصلی سی‌کوال به مقالهٔ سال ۱۹۷۰ ادگار کاد تحت عنوان «مدل رابطه‌ای داده‌ها برای بانک‌های بزرگ داده‌های اشتراکی»[۴] بازمی‌گردد. در دههٔ ۷۰ گروهی از شرکت آی‌بی‌ام در شهر سان خوزه بر روی سیستم پایگاه داده‌های سیستم آر بدون توجه به این مقاله کار می‌کردند و زبان 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[۵] یا 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[۶] (برپایه Postgres PL/pgSQL)
Invantive PSQL[۷] Invantive Procedural SQL (به کاربستهٔ SQL/PSM و پی‌ال/اس‌کیوال)
ماریادی‌بی SQL/PSM, پی‌ال/اس‌کیوال SQL/Persistent Stored Module (implements SQL/PSM), Procedural Language/SQL (based on ایدا)[۸]
مایکروسافت / 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

مثال ۱) نشان دادن رکوردهای تمام کتاب‌های بیش ۱۰۰٫۰۰ واحد قیمت. نتایج بر اساس نام کتاب مرتب می‌گردد. نماد ستاره(*) به معنای نشان دادن تمام ستون‌های (صفات)[۱۰] جدول می‌باشد:

 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

جستارهای وابسته

[ویرایش]

پانوشته‌ها

[ویرایش]
  1. «پُرسمان» [رایانه و فناوری اطلاعات] هم‌ارزِ «query»؛ منبع: گروه واژه‌گزینی. جواد میرشکاری، ویراستار. دفتر سوم. فرهنگ واژه‌های مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۶۴-۷۵۳۱-۵۰-۸ (ذیل سرواژهٔ پُرسمان)
  2. 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.
  3. Chatham, Mark (2012). Structured Query Language By Example - Volume I: Data Query Language. p. 8. ISBN 978-1-291-19951-2.
  4. A Relational Model of Data for Large Shared Data Banks
  5. PL: Procedural Language
  6. "IBM PureData System for Analytics, Version 7.0.3". Archived from the original on 10 December 2019. Retrieved 6 August 2019.
  7. "Invantive Procedural SQL".
  8. "CREATE PROCEDURE". MariaDB KnowledgeBase. Retrieved 2019-04-23.
  9. «SQL چیست؟ معرفی کامل اس کیو ال و آشنایی با کاربردهای آن». https://tosinso.com/. دریافت‌شده در ۲۰۲۳-۰۳-۱۱. پیوند خارجی در |وبگاه= وجود دارد (کمک)
  10. Attributes

منابع

[ویرایش]

۱- ویکی‌پدیای انگلیسی ۲- وبلاگ ایفجام (http://www.ifjam.50megs.com)%7B%7Bسخ}}[پیوند مرده] 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, ۲۰۰۵

پیوند به بیرون

[ویرایش]