آشنایی با زبان SQL در MySQL
آشنایی با زبان SQL در MySQL
در این درس با زبان استاندارد کار با پایگاه داده، ساختار دستورها و کاربرد آنها در مدیریت اطلاعات آشنا میشویم.
۱. زبان SQL چیست؟
زبان SQL مخفف عبارت Structured Query Language و به معنای «زبان پرسوجوی ساختیافته» است. این زبان برای تعریف، مدیریت، بازیابی و تغییر اطلاعات در پایگاههای داده رابطهای استفاده میشود.
هنگامی که اطلاعاتی مانند نام مشتریان، مشخصات محصولات، نمرات دانشآموزان یا سفارشهای یک فروشگاه را در یک پایگاه داده ذخیره میکنیم، برای انجام عملیات مختلف روی این اطلاعات به زبانی نیاز داریم. SQL این امکان را فراهم میکند.
۲. رابطه بین SQL و MySQL
این دو اصطلاح به یک مفهوم اشاره نمیکنند و نباید آنها را به جای یکدیگر به کار ببریم:
| مورد | SQL | MySQL |
|---|---|---|
| نوع | زبان پرسوجو و مدیریت داده | سیستم مدیریت پایگاه داده |
| وظیفه | تعریف میکند چه عملیاتی روی داده انجام شود. | دستورها را اجرا و دادهها را مدیریت میکند. |
| کاربرد | نوشتن دستورهایی مانند SELECT و INSERT | ذخیرهسازی و مدیریت پایگاههای داده |
برای مثال، وقتی دستور SELECT را مینویسیم، در واقع از زبان SQL استفاده کردهایم. سیستم MySQL این دستور را دریافت میکند، آن را پردازش میکند و نتیجه را برمیگرداند.
۳. ساختار کلی دستورهای SQL
دستورهای SQL از کلمات کلیدی، نام جدولها، نام ستونها، عملگرها و مقادیر تشکیل میشوند. هر دستور با توجه به عملیاتی که انجام میدهد، ساختار مشخصی دارد.
یک دستور ساده برای نمایش اطلاعات به شکل زیر است:
SELECT name, age
FROM students;
- SELECT: مشخص میکند کدام ستونها نمایش داده شوند.
- name, age: نام ستونهای موردنظر هستند.
- FROM: جدول مورد استفاده را مشخص میکند.
- students: نام جدولی است که اطلاعات از آن خوانده میشود.
- ;: پایان دستور را مشخص میکند.
۴. دستهبندی دستورهای SQL
دستورهای SQL را میتوان بر اساس نوع کاری که انجام میدهند، در چند گروه اصلی دستهبندی کرد.
۴-۱. زبان تعریف دادهها ـ DDL
عبارت Data Definition Language به دستورهایی گفته میشود که برای ایجاد یا تغییر ساختار پایگاه داده به کار میروند.
| دستور | کاربرد |
|---|---|
| CREATE | ایجاد پایگاه داده، جدول و سایر اشیا |
| ALTER | تغییر ساختار جدول یا سایر اشیا |
| DROP | حذف یک شیء از پایگاه داده |
| TRUNCATE | حذف تمام رکوردهای جدول، بدون حذف خود جدول |
۴-۲. زبان دستکاری دادهها ـ DML
عبارت Data Manipulation Language شامل دستورهایی است که برای افزودن، تغییر و حذف دادههای داخل جدول استفاده میشوند.
| دستور | کاربرد |
|---|---|
| INSERT | افزودن رکورد جدید |
| UPDATE | ویرایش رکوردهای موجود |
| DELETE | حذف رکوردها |
۴-۳. زبان پرسوجوی دادهها ـ DQL
عبارت Data Query Language برای دریافت و بازیابی اطلاعات استفاده میشود. مهمترین دستور این گروه SELECT است.
SELECT * FROM students;
۴-۴. زبان کنترل دادهها ـ DCL
عبارت Data Control Language شامل دستورهایی برای مدیریت مجوزهای دسترسی کاربران است.
| دستور | کاربرد |
|---|---|
| GRANT | اعطای مجوز به کاربر |
| REVOKE | لغو مجوز اعطاشده |
۴-۵. زبان کنترل تراکنشها ـ TCL
عبارت Transaction Control Language برای مدیریت تراکنشها به کار میرود. تراکنش مجموعهای از عملیات پایگاه داده است که بهعنوان یک واحد منطقی مدیریت میشود.
| دستور | کاربرد |
|---|---|
| COMMIT | ثبت نهایی تغییرات تراکنش |
| ROLLBACK | بازگرداندن تغییرات ثبتنشده تراکنش |
| SAVEPOINT | ایجاد نقطه بازگشت در تراکنش |
۵. آشنایی با دستورهای پرکاربرد SQL
۵-۱. ایجاد پایگاه داده با CREATE DATABASE
برای ایجاد یک پایگاه داده جدید از دستور CREATE DATABASE استفاده میکنیم.
CREATE DATABASE school_db;
۵-۲. انتخاب پایگاه داده با USE
پس از ایجاد پایگاه داده، باید آن را برای اجرای دستورهای بعدی انتخاب کنیم.
USE school_db;
۵-۳. ایجاد جدول با CREATE TABLE
جدول محل نگهداری اطلاعات در پایگاه داده رابطهای است. هر جدول از ستونها و رکوردها تشکیل میشود.
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
age INT,
city VARCHAR(50)
);
| ستون | نوع داده | ویژگی |
|---|---|---|
| id | INT | کلید اصلی و افزایش خودکار |
| name | VARCHAR(100) | اجباری و حداکثر ۱۰۰ نویسه |
| age | INT | عدد صحیح؛ میتواند خالی باشد |
| city | VARCHAR(50) | متن با حداکثر ۵۰ نویسه |
این دستور یک جدول با نام students ایجاد میکند.
۵-۴. افزودن اطلاعات با INSERT INTO
برای افزودن رکورد جدید به جدول از دستور INSERT INTO استفاده میکنیم.
INSERT INTO students (name, age, city)
VALUES ('Sara', 20, 'Tehran');
۵-۵. نمایش اطلاعات با SELECT
دستور SELECT برای خواندن اطلاعات از جدول استفاده میشود.
SELECT * FROM students;
| id | name | age | city |
|---|---|---|---|
| 1 | Sara | 20 | Tehran |
۵-۶. نمایش ستونهای مشخص
اگر فقط به برخی ستونها نیاز داشته باشیم، نام آنها را بعد از SELECT مینویسیم.
SELECT name, city
FROM students;
۵-۷. فیلتر کردن اطلاعات با WHERE
برای نمایش رکوردهایی که شرط مشخصی دارند، از عبارت WHERE استفاده میکنیم.
SELECT *
FROM students
WHERE age >= 18;
۵-۸. مرتبسازی اطلاعات با ORDER BY
برای مرتبسازی نتیجه بر اساس یک یا چند ستون از ORDER BY استفاده میشود.
SELECT *
FROM students
ORDER BY age ASC;
برای مرتبسازی نزولی میتوان از DESC استفاده کرد:
SELECT *
FROM students
ORDER BY age DESC;
۵-۹. ویرایش اطلاعات با UPDATE
برای تغییر مقدار یک یا چند ستون در رکوردهای موجود از دستور UPDATE استفاده میکنیم.
UPDATE students
SET city = 'Shiraz'
WHERE id = 1;
۵-۱۰. حذف اطلاعات با DELETE
برای حذف رکوردهای مشخص از جدول از دستور DELETE استفاده میکنیم.
DELETE FROM students
WHERE id = 1;
۶. عملگرهای پرکاربرد در SQL
عملگرها برای ساخت شرط، مقایسه مقادیر و ترکیب چند شرط در دستورهای SQL استفاده میشوند.
۶-۱. عملگرهای مقایسهای
| عملگر | معنا | مثال |
|---|---|---|
| = | برابر | age = 20 |
| != یا <> | نابرابر | age != 20 |
| > | بزرگتر | age > 18 |
| < | کوچکتر | age < 18 |
| >= | بزرگتر یا مساوی | age >= 18 |
| <= | کوچکتر یا مساوی | age <= 18 |
۶-۲. عملگرهای منطقی
- AND: تمام شرطهای متصلشده باید درست باشند.
- OR: درست بودن حداقل یکی از شرطها کافی است.
- NOT: نتیجه شرط را معکوس میکند.
SELECT *
FROM students
WHERE age >= 18 AND city = 'Tehran';
۶-۳. عملگر BETWEEN
برای بررسی قرار گرفتن یک مقدار در یک بازه مشخص استفاده میشود. دو سر بازه نیز در بررسی لحاظ میشوند.
SELECT *
FROM students
WHERE age BETWEEN 18 AND 25;
۶-۴. عملگر IN
برای بررسی اینکه یک مقدار در میان چند مقدار مشخص وجود دارد یا خیر، از IN استفاده میکنیم.
SELECT *
FROM students
WHERE city IN ('Tehran', 'Shiraz', 'Tabriz');
۶-۵. عملگر LIKE
برای جستوجوی الگو در مقادیر متنی از LIKE استفاده میشود.
- %: نشاندهنده صفر یا چند نویسه است.
- _: نشاندهنده دقیقاً یک نویسه است.
SELECT *
FROM students
WHERE name LIKE 'S%';
۷. توابع پرکاربرد در MySQL
توابع، عملیات آمادهای هستند که روی دادهها انجام میشوند و یک مقدار یا نتیجه محاسبهشده برمیگردانند.
۷-۱. توابع تجمیعی
| تابع | کاربرد |
|---|---|
| COUNT() | شمارش تعداد رکوردها یا مقادیر غیر NULL |
| SUM() | محاسبه مجموع مقادیر عددی |
| AVG() | محاسبه میانگین مقادیر عددی |
| MAX() | یافتن بیشترین مقدار |
| MIN() | یافتن کمترین مقدار |
برای مثال، برای شمارش تعداد دانشآموزان جدول:
SELECT COUNT(*) AS total_students
FROM students;
| total_students |
|---|
| 1 |
۷-۲. توابع متنی
SELECT UPPER(name) FROM students;
SELECT LOWER(name) FROM students;
SELECT LENGTH(name) FROM students;
- UPPER(): تبدیل حروف انگلیسی به حروف بزرگ.
- LOWER(): تبدیل حروف انگلیسی به حروف کوچک.
- LENGTH(): محاسبه طول رشته بر حسب بایت، نه لزوماً تعداد نویسهها.
۷-۳. توابع تاریخ و زمان
SELECT NOW();
SELECT CURDATE();
SELECT CURTIME();
- NOW(): تاریخ و زمان جاری.
- CURDATE(): تاریخ جاری.
- CURTIME(): زمان جاری.
۸. گروهبندی اطلاعات با GROUP BY
گاهی لازم است اطلاعات را بر اساس یک ویژگی دستهبندی کنیم و برای هر دسته محاسبهای انجام دهیم. دستور GROUP BY برای این کار استفاده میشود.
فرض کنید میخواهیم تعداد دانشآموزان هر شهر را محاسبه کنیم:
SELECT city, COUNT(*) AS student_count
FROM students
GROUP BY city;
| city | student_count |
|---|---|
| Tehran | 5 |
| Shiraz | 3 |
| Tabriz | 2 |
تفاوت WHERE و HAVING
- WHERE رکوردها را پیش از گروهبندی فیلتر میکند.
- HAVING گروههای ایجادشده را پس از گروهبندی فیلتر میکند.
SELECT city, COUNT(*) AS student_count
FROM students
GROUP BY city
HAVING COUNT(*) >= 2;
۹. اتصال جدولها با JOIN
در پایگاه داده رابطهای، اطلاعات ممکن است در چند جدول مرتبط ذخیره شوند. برای دریافت اطلاعات ترکیبی از این جدولها میتوانیم از JOIN استفاده کنیم.
فرض کنید دو جدول زیر را داریم:
| جدول students | |
|---|---|
| id | name |
| 1 | Sara |
| 2 | Ali |
| جدول enrollments | |
|---|---|
| student_id | course |
| 1 | MySQL |
| 2 | Python |
برای نمایش نام دانشآموز همراه با نام دوره او، میتوانیم از دستور زیر استفاده کنیم:
SELECT students.name, enrollments.course
FROM students
INNER JOIN enrollments
ON students.id = enrollments.student_id;
| name | course |
|---|---|
| Sara | MySQL |
| Ali | Python |
۱۰. چند نکته مهم درباره نوشتن دستورهای SQL
۱۰-۱. بزرگ و کوچک بودن حروف
معمولاً کلمات کلیدی SQL را با حروف بزرگ مینویسند تا خوانایی دستور افزایش یابد؛ اما در بسیاری از موارد، این زبان به بزرگی یا کوچکی حروف کلمات کلیدی حساس نیست.
SELECT * FROM students;
و دستور زیر نیز از نظر کلمات کلیدی همان معنا را دارد:
select * from students;
۱۰-۲. استفاده از نامهای معنادار
برای جدولها و ستونها نامهایی انتخاب کنید که مفهوم آنها را مشخص کنند؛ مانند students، first_name و birth_date.
۱۰-۳. انتخاب ستونهای موردنیاز
اگر فقط به چند ستون نیاز دارید، بهتر است نام همان ستونها را بنویسید و بیدلیل از علامت * استفاده نکنید. این کار میتواند خوانایی و کارایی پرسوجو را بهتر کند.
۱۰-۴. توجه به مقدارهای NULL
مقدار NULL به معنای مقدار نامشخص یا ثبتنشده است و با عدد صفر یا رشته خالی یکسان نیست.
برای بررسی مقدارهای خالی از IS NULL یا IS NOT NULL استفاده میکنیم:
SELECT *
FROM students
WHERE age IS NULL;
۱۱. اجرای دستورهای SQL در محیط MySQL
برای نوشتن و اجرای دستورهای SQL در MySQL میتوان از محیطهای مختلف استفاده کرد. دو روش رایج عبارتاند از:
مراحل کلی اجرای یک دستور
۱۲. خطاهای رایج هنگام کار با SQL
| خطا | علت احتمالی | راهکار |
|---|---|---|
| جدول پیدا نمیشود | نام جدول اشتباه است یا پایگاه داده مناسب انتخاب نشده است. | نام جدول و دستور USE را بررسی کنید. |
| خطای نگارشی | کلمه کلیدی، پرانتز یا علامت نگارشی اشتباه نوشته شده است. | ساختار دستور و علامتهای پایان را بررسی کنید. |
| تکراری بودن کلید اصلی | مقدار تکراری برای ستون دارای PRIMARY KEY ثبت شده است. | مقدار یکتا وارد کنید یا از افزایش خودکار شناسه استفاده کنید. |
| مقدار نامعتبر | نوع داده واردشده با نوع ستون سازگار نیست. | نوع داده و مقدار ورودی را بررسی کنید. |
| تغییر یا حذف ناخواسته رکوردها | شرط WHERE نوشته نشده یا نادرست است. | پیش از اجرای دستور، شرط را با یک SELECT آزمایش کنید. |
| دسترسی غیرمجاز | کاربر مجوز اجرای عملیات را ندارد. | مجوزهای کاربر را بررسی کنید. |
۱۳. تمرین عملی: مدیریت اطلاعات دانشآموزان
در این تمرین یک پایگاه داده ساده برای ثبت اطلاعات دانشآموزان ایجاد میکنیم و چند عملیات پایه را روی آن انجام میدهیم.
مرحله اول: ایجاد پایگاه داده و انتخاب آن
CREATE DATABASE training_db;
USE training_db;
مرحله دوم: ایجاد جدول دانشآموزان
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
age INT,
score DECIMAL(4,2)
);
مرحله سوم: وارد کردن اطلاعات نمونه
INSERT INTO students (first_name, last_name, age, score)
VALUES
('Sara', 'Ahmadi', 20, 18.50),
('Ali', 'Karimi', 22, 16.75),
('Mina', 'Rahimi', 19, 19.25),
('Reza', 'Moradi', 21, 14.50);
مرحله چهارم: نمایش تمام اطلاعات
SELECT * FROM students;
| id | first_name | last_name | age | score |
|---|---|---|---|---|
| 1 | Sara | Ahmadi | 20 | 18.50 |
| 2 | Ali | Karimi | 22 | 16.75 |
| 3 | Mina | Rahimi | 19 | 19.25 |
| 4 | Reza | Moradi | 21 | 14.50 |
مرحله پنجم: نمایش دانشآموزان با نمره بیشتر از ۱۷
SELECT first_name, last_name, score
FROM students
WHERE score > 17;
| first_name | last_name | score |
|---|---|---|
| Sara | Ahmadi | 18.50 |
| Mina | Rahimi | 19.25 |
مرحله ششم: مرتبسازی بر اساس نمره
SELECT first_name, last_name, score
FROM students
ORDER BY score DESC;
| first_name | last_name | score |
|---|---|---|
| Mina | Rahimi | 19.25 |
| Sara | Ahmadi | 18.50 |
| Ali | Karimi | 16.75 |
| Reza | Moradi | 14.50 |
مرحله هفتم: محاسبه میانگین نمرات
SELECT AVG(score) AS average_score
FROM students;
| average_score |
|---|
| 17.25 |
مرحله هشتم: تغییر نمره یک دانشآموز
UPDATE students
SET score = 19.00
WHERE id = 2;
مرحله نهم: بررسی اطلاعات پس از تغییر
SELECT * FROM students
WHERE id = 2;
| id | first_name | last_name | age | score |
|---|---|---|---|---|
| 2 | Ali | Karimi | 22 | 19.00 |
۱۴. جمعبندی درس
در این درس با زبان SQL و کاربرد آن در سیستم مدیریت پایگاه داده MySQL آشنا شدیم. یاد گرفتیم که با استفاده از دستورهای این زبان میتوان ساختار پایگاه داده را ایجاد و مدیریت کرد، اطلاعات را افزود یا ویرایش کرد و دادههای موردنیاز را بازیابی نمود.
۱۵. سؤالات و تمرین پایانی
- عبارت SQL مخفف چیست و چه کاربردی دارد؟
- تفاوت SQL و MySQL را توضیح دهید.
- دستورهای CREATE، INSERT، SELECT و UPDATE چه کاربردی دارند؟
- تفاوت WHERE و HAVING چیست؟
- چرا استفاده از WHERE در دستورهای UPDATE و DELETE اهمیت دارد؟
- تفاوت ASC و DESC را بنویسید.
- وظیفه عملگرهای AND، OR و NOT چیست؟
- کاربرد دستور JOIN را با یک مثال توضیح دهید.
تمرین عملی
یک جدول با نام products ایجاد کنید که ستونهای زیر را داشته باشد:
- id: شناسه محصول و کلید اصلی
- product_name: نام محصول
- price: قیمت محصول
- quantity: تعداد موجودی
سپس عملیات زیر را انجام دهید:
- حداقل پنج محصول به جدول اضافه کنید.
- تمام محصولات را نمایش دهید.
- محصولاتی را نمایش دهید که قیمت آنها بیشتر از ۱۰۰ هزار واحد پولی است.
- محصولات را بر اساس قیمت از بیشترین به کمترین مرتب کنید.
- میانگین قیمت محصولات را محاسبه کنید.
- موجودی یکی از محصولات را تغییر دهید.
- یکی از محصولات را با استفاده از شناسه آن حذف کنید.

دیدگاه کاربران
نظر یا تجربه خود را درباره این مطلب با دیگران به اشتراک بگذارید.