زبان SQL چیست؟

SQL (زبان پرس‌وجوی ساختاریافته) که مخفف Structure Query Language است یک زبان استاندارد و قدرتمند برای مدیریت و کار با پایگاه‌های داده رابطه‌ای است. از SQL برای انجام عملیات‌هایی مانند ذخیره‌سازی، بازیابی، به‌روزرسانی و حذف داده‌ها از پایگاه‌های داده استفاده می‌شود. این زبان به کاربران اجازه می‌دهد تا با داده‌ها به صورت ساختاریافته و سازمان‌یافته کار کنند.

کاربردهای اصلی SQL:

  1. ایجاد و مدیریت پایگاه‌های داده و جدول‌ها.
  2. درج، به‌روزرسانی و حذف داده‌ها.
  3. بازیابی داده‌ها با استفاده از پرس‌وجوها.
  4. تعریف ساختار پایگاه‌های داده و ایجاد روابط بین جدول‌ها.
  5. مدیریت دسترسی کاربران و امنیت داده‌ها.

ویژگی‌های کلیدی SQL:

  1. ساده و قابل فهم: دستورات SQL به زبان انگلیسی نزدیک هستند و یادگیری آن‌ها آسان است.
  2. قدرتمند: امکان انجام عملیات‌های پیچیده روی داده‌ها را فراهم می‌کند.
  3. استاندارد: SQL یک زبان استاندارد است و توسط اکثر سیستم‌های مدیریت پایگاه‌های داده (مانند MySQL, PostgreSQL, Oracle, SQL Server و …) پشتیبانی می‌شود.
  4. انعطاف‌پذیر: می‌تواند با برنامه‌نویسی و سایر زبان‌ها (مانند Python, Java, PHP و …) ادغام شود.

دستورات اصلی SQL:

  1. SELECT: برای بازیابی داده‌ها از یک جدول استفاده می‌شود.
   SELECT name, age FROM users;
  1. INSERT INTO: برای افزودن داده‌های جدید به یک جدول.
   INSERT INTO users (name, age) VALUES ('Ali', 25);
  1. UPDATE: برای به‌روزرسانی داده‌های موجود در یک جدول.
   UPDATE users SET age = 26 WHERE name = 'Ali';
  1. DELETE: برای حذف داده‌ها از یک جدول.
   DELETE FROM users WHERE name = 'Ali';
  1. CREATE TABLE: برای ایجاد یک جدول جدید.
   CREATE TABLE users (
       id INT PRIMARY KEY,
       name VARCHAR(50),
       age INT
   );
  1. ALTER TABLE: برای تغییر ساختار یک جدول (مثلاً اضافه کردن ستون جدید).
   ALTER TABLE users ADD email VARCHAR(100);
  1. DROP TABLE: برای حذف یک جدول از پایگاه داده.
   DROP TABLE users;
  1. JOIN: برای ترکیب داده‌ها از دو یا چند جدول بر اساس یک رابطه.
   SELECT users.name, orders.product 
   FROM users 
   INNER JOIN orders ON users.id = orders.user_id;
  1. WHERE: برای فیلتر کردن داده‌ها بر اساس یک شرط.
   SELECT * FROM users WHERE age > 20;
  1. GROUP BY: برای گروه‌بندی داده‌ها بر اساس یک ستون. SELECT age, COUNT(*) FROM users GROUP BY age;
  2. ORDER BY: برای مرتب‌سازی نتایج بر اساس یک ستون. SELECT * FROM users ORDER BY age DESC;
  3. HAVING: برای فیلتر کردن گروه‌ها پس از استفاده از GROUP BY.
    sql SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 1;

مثال‌های کاربردی:

  1. بازیابی تمام داده‌ها از یک جدول:
   SELECT * FROM employees;
  1. درج یک رکورد جدید:
   INSERT INTO employees (name, salary) VALUES ('Reza', 5000);
  1. به‌روزرسانی حقوق یک کارمند:
   UPDATE employees SET salary = 6000 WHERE name = 'Reza';
  1. حذف یک کارمند:
   DELETE FROM employees WHERE name = 'Reza';
  1. ایجاد یک جدول جدید:
   CREATE TABLE products (
       id INT PRIMARY KEY,
       name VARCHAR(100),
       price DECIMAL(10, 2)
   );
  1. اضافه کردن یک ستون جدید به جدول:
   ALTER TABLE products ADD description TEXT;
  1. حذف یک جدول:
   DROP TABLE products;
  1. استفاده از JOIN برای ترکیب دو جدول:
   SELECT employees.name, departments.name 
   FROM employees 
   INNER JOIN departments ON employees.department_id = departments.id;

مزایای استفاده از SQL:

  • سازمان‌دهی داده‌ها: داده‌ها به صورت ساختاریافته و مرتب ذخیره می‌شوند.
  • دسترسی سریع: امکان بازیابی سریع داده‌ها با استفاده از پرس‌وجوها.
  • امنیت: کنترل دسترسی کاربران به داده‌ها.
  • یکپارچگی داده‌ها: جلوگیری از ناهماهنگی و تضمین صحت داده‌ها.

