PDA

View Full Version : آموزش: زبان SQL



webiran.co
جمعه 09 تیر 1391, 14:05 عصر
این مقاله که در چند بخش بر روی سایت قرار خواهد گرفت، و برای آشنایی با مفاهیم پایگاه داده و دستورات SQL در محیط کاربری phpMyAdmin نوشته شده است. یکی از مشکلات برنامه نویسان نیمه حرفه‌ای عادت به استفاده از محیط‌های کاربری SQL است که آنها را از دستورات مستقیم این زبان دور نگه می‌دارد، که باعث بروز اشتباهاتی در برنامه نویسی در زبانهای دیگری چون PHP و ASP.Net برای آنها می‌شود.
امروزه اغلب سایت‌های داینامیک از پایگاه‌های داده که معمولا با زبان SQL ساخته می‌شوند استفاده می‌کنند. خوشبختانه یادگیری این زبان بسیار ساده است. در این مقاله با پرس وجوهایی ساده‌ای از SQL آغاز خواهیم کرد و رفته رفته یک پایگاه داده را با MySQL گسترش خواهیم داد. در این مقاله هم دستورات SQL‌ را توضیح خواهیم داد و هم نحوه اجرای همین دستورات در phpMyAdmin را توضیح خواهیم داد. این بدان دلیل است که استفاده از phpMyAdmin سرعت ساخت پایگاه داده را افزایش می‌دهد ولی در سطوح حرفه‌ای تر این دستورات SQL خواهند بود که به داد شما خواهند رسید.
دلیل انتخاب phpMyAdmin
همانطور که نظرسنجی سایت Smashingmagazine نشان می‌دهد بیشتر از 38 درصد کاربران، از محیط کاربری phpMyAdmin برای ساخت پایگاه‌ داده خود استفاده می‌کنند و اغلب هاست‌های لینوکس نیز از این محیط کاربری استفاده می‌کنند. از این رو ما نیز این محیط کاربری را برای توضیح مطالب خود انتخاب کرده‌ایم. تصویر بعدی، لیستی از تمام محیط‌های کاربری برای SQL را با میزان محبوبیتشان در میان برنامه نویسان نمایش می‌دهد.

Image source: Smashingmagazine (2012.06.13)

ابزار لازم
زبان SQL (Structured Query Language) برای تعامل با سیستم‌های مدیریت پایگاه‌های داده‌ی رابطه‌ای (RDBMS)، مانند MySQL، Oracle، Sqlite و ... طراحی شده است. برای اجرای دستورات SQL در این مقاله، من فرض می کنم که شما از MySQL استفاده می‌کند و از محیط کاربری phpMyAdmin برای اجرای MySQL استفاده خواهم کرد. برای داشتن این امکانات توصیه می‌کنم در سیستم‌ عامل ویندوز WAMP نصب کنید و اگر از سیستم‌ عامل‌های مکینتاش یا لینوکس استفاده می‌کنید می‌توانید به ترتیب از MAMP و LAMP استفاده کنید.
از پنجره Command ویندوز برای نوشتن QUERYها (پرس و جو ترجمه شده است ولی از آنجاییکه QUERY به تمام مجموعه دستوراتی گفته می شود که عملی خاص را بر روی پایگاه داده انجام می‌دهد، در این مقاله به همان شکل QUERY خواهم نوشت.) استفاده خواهیم کرد. در نرم‌ افزار WAMP می توانید MySQL Console، را از مسیر زیر بیابید.
WAMP :: MySQL -> MySQL Console
ساختن پایگاه داده:
اگر چیزهایی درباره پایگاه‌های داده‌ای رابطه‌ای شنیده‌اید، و فکر می‌کنید که پایگاه‌های داده‌ی رابطه‌ای اطلاعاتی را خود به خود برای شما تهیه می‌کنند، در همین ابتدای مقاله به شما می‌گویم که هیچ جادویی در کار نیست، و همه‌ی کارها را خودتان دستور به دستور برای پایگاه داده خواهید نوشت.
اولین QUERY ما ساخت یک پایگاه داده خواهد بود. ما یک پایگاه داده خواهیم ساخت تا با آن کار کنیم.
ابتدا، کنسول MySQL‌ را باز کنید و LOGIN کنید. اگر از WAMP‌ استفاده می‌کنید، پسورد اولیه هیچ چیزی نیست و کافی است اینتر را فشار دهید. و اگر از MAMP استفاده می‌کنید پسورد اولیه کلمه root خواهد بود.
حال QUERY زیر را وارد کنید.
1
CREATE DATABASE my_first_db;
سمیکلون انتهای خط، شبیه به PHP عمل می‌کند و برای پایان بخشیدن به خط می‌باشد، منظورم این است که، اگر عبارتی بعد از سمیکلون باشد، همانند آن است که در خط جدیدی نوشته شده است.

کلمه کلیدی CREATE DATABASE به حروف بزرگ و کوچک حساس نیست، ولی برای خوانایی بیشتر، معمول است که کلمات کلیدی زبان SQL را با حروف بزرگ می‌نویسند.
روش phpMyAdmin

وارد phpMyAdmin شوید، در تب Databases قسمت Create new database را با نام پایگاه داده (my_first_db) و Collation مورد نظرتان (برای زبان فارسی utf8_persian_ci) را انتخاب کنید. برای ورود به phpMyAdmin، به طریق زیر عمل کنید.
WAMP :: phpMyAdmin
مواردی که در برای پشتیبانی از زبان فارسی مهم هستند
برای اینکه پایگاه داده شما با زبان فارسی همخوانی داشته باشد، لازم است که از مجموعه کاراکتر‌هایی طبق استاندارد utf8 استفاده کنید و از COLLATE به نام utf8_persian_ci استفاده کنید.
1
CREATE DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci;
COLLATE (تطبیق) برای هر پایگاه داده‌ای بسیار مهم است. COLLATE مشخص می‌کند که عبارت‌های نوشتاری به چه زبانی در پایگاه داده ذخیره شده است و پایگاه داده برای جستجو در میان عبارت‌ها باید از چه مجموعه کاراکترهایی به عنوان استاندارد پایه استفاده کند. مجموعه کاراکترهای اولیه که MySQL‌ برای تطبیق کلمه مورد جستجو با عبارت‌های نوشتاری داخل پایگاه داده از آن استفاده می‌کند latin1_swedish_ci می‌باشد که تمام کاراکترهای زبان انگلیسی را پشتیبانی می‌کند. برای زبان فارسی لازم است که از استاندارد utf8_persian_ci برای تطبیق (COLLATE) استفاده کنید.
ضروری است که در ساختن هر فیلدی که نوع آن از نوع نوشتاری (text, varchar) است، حتما تطبیق (COLLATE) آن را مشخص کنیم.
برای مشاهده تمام تطبیق‌های پشتیبانی شده در MySQL از دستور زیر استفاده کنید.
1
SHOW COLLATION;
مشاهده پایگاه داده‌ای که ساختید
1
SHOW DATABASES;
این دستور تمام پایگاه‌های داده‌ای را که در MySQL ساخته‌اید برایتان لیست می‌کند.
در phpMyAdmin همین که پایگاه داده را ساختید، در لیست کناری پایگاه داده‌ اضافه می‌شود.

حذف یک پایگاه داده
1
DROP DATABASE my_first_db;
برای حذف پایگاه داده‌ای که ساخته‌اید می‌توانید از QUERY زیر استفاده کنید.
در استفاده از این دستور بسیار دقیق باشید، چرا که هیچگونه پیغام اخطاری وجود ندارد، و به همین سادگی کل پایگاه داده حذف می‌شود.
روش phpMyAdmin
در تب Databases می‌توانید پایگاه داده مورد نظرتان را انتخاب کنید و کلید Drop را فشار دهید. در این هنگام، phpMyAdmin شما را به صفحه SQL می‌برد تا دستوری را که داده‌اید به شکل زبان SQL مشاهده کنید و QUERYتان را تایید کنید.

صفحه‌ای که به آن منتقل خواهید شد به شکل زیر خواهد بود.

کار با یک پایگاه داده
برای کار با یک پایگاه داده، از دستور USE استفاده می‌کنیم، این کلمه یک دستور است و یک QUERY نیست از این رو به سمیکلون احتیاجی نیست. استفاده از این دستور یک پایگاه داده را انتخاب می‌کند تا بقیه عملیات، شامل ساخت جداول را بتوانیم در درون این پایگاه داده انجام دهیم.
1
USE my_first_db;
بعد از اجرا، MySQL‌ پاسخ Database changed را نشان خواهد داد، که به این معنی است که از این خط به بعد تمام دستورات در داخل این پایگاه داده انجام خواهد گرفت. این دستور به MySQL می‌گوید تا پایگاه داده my_first_db را به عنوان پایگاه داده پیش‌فرض انتخاب کند تا بتوانیم عملیات دیگر را درون این پایگاه داده انجام دهیم.
در phpMyAdmin کافی است بر روی نام پایگاه داده، از لیست سمت چپ، کلیک کنید تا وارد پایگاه داده شوید، و بقیه عملیات را در آنجا ادامه دهید.
جدول در پایگاه داده چیست؟
جدول‌ در پایگاه داده را می‌توانید شبیه به یک صفحه Excell در نظر بگیرید. ماتریسی از سطرها و ستونها که در آن هر ستون نشان دهنده یک مشخصه ای خاص از اطلاعاتی است که در یک سطر ذخیره می‌شود. به عنوان مثال، می خواهیم اطلاعات شخصی افراد، مانند نام، نام خانوادگی، و سن گروهی را در یک جدول ذخیره کنیم، واضح است که این اسامی و سن‌ها را به ازای هر فرد زیر هم در یک جدول می‌نویسیم. به عبارت دیگر، به ازای هر فرد، یک سطر اطلاعات را در ستونهای نام و نام خانوادگی و سن جای می دهیم.