سیستم‌های مدیریت پایگاه‌داده (DBMS) معروف:

  • MySQL
  • PostgreSQL
  • Oracle
  • Microsoft SQL Server
  • SQLite

SQL یک ابزار ضروری برای توسعه‌دهندگان، تحلیل‌گران داده و مدیران پایگاه‌های داده است و در بسیاری از صنایع و برنامه‌های کاربردی مورد استفاده قرار می‌گیرد.

تراکنش‌ها در SQL

Transaction در SQL به مجموعه‌ای از عملیات‌های پایگاه داده گفته می‌شود که به عنوان یک واحد منطقی اجرا می‌شوند. این عملیات‌ها یا همگی با موفقیت انجام می‌شوند یا هیچ‌کدام انجام نمی‌شوند. این مفهوم به عنوان خاصیت ACID شناخته می‌شود که شامل چهار ویژگی اصلی است:

  1. Atomicity (اتمی‌بودن): تمام عملیات‌های داخل یک تراکنش باید به صورت یک واحد کامل اجرا شوند. اگر حتی یکی از عملیات‌ها شکست بخورد، کل تراکنش باید لغو شود.
  2. Consistency (سازگاری): تراکنش باید پایگاه داده را از یک حالت سازگار به حالت سازگار دیگری منتقل کند. یعنی قوانین و محدودیت‌های پایگاه داده باید رعایت شوند.
  3. Isolation (جداسازی): تراکنش‌های همزمان باید به گونه‌ای اجرا شوند که گویی به صورت سریالی اجرا شده‌اند. این یعنی تراکنش‌ها نباید روی یکدیگر تأثیر بگذارند.
  4. Durability (ماندگاری): پس از اتمام موفقیت‌آمیز یک تراکنش، تغییرات باید به طور دائمی در پایگاه داده ذخیره شوند، حتی در صورت بروز خطاهای سیستم.

مثال از تراکنش در SQL:

BEGIN TRANSACTION;

UPDATE Accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE Accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT;

در این مثال، اگر هر یک از دستورات UPDATE شکست بخورد، کل تراکنش لغو می‌شود و تغییرات اعمال نمی‌شوند. اگر همه دستورات موفقیت‌آمیز باشند، تغییرات با دستور COMMIT ذخیره می‌شوند.

دستورات مدیریت تراکنش:

  • BEGIN TRANSACTION: شروع یک تراکنش جدید.
  • COMMIT: ذخیره‌سازی تغییرات و پایان تراکنش.
  • ROLLBACK: لغو تغییرات و بازگشت به حالت قبل از شروع تراکنش.

تراکنش‌ها در SQL برای حفظ یکپارچگی داده‌ها و اطمینان از صحت عملیات‌های پایگاه داده بسیار مهم هستند.

مفهوم Cascade

در SQL، مفهوم Cascade معمولاً در زمینه‌ی عملیات‌های مرتبط با کلیدهای خارجی (Foreign Keys) و حذف یا به‌روزرسانی رکوردها مطرح می‌شود. این مفهوم به شما امکان می‌دهد تا رفتارهای خاصی را در هنگام حذف یا به‌روزرسانی رکوردهای مرتبط در جداول مختلف تعریف کنید.

انواع Cascade در SQL

  1. ON DELETE CASCADE:
  • وقتی این گزینه فعال باشد، اگر رکوردی از جدول اصلی (Parent Table) حذف شود، تمام رکوردهای مرتبط در جدول فرزند (Child Table) نیز به طور خودکار حذف می‌شوند.
  • مثال: CREATE TABLE Orders ( OrderID INT PRIMARY KEY, OrderDate DATE ); CREATE TABLE OrderDetails ( OrderDetailID INT PRIMARY KEY, OrderID INT, ProductName VARCHAR(255), FOREIGN KEY (OrderID) REFERENCES Orders(OrderID) ON DELETE CASCADE ); در این مثال، اگر یک رکورد از جدول Orders حذف شود، تمام رکوردهای مرتبط در جدول OrderDetails نیز حذف خواهند شد.
  1. ON UPDATE CASCADE:
  • وقتی این گزینه فعال باشد، اگر مقدار کلید اصلی (Primary Key) در جدول اصلی به‌روزرسانی شود، مقدار کلید خارجی در جدول فرزند نیز به طور خودکار به‌روزرسانی می‌شود.
  • مثال: CREATE TABLE Customers ( CustomerID INT PRIMARY KEY, CustomerName VARCHAR(255) ); CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID INT, OrderDate DATE, FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ON UPDATE CASCADE ); در این مثال، اگر CustomerID در جدول Customers تغییر کند، مقدار CustomerID در جدول Orders نیز به طور خودکار به‌روزرسانی می‌شود.

مزایای استفاده از Cascade

  • سادگی: نیازی به نوشتن کدهای اضافی برای حذف یا به‌روزرسانی رکوردهای مرتبط نیست.
  • یکپارچگی داده‌ها: از حفظ یکپارچگی داده‌ها در پایگاه داده اطمینان حاصل می‌شود.