مفهوم جدول در پایگاه داده می‌تواند جوانب بسیاری به خود بگیرد، ولی هیچگاه پیچیده نیست. بحث درباره ارتباطات بین جداول، نرمال سازی جداول، و گسترش پذیری جداول، ارتباطی به جدول در پایگاه داده ندارد، تمام این مطالب در لایه تحلیل سیستم قرار دارد. حال اینکه یک برنامه نویس چطور این تحلیل را پیاده سازی می‌کند به خود او مربوط است ولی همیشه راه‌های استانداردی وجود دارد که قبل از شما آزموده شده‌اند و توصیه اکید این است که آن راه‌ها را یاد بگیرید و اجرا کنید.
ساختن جدول
برای ساختن یک جدول در درون یک پایگاه داده، از QUERY زیر استفاده می‌کنیم. متاسفانه، سایت MySQL اطلاعات خیلی مفهومی در اختیار خواننده قرار نمی‌دهد، چراکه ساختار این QUERY پیچیدگی‌های زیادی دارد، ولی در اینجا ما از یک QUERY ساده شروع می‌کنیم و رفته رفته آن را گسترش می‌دهیم.
دستورات زیر جدولی با دو ستون به نام‌های username و create_date تهیه می‌کند.
1
CREATE TABLE users (
2
username VARCHAR(20),
3
create_date DATE
4
);
دقت کنید که می‌توانید QUERY ها را در چند خط بنویسیم و از TAB هم استفاده کنیم.
خط اول یک جدول به نام users می‌سازد. در ادامه، در داخل پارانتز، لیستی از نام ستونها را همراه با نوع داده‌ای (VARCHAR, DATE) که قرار است در این ستون ذخیره شود مشاهده می‌کنید که با یک کاما ستورنها از یکدیگر جدا شده‌اند.
منظور از VARCHAR(20) یعنی ستونی از نوع کاراکتری با حداکثر بیست کاراکتر، که تنها می‌تواند عبارت‌های نوشتاریی با 20 کاراکتر را در خود ذخیره کند. منظور از DATE نوع داده تاریخ است که برای ذخیره تاریخ‌های میلادی با فرمت YYYY-MM-DD استفاده می‌شود.
کلید اصلی (Primary Key)
قبل از اجرا دستور ساخت یک جدول، ستونی در تمام جداول وجود دارد که به نام ستون کلید اصلی قرار دارد و باید این ستون را کاملتر توضیح بدهم و در آخر این ستون را نیز به جدول بالا اضافه می‌کنیم.
ستون کلید اصلی (Primary Key) ستونی است که مقادیری یکتا را در خود به عنوان معرف هر سطر ذخیره می‌کند. مانند اینکه در هنگام نوشتن لیستی از نام و نام خانوادگی و سن افراد، در کنار هر شخص شماره‌ای را از 1 تا ... می‌نویسید تا بدانید که تا به حال مشخصات چند نفر را یادداشت کرده‌اید. این ستون بعدها می‌تواند به عنوان یک نشانگر به افراد لیست به شما کمک کند. مانند اینکه، شما به جای گفتن نام فردی مانند «حسن» که ممکن است در لیست شما بسیار باشند بگویید نفر ردیف «14»، به این شیوه شما به راحتی فرد مورد نظر را می‌یابید. برای اینکه فرد مورد نظر را با شماره ردیف بیابید لازم است که این شماره ردیف در کل جدول یکتا باشد، از این رو در پایگاه‌های داده، معمولا تولید این ستون را اتوماتیک می‌کنند، تا در هنگام ساخته شدن هر سطری، یک عدد یکتا به آن سطر از طرف خود پایگاه داده اختصاص داده شود. شما مختارید این عدد یکتا را به هر روشی تولید کنید، مثلا اگر شماره ملی افراد را نیز دارید، می‌توانید از این شماره به عنوان مقداری یکتار (کلید اصلی) خود استفاده کنید. ولی دو روش معمول برای تولید مقادیر یکتا، استفاده از ستونی با نوع داده integer است که به صورت Auto Increment (اتوماتیک به ازای هر سطر، یک شماره رشد می‌کند) قرار داده شود و یا اینکه استفاده از زمان به صورت میلی ثانیه است.
حال QUERY کامل شده زیر را داریم.
1
CREATE TABLE users (
2
user_id INT AUTO_INCREMENT PRIMARY KEY,
3
username VARCHAR(20),
4
create_date DATE
5
);
خط دوم، ستونی به نام user_id از نوع داده INT (integer 32bit) تولید می‌کند که به صورت AUTO_INCREMENT است و به عنوان PRIMARY KEY (کلید اصلی) قرار داده شده است.
روش phpMyAdmin
تمام مراحل بالا را می‌توان در یک کنار یکدیگر در یک صفحه مشاهده کرد. برای انجام این کار مراحل زیر را دنبال کنید.