معایب استفاده از Cascade

  • ریسک از دست دادن داده‌ها: اگر به اشتباه رکوردی از جدول اصلی حذف شود، داده‌های مرتبط در جدول فرزند نیز حذف می‌شوند.
  • پیچیدگی در دیباگ: ممکن است ردیابی و اشکال‌زدایی مشکلات مربوط به حذف یا به‌روزرسانی داده‌ها دشوارتر شود.

مثال جامع

CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,
    DepartmentName VARCHAR(255)
);

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    EmployeeName VARCHAR(255),
    DepartmentID INT,
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

در این مثال:

  • اگر یک دپارتمان حذف شود، تمام کارمندان مرتبط با آن دپارتمان نیز حذف می‌شوند.
  • اگر DepartmentID در جدول Departments تغییر کند، DepartmentID در جدول Employees نیز به‌روزرسانی می‌شود.

استفاده از CASCADE می‌تواند بسیار مفید باشد، اما باید با احتیاط و با در نظر گرفتن پیامدهای آن استفاده شود.

مفهوم Check

برای بررسی وجود یک رکورد یا مقدار خاص در پایگاه داده، باید از دستورات SQL استفاده کنید. به عنوان مثال، اگر می‌خواهید بررسی کنید که آیا یک مقدار خاص در یک جدول وجود دارد یا خیر، می‌توانید از دستور SELECT همراه با WHERE استفاده کنید.

فرض کنید می‌خواهید بررسی کنید که آیا کاربری با نام کاربری خاص در جدول users وجود دارد یا خیر. می‌توانید از دستور زیر استفاده کنید:

SELECT * FROM users WHERE username = 'نام کاربری مورد نظر';

اگر رکوردی با نام کاربری مورد نظر وجود داشته باشد، این دستور آن را برمی‌گرداند. اگر هیچ رکوردی وجود نداشته باشد، نتیجه‌ای برگردانده نخواهد شد.

اگر می‌خواهید فقط بررسی کنید که آیا چنین رکوردی وجود دارد یا خیر، می‌توانید از دستور EXISTS استفاده کنید:

SELECT EXISTS (SELECT 1 FROM users WHERE username = 'نام کاربری مورد نظر');

این دستور مقدار TRUE یا FALSE برمی‌گرداند که نشان‌دهنده وجود یا عدم وجود رکورد مورد نظر است.

در SQL، کلمه کلیدی CHECK برای اعمال محدودیت‌های خاص روی مقادیر ستون‌ها در یک جدول استفاده می‌شود. این محدودیت‌ها تضمین می‌کنند که داده‌های وارد شده در یک ستون، شرایط مشخصی را رعایت کنند. اگر داده‌ها با این شرایط مطابقت نداشته باشند، عملیات درج یا به‌روزرسانی با خطا مواجه می‌شود.

مثال‌هایی از استفاده از CHECK:

  1. اعمال محدودیت روی یک ستون: فرض کنید می‌خواهید مطمئن شوید که سن کاربران در جدول users همیشه بیشتر از ۱۸ سال باشد:
   CREATE TABLE users (
       id INT PRIMARY KEY,
       name VARCHAR(100),
       age INT,
       CHECK (age >= 18)
   );

در این مثال، اگر سعی کنید رکوردی با سن کمتر از ۱۸ وارد کنید، خطا دریافت خواهید کرد.

  1. اعمال محدودیت روی چند ستون: فرض کنید می‌خواهید مطمئن شوید که در جدول orders، مقدار ستون total_price همیشه بیشتر از discounted_price باشد:
   CREATE TABLE orders (
       order_id INT PRIMARY KEY,
       total_price DECIMAL(10, 2),
       discounted_price DECIMAL(10, 2),
       CHECK (total_price >= discounted_price)
   );
  1. اضافه کردن CHECK به یک جدول موجود: اگر جدول از قبل ایجاد شده باشد، می‌توانید محدودیت CHECK را با دستور ALTER TABLE اضافه کنید:
   ALTER TABLE users
   ADD CONSTRAINT chk_age CHECK (age >= 18);
  1. حذف محدودیت CHECK: اگر بخواهید یک محدودیت CHECK را حذف کنید، می‌توانید از دستور زیر استفاده کنید:
   ALTER TABLE users
   DROP CONSTRAINT chk_age;

نکات مهم:

  • محدودیت‌های CHECK می‌توانند شامل مقایسه‌ها، عملیات منطقی (AND, OR) و توابع SQL باشند.
  • اگر محدودیت CHECK نقض شود، عملیات درج یا به‌روزرسانی با خطا مواجه می‌شود.
  • برخی از سیستم‌های مدیریت پایگاه داده (مانند MySQL) ممکن است از تمام ویژگی‌های CHECK پشتیبانی نکنند یا رفتار متفاوتی داشته باشند.

دیدگاه شما

نشانی ایمیل شما منتشر نخواهد شد.