1. بعد از انتخاب پایگاه داده، کلید Create table را فشار دهید.
2. در این قسمت مشاهده می‌کنید که در هاست محلی که WAMP آماده کرده پایگاه داده my_first_db را ساخته‌اید و در درون آن هستید.
3. نام جدول را در این قسمت وارد می کنید.
4. ستونها را با مشخصاتشان که شامل، نوع و طول آن می‌باشد، به ترتیب وارد ‌کنید، شاید شما تنها دو ستون را مشاهده کنید، برای اضافه کردن ستون سوم، به قسمت 9 مراجعه کنید.
5. در اینجا می‌توانید ستون را به حالت PRIMARY KEY در بیاورید.
6. حالت AUTO_INCREMENT تنها برای ستونهایی قابل اجراست که از نوع integer باشند و Index آنها از نوع یکتا باشد.
7. اگر در این قسمت Collation را انتخاب کنید، phpMyAdmin به طور خودکار به تمام ستونهای نوشتاری، این Collation‌ را تخصیص می‌دهد، و دیگر مرحله 8 لازم نیست.
8. برای هر فیلد (ستون) نوشتاری، لازم است که Collation انتخاب شود. در اینجا از utf8_persian_ci برای پشتیبانی از زبان فارسی استفاده کرده ایم.
9. اگر تعداد ستونهای جدولتان بیشتر از 2 ستون است می‌توانید تعداد ستونهای مورد نظرتان را در این قسمت وارد کنید تا به 2 ستون اول اضافه شود. در پایان با فشار دادن کلید Save جدول در پایگاه داده شما ذخیره می‌شود.
لیست جداول
برای گرفتن لیستی از تمام جداول پایگاه داده از QUERY زیر استفاده می‌کنیم.
1
SHOW TABLES;
از آنجاییکه قبلا پایگاه داده my_first_db را به عنوان پایگاه داده پیش فرض (ر.ج دستور USE ) قرار داده‌ایم، این دستور تمام جداول این پایگاه داده را لیست می‌کند.
مشاهده ساختار جدول
ساختار (Structure) یک جدول، نشان می‌دهد که ستون‌هایتان را چگونه تعریف کرده اید، که شامل نام ستون (Field)، نوع داده، قبول یا عدم قبول داده Null، نوع کلید، مقدار پیش فرض و ... است. مشاهده ساختار یک جدول به شما کمک می‌کند که تمام اطلاعات لازم درباره جدولتان را در یک لیست کنار هم به طور منظم مشاهده کنید.
QUERY زیر ساختار جدول users را نمایش می‌دهد.
1
EXPLAIN users;
در phpMyAdmin برای مشاهده ساختار جدول، بعد از کلیک بر روی نام جدول، تب Structure را انتخاب کنید.
حذف جدول
همانند DROP DATABASES، می‌توان از دستور DROP TABLE برای حذف یک جدول استفاده کرد. بار دیگر یادآور می‌شوم که هیچ پیغام خطایی وجود ندارد، در استفاده از این QUERY محتاط باشید.
1
DROP TABLE users;
این QUERY جدول users را از پایگاه داده my_first_db حذف می‌کند.
روش phpMyAdmin

در phpMyAdmin وارد پایگاه داده شوید، لیستی از تمام جداولتان را مشاهده خواهید کرد، جدول مورد نظرتان را انتخاب کنید، و کلید Drop را از داخل Combo box انتخاب کنید.
ویرایش یک جدول
در بسیاری از مواقع پیش می‌آید که لازم است ستون (field) جدیدی به جدول اضافه یا کم شود، و یا مشخصات ستونی تغییر کند. تمام این سه نوع تغییر در SQL توسط دستور ALTER (تغییر دادن) انجام می‌گیرد. این دستور جوانب بسیاری دارد که در اینجا به ساده‌‌ترین و کارآمدترین آنها را اشاره خواهیم کرد.
اضافه کردن یک ستون
1
ALTER TABLE users
2
ADD email VARCHAR(100)
3
AFTER username;
خط اول، نشان می‌دهد که تغییر در جدول users اعمال خواهد شد، خط دوم با کلمه کلیدی ADD نشان می‌دهد که ستونی به نام email با نوع داده VARCHAR که حداکثر دارای 100 کاراکتر می‌تواند باشد به جدول اضافه شود. خط سوم نشان می‌دهد که این ستون بعد از ستونی به نام username جا داده شود.
حذف یک ستون
این QUERY هم مثل QUERYهای قبلی از دستور DROP، بدون هیچگونه پیغام خطایی، برای حذف ستون استفاده می‌کند.
1
ALTER TABLE users
2
DROP email;
تغییر ستون
بعضی مواقع لازم است تا مشخصات یک ستون را تغییر دهید. برای اینکار از دستور CHANGE در درون ALTER به شکل زیر استفاده می‌کنیم.
1
ALTER TABLE users
2
CHANGE username
3
user_name VARCHAR(30);
خط اول، جدول users را برای تغییر انتخاب می‌کند و خط دوم، به MySQL می‌گوید که ستون username تغییر خواهد کرد. خط ستوم نشان می‌دهد که ستون username به چه شکلی تغییر خواهد کرد. در این مثال نام ستون به user_name تغییر داده شده است و طول نوع داده آن از 20 به 30 تغییر داده شده است. با مشاهده ساختار جدول تغییر انجام شده را می‌توانیم مشاهده کنیم.
روش phpMyAdmin
برای اضافه کردن یا حذف و ویرایش یک یا چند ستون در phpMyAdmin می‌توانید وارد جدول مورد نظر شوید و تب Structure را انتخاب کنید و هر کدام از اعمال را مطابق با شکل زیر انجام دهید.

1. هر کدام از ستونها را که می خواهید تغییر دهید، بر روی دکمه Change در همان سطر کلیک کنید تا به صفحه‌ای منتقل شوید که تغییرات لازم را بتوانید در آن فیلد (ستون) اعمال کنید.
2. اگر می‌خواهید تعدادی ستون جدید به جدول اضافه کنید، می‌توانید تعداد مورد نظر را وارد کنید و کلید Go را فشار دهید. برای اینکه این ستون یا ستون‌های جدید بعد از ستونی خاص در جدول قرار گیرند لام است که قسمت After را انتخاب کنید و ستون مورد نظرتان را انتخاب کنید.
3. کلید Drop ستون مورد نظر شما را حذف می‌کند.
کار با محتوای پایگاه داده
تا اینجا دو مرحله از سه مرحله ساخت پایگاه داده را با هم گذرانده‌ایم. در مرحله اول، پایگاه داده‌ای را ساخته‌ایم، در مرحله دوم جداول پایگاه داده را ساخته‌ایم و ویرایش کرده‌ایم و در مرحله سوم لازم است تا کار با محتوای پایگاه داده، که شامل وارد کردن اطلاعات به درون جدول (نوشتن سطر جدید)، خواندن اطلاعات از درون جدول (یک سطر یا چند سطر که دارای مشخصه خاصی هستند، مانند اینکه لیست تمام افرادی را که نام آنها «حسن» است)، ویرایش اطلاعات هر سطر، و حذف یک سطر را با یکدیگر بیاموزیم. به این چهار بخش، در کنار یکدیگر CRUD (Create, Read, Update, Delete) اطلاق می‌شود.
در مقاله بعدی این قسمت را توضیح خواهم داد. لطفا نظراتتان را در مورد این مقاله برای ما بنویسید، تا بیشتر و بهتر در مقالات بعدی درباره آنها توضیح دهیم. اگر اطلاعات بیشتری در این زمینه دارید، از طریق نظرات در اختیار دیگران قرار دهید.


برای مشاهده بخش دوم این مقاله می‌توانید به سایت webiran.co (http://webiran.co/Articles/) مراجعه کنید.