دستورات SQL: راهنمای کاربردی برای کار با پایگاه داده
💡آشنایی با زبان پایگاه داده
دستورات SQL ابزار اصلی برای ذخیره، جستجو، تغییر و سازمان دهی اطلاعات در پایگاه داده هستند. این زبان در برنامه های مختلف، از فروشگاه اینترنتی تا سامانه های مدیریتی، برای ارتباط با داده ها به کار می رود. با شناخت دستورهایی مانند SELECT، WHERE، JOIN و INSERT می توانید اطلاعات موردنیاز را دقیق تر بازیابی و مدیریت کنید.
📘SQL در توسعه وب
در یک پروژه
طراحی سایت، پایگاه داده می تواند اطلاعات کاربران، محصولات، سفارش ها و محتوا را نگهداری کند. برنامه با ارسال درخواست های SQL این داده ها را می خواند یا تغییر می دهد. این راهنما از دستورهای پایه شروع می کند و به فیلتر، مرتب سازی، گروه بندی، تغییر داده و پیوند جدول ها می رسد.
۵ نکته مهم درباره دستورات SQL
⭐مفاهیم پایه ای که در ادامه به کار می آیند
برای یادگیری SQL، بهتر است هر دستور را در کنار نقش آن در یک پرس وجوی کامل بشناسید. ابتدا جدول و ستون های آن را مشخص کنید، سپس انتخاب داده، شرط گذاری، مرتب سازی یا تغییر رکوردها را تمرین کنید. پنج نکته زیر نقشه راه مناسبی برای شروع و جلوگیری از خطاهای رایج است.
۱. تفاوت خواندن داده با تغییر داده را بشناسید
۱
SELECT برای خواندن و نمایش داده ها استفاده می شود، در حالی که INSERT، UPDATE و DELETE داده های جدول را تغییر می دهند. این تفاوت مهم است، چون یک پرس وجوی خواندنی معمولا اطلاعات را دست نخورده باقی می گذارد، اما دستورهای تغییردهنده ممکن است بر تعداد زیادی رکورد اثر بگذارند.
برای نمونه، اگر بخواهید نام و نام خانوادگی افراد را ببینید، SELECT مناسب است. اگر بخواهید نام یک شخص را عوض کنید، باید UPDATE را با شرط دقیق به کار ببرید. پیش از اجرای دستور تغییردهنده، همان شرط را با SELECT آزمایش کنید تا رکوردهای هدف را بررسی کرده باشید.
۲. شرط WHERE را با دقت بنویسید
۲
WHERE نتیجه را به رکوردهایی محدود می کند که با شرط تعیین شده هماهنگ هستند. بدون این عبارت، UPDATE ممکن است تمام ردیف های جدول را تغییر دهد و DELETE ممکن است همه رکوردها را حذف کند. بنابراین شرط را با شناسه یکتا یا ترکیبی از فیلدهایی بنویسید که فقط داده موردنظر را انتخاب می کنند.
فرض کنید قصد دارید سفارش با شناسه ۲۵ را بررسی کنید. ابتدا شرط WHERE OrderID = 25 را با SELECT اجرا کنید. اگر یک ردیف درست نمایش داده شد، می توانید همان شرط را در دستور تغییر استفاده کنید. برای ترکیب شرط ها نیز AND و OR را همراه پرانتز به کار ببرید تا اولویت ارزیابی روشن باشد.
۳. داده های تکراری و خالی را جداگانه مدیریت کنید
۳
اگر خروجی SELECT شامل مقادیر تکراری باشد، می توانید از DISTINCT استفاده کنید تا هر مقدار یکتا فقط یک بار نمایش داده شود. برای نمونه، فهرست شهرهای ثبت شده در جدول مشتریان را می توان بدون تکرار استخراج کرد. DISTINCT فقط شکل خروجی را تغییر می دهد و رکوردهای تکراری را از جدول پاک نمی کند.
مقدار NULL نیز با رشته خالی یا صفر یکسان نیست؛ NULL نشان می دهد مقدار مشخصی ثبت نشده است. برای پیدا کردن چنین ردیف هایی از IS NULL و برای موارد دارای مقدار از IS NOT NULL استفاده کنید. مقایسه با عبارت = NULL معمولا روش صحیح تشخیص مقدار تهی نیست.
۴. مرتب سازی و گروه بندی را با هدف مشخص انجام دهید
۴
ORDER BY ترتیب نمایش ردیف ها را مشخص می کند. با ASC داده ها به صورت صعودی و با DESC به صورت نزولی مرتب می شوند. اگر ترتیب تعیین نشود، نباید فرض کنید پایگاه داده همیشه رکوردها را با ترتیب خاصی برمی گرداند.
GROUP BY ردیف هایی را که مقدار مشترک دارند در گروه قرار می دهد و اغلب همراه تابع هایی مانند COUNT، SUM و AVG به کار می رود. برای مثال، می توانید تعداد سفارش های هر مشتری را محاسبه کنید. شرط مربوط به نتیجه گروه بندی با HAVING نوشته می شود؛ در حالی که WHERE پیش از گروه بندی، ردیف های ورودی را فیلتر می کند.
۵. هنگام پیوند جدول ها، رابطه میان کلیدها را بررسی کنید
۵
JOIN اطلاعات مرتبط را از چند جدول در یک خروجی جمع می کند. معمولا رابطه بر اساس کلید اصلی یک جدول و کلید خارجی جدول دیگر تعریف می شود. اگر ستون های پیوند اشتباه انتخاب شوند، خروجی ممکن است ردیف های تکراری، ناقص یا نامرتبط داشته باشد.
برای نمونه، جدول مشتریان را می توان با جدول سفارش ها بر اساس شناسه مشتری پیوند داد. INNER JOIN فقط ردیف های دارای تطابق را می آورد؛ LEFT JOIN تمام ردیف های جدول سمت چپ را نگه می دارد و اطلاعات تطبیق نیافته جدول دوم را به صورت NULL نشان می دهد. نوع پیوند را بر اساس نتیجه موردنیاز انتخاب کنید، نه بر اساس تصور کلی درباره سرعت آن.
| نکته |
توضیح کوتاه |
درجه اهمیت |
| شناخت نوع دستور |
تمایز میان خواندن داده و تغییر جدول |
بسیار زیاد |
| استفاده دقیق از WHERE |
محدود کردن عملیات به رکوردهای هدف |
بسیار زیاد |
| رسیدگی به تکرار و NULL |
انتخاب DISTINCT و شرط تهی متناسب با نیاز |
زیاد |
| مرتب سازی و گروه بندی |
استفاده از ORDER BY، GROUP BY و HAVING |
زیاد |
| پیوند جدول ها |
انتخاب نوع JOIN و کلید رابطه درست |
زیاد |
دستور SELECT و انتخاب ستون ها
🔎بازیابی اطلاعات از جدول
SELECT ستون یا ستون های موردنظر را از یک یا چند جدول بازیابی می کند. FROM نام جدول مبدا را مشخص می کند. در مثال زیر، فقط نام و نام خانوادگی از جدول Person برگردانده می شود؛ انتخاب ستون های موردنیاز به جای استفاده همیشگی از ستاره، خروجی را خواناتر می کند و از دریافت داده های اضافی می کاهد.
SELECT Name, Family
FROM Person;
✅حذف مقادیر تکراری از نتیجه
با افزودن DISTINCT پس از SELECT، مقادیر تکراری در نتیجه حذف می شوند. این دستور برای تهیه فهرست یکتای شهرها یا دسته بندی ها کاربرد دارد. توجه کنید که DISTINCT داده های اصلی جدول را پاک نمی کند؛ تنها نتیجه همان پرس وجو را بدون تکرار نمایش می دهد.
SELECT DISTINCT City
FROM Persons;
شرط گذاری با WHERE و عملگرهای منطقی
🎯فیلتر کردن نتیجه
WHERE شرطی را تعیین می کند که رکوردها باید با آن مطابقت داشته باشند. عملگر AND زمانی نتیجه می دهد که همه شرط های متصل درست باشند؛ OR زمانی کافی است که دست کم یکی از شرط ها برقرار باشد. هنگام ترکیب این عملگرها از پرانتز استفاده کنید تا منطق پرس وجو برای شما و دیگران روشن بماند. برای مطالعه بیشتر می توانید به
دستور Where و
عملگرهای And و Or مراجعه کنید.
SELECT Name, Family
FROM Person
WHERE IdNumber = '1111'
AND ID > 15;
⚠️جستجو با الگو، فهرست یا بازه
LIKE برای جستجوی متنی بر اساس الگو است. در اغلب پیاده سازی های SQL، علامت درصد % با هر رشته ای از صفر یا چند نویسه تطبیق می کند و زیرخط _ با یک نویسه. IN برای بررسی چند مقدار مشخص و BETWEEN برای انتخاب بازه به کار می رود. رفتار مرزهای BETWEEN معمولا شامل دو مقدار ابتدا و انتها است؛ در داده های زمانی، محدوده را با دقت بررسی کنید.
SELECT *
FROM Persons
WHERE City LIKE 'S%'
AND Family IN ('رضایی', 'حاجیلو');
SELECT *
FROM Persons
WHERE Age BETWEEN 18 AND 30;
مرتب سازی، گروه بندی و فیلتر گروه ها
📊ORDER BY، GROUP BY و HAVING
ORDER BY نتایج را با توجه به یک یا چند ستون مرتب می کند. ASC ترتیب صعودی و DESC ترتیب نزولی را مشخص می کند. GROUP BY ردیف های دارای مقدار مشترک را در گروه قرار می دهد و می تواند همراه تابع های تجمیعی اجرا شود. HAVING برای محدود کردن گروه ها بر اساس نتیجه تجمیع کاربرد دارد؛ برای نمونه، نمایش مشتریانی که تعداد سفارش هایشان از یک حد بیشتر است.
SELECT City, COUNT(*) AS CustomerCount
FROM Persons
GROUP BY City
HAVING COUNT(*) > 2
ORDER BY CustomerCount DESC;
| عبارت |
کاربرد |
زمان اثرگذاری |
| WHERE |
فیلتر کردن ردیف ها |
پیش از گروه بندی |
| GROUP BY |
ساخت گروه بر اساس ستون های مشخص |
پس از انتخاب ردیف های واجد شرط |
| HAVING |
فیلتر کردن گروه ها و نتایج تجمیعی |
پس از گروه بندی |
| ORDER BY |
تعیین ترتیب نمایش نتیجه |
در مرحله پایانی نمایش |
افزودن، ویرایش و حذف داده ها
دستور INSERT برای افزودن رکورد
➕ثبت یک ردیف جدید
INSERT INTO برای افزودن رکورد به جدول استفاده می شود. بهتر است نام ستون ها را صریح بنویسید تا ترتیب مقادیر با ترتیب فیلدهای جدول اشتباه نشود. تعداد مقادیر و نوع داده هر مقدار باید با ستون متناظر سازگار باشد. جزئیات مقدارهای پیش فرض و شیوه نوشتن رشته ها ممکن است با توجه به سامانه پایگاه داده تفاوت داشته باشد.
INSERT INTO Student (Name, Family)
VALUES ('Ali', 'Rezaee');
دستور UPDATE برای ویرایش رکورد
✏️شرط را پیش از اجرا بررسی کنید
UPDATE مقدار یک یا چند ستون را تغییر می دهد. اگر WHERE را حذف کنید، همه ردیف های جدول به روز می شوند. پیش از اجرای دستور، رکوردهای منطبق با شرط را با SELECT ببینید و در محیط های حساس از تراکنش یا نسخه پشتیبان مناسب استفاده کنید.
UPDATE Person
SET Name = 'Ali'
WHERE ID = 3222;
دستور DELETE برای حذف رکورد
🛑حذف محدود و آگاهانه
DELETE رکوردهای انتخاب شده از جدول را حذف می کند. برای حذف یک رکورد، شرطی مانند شناسه یکتا مشخص کنید و پیش از اجرا همان شرط را با SELECT آزمایش کنید. اجرای DELETE بدون WHERE می تواند تمام ردیف ها را حذف کند، هرچند ساختار جدول باقی می ماند. حذف داده با حذف خود جدول یکسان نیست.
DELETE FROM Person
WHERE ID = 16;
محدود کردن خروجی و نام گذاری مستعار
🧭TOP و Alias
در Microsoft SQL Server، TOP تعداد یا درصدی از ردیف های نتیجه را محدود می کند. در سامانه های دیگر ممکن است به جای آن از LIMIT یا FETCH استفاده شود؛ بنابراین دستور مناسب را با توجه به پایگاه داده انتخاب کنید. برای داشتن نتیجه قابل پیش بینی، محدودسازی را همراه ORDER BY به کار ببرید.
Alias نام مستعار برای جدول یا ستون ایجاد می کند و می تواند خروجی را خواناتر کند. واژه AS برای مشخص کردن این نام متداول است. نام مستعار فقط در همان پرس وجو کاربرد دارد و نام واقعی ستون یا جدول را تغییر نمی دهد.
SELECT TOP 2 Name AS CustomerName
FROM Persons
ORDER BY Name ASC;
پیوند جدول ها با JOIN
🔗انتخاب نوع پیوند متناسب با خروجی
JOIN امکان ترکیب ستون های چند جدول مرتبط را فراهم می کند. INNER JOIN تنها ردیف هایی را برمی گرداند که در دو طرف پیوند تطابق دارند. LEFT JOIN همه ردیف های جدول سمت چپ را حفظ می کند، حتی اگر برای بعضی از آن ها ردیف مرتبطی در جدول دیگر پیدا نشود. RIGHT JOIN همین رفتار را برای جدول سمت راست دارد و FULL JOIN ردیف های هر دو طرف را نگه می دارد؛ پشتیبانی از انواع پیوند می تواند میان سامانه های پایگاه داده تفاوت داشته باشد.
INNER JOIN و JOIN بدون تعیین نوع، در بسیاری از سامانه ها معنای یکسان دارند؛ نباید بدون اندازه گیری نتیجه گرفت یکی همیشه سریع تر است. کارایی به ساختار جدول، شاخص ها، حجم داده و طرح اجرای پرس وجو بستگی دارد. برای جزئیات بیشتر می توانید راهنمای
دستور Join،
دستور Left Join و
دستور Full Join را ببینید.
SELECT Persons.LastName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.P_Id = Orders.P_Id;
| نوع JOIN |
ردیف های نمایش داده شده |
کاربرد معمول |
| INNER JOIN |
ردیف های دارای تطابق در هر دو جدول |
نمایش اطلاعات مرتبط |
| LEFT JOIN |
همه ردیف های جدول چپ و موارد مرتبط جدول راست |
یافتن رکوردهای بدون مورد متناظر |
| RIGHT JOIN |
همه ردیف های جدول راست و موارد مرتبط جدول چپ |
حفظ همه رکوردهای سمت راست |
| FULL JOIN |
ردیف های هر دو جدول، با یا بدون تطابق |
بررسی کامل دو مجموعه داده |
ترکیب نتیجه ها با UNION و ایجاد جدول با SELECT INTO
🧩ادغام مجموعه های سازگار
UNION نتیجه دو پرس وجو را به صورت عمودی ترکیب می کند؛ تعداد و ترتیب ستون ها باید سازگار باشد و نوع داده ستون های متناظر نیز قابل تبدیل باشد. UNION به طور معمول ردیف های تکراری را حذف می کند، در حالی که UNION ALL تکرارها را نگه می دارد و در صورت نیاز به حفظ همه داده ها گزینه مناسب تری است. این عملگر با JOIN تفاوت دارد: JOIN ستون های مرتبط را کنار هم می گذارد، اما UNION ردیف های نتیجه را به یک مجموعه اضافه می کند.
SELECT E_Name FROM Employees_Norway
UNION ALL
SELECT E_Name FROM Employees_USA;
💾کپی کردن داده به جدول جدید
SELECT INTO در سامانه هایی مانند SQL Server می تواند نتیجه یک پرس وجو را در جدول جدید ذخیره کند. از آن برای ساخت نسخه کاری یا کپی بخشی از داده ها استفاده می شود، اما جایگزین روش های کامل پشتیبان گیری از پایگاه داده نیست. نحو و قابلیت های این دستور به سامانه وابسته است؛ پیش از استفاده در محیط واقعی مستندات همان پایگاه داده را بررسی کنید.
SELECT LastName, FirstName
INTO Persons_Backup
FROM Persons
WHERE City = 'Sandnes';
مقادیر NULL و بررسی داده های خالی
🟣NULL با فضای خالی یکی نیست
NULL نشان دهنده نبود مقدار ثبت شده یا نامشخص بودن آن است. رشته خالی، صفر و فاصله هر کدام مقدارهای متفاوتی هستند. برای یافتن خانه های تهی از IS NULL استفاده کنید. در SQL Server تابع ISNULL می تواند مقدار جایگزین برای NULL برگرداند؛ در پایگاه های دیگر ممکن است از تابع هایی مانند COALESCE یا ساختارهای متفاوت استفاده شود. نام مشابه تابع و شرط نباید باعث اشتباه گرفتن این کاربردها شود.
SELECT LastName, FirstName, Address
FROM Persons
WHERE Address IS NULL;
نکات ایمنی و خطاهای رایج در نوشتن SQL
!
پیش از تغییر اطلاعات، شرط را آزمایش کنید. یک خطای کوچک در WHERE می تواند تعداد زیادی رکورد را تحت تاثیر قرار دهد. ابتدا SELECT را با همان شرط اجرا کنید، تعداد ردیف ها و محتوای آن ها را بررسی کنید و سپس دستور تغییر را اجرا کنید.
ساختار هر سامانه را در نظر بگیرید. برخی قابلیت ها مانند TOP، SELECT INTO و توابع مدیریت NULL در پایگاه های داده مختلف نحو یکسانی ندارند. نمونه ها را با محیطی که استفاده می کنید تطبیق دهید.
به ورودی کاربر اعتماد کامل نکنید. در برنامه های وب، برای مقدارهای ورودی از پرس وجوهای پارامتری استفاده کنید و رشته SQL را با چسباندن مستقیم ورودی کاربر نسازید. این کار به کاهش خطر حمله تزریق SQL کمک می کند.
داده واقعی را بی جهت دریافت نکنید. انتخاب ستون های لازم، محدود کردن نتیجه و استفاده از شاخص های مناسب می تواند به خوانایی و کارایی پرس وجو کمک کند. کارایی را با ابزارهای پایگاه داده و روی داده های واقعی ارزیابی کنید.
ارتباط پایگاه داده با سئو و طراحی سایت
🌱زیرساخت فنی و محتوایی
SQL به تنهایی رتبه یک صفحه را در نتایج جستجو تعیین نمی کند، اما عملکرد و ساختار داده می تواند بخشی از تجربه فنی وب سایت باشد. بازیابی درست محتوا، مدیریت اطلاعات محصولات و پاسخ گویی مناسب برنامه به درخواست ها در نگهداری یک وب سایت قابل اتکا نقش دارند. برای آشنایی با بهینه سازی سایت، راهنمای
سئو را بخوانید. همچنین موضوع
خرید بک لینک با امنیت و کیفیت پایگاه داده یک موضوع جداگانه است و جایگزین بهبود فنی سایت نمی شود.
جمع بندی: دستورات SQL را گام به گام تمرین کنید
✅از پرس وجوی ساده تا مدیریت داده
دستورات SQL به شما کمک می کنند اطلاعات پایگاه داده را بازیابی، پالایش، مرتب سازی، گروه بندی و به روزرسانی کنید. برای شروع، SELECT و WHERE را تمرین کنید؛ سپس DISTINCT، ORDER BY، GROUP BY و JOIN را بیاموزید و در نهایت با INSERT، UPDATE و DELETE کار کنید. مهم ترین اصل در اجرای تغییرها، بررسی دقیق شرط ها و شناخت رفتار سامانه پایگاه داده است. با تمرین روی داده های آزمایشی، کاربرد
دستورات SQL در پروژه های واقعی روشن تر می شود و می توانید آن ها را با اطمینان بیشتری در مسیر
طراحی سایت به کار ببرید.
سوالات متداول دستورات SQL
SQL چیست و چه کاربردی دارد؟
SQL زبانی برای کار با پایگاه داده های رابطه ای است. با آن می توان داده ها را جستجو کرد، اطلاعات تازه افزود، رکوردها را تغییر داد، نتیجه ها را گروه بندی کرد و چند جدول مرتبط را به هم پیوند داد.
تفاوت WHERE و HAVING چیست؟
WHERE ردیف ها را پیش از گروه بندی فیلتر می کند. HAVING پس از GROUP BY برای فیلتر کردن گروه ها، معمولا بر اساس نتیجه تابع هایی مانند COUNT یا SUM، به کار می رود.
تفاوت JOIN و UNION چیست؟
JOIN ستون های مرتبط از جدول های مختلف را در کنار هم قرار می دهد. UNION نتیجه پرس وجوهای سازگار را به صورت مجموعه ای از ردیف ها ترکیب می کند و معمولا ردیف های تکراری را حذف می کند؛ UNION ALL تکرارها را نگه می دارد.
چگونه از حذف یا ویرایش ناخواسته اطلاعات جلوگیری کنیم؟
پیش از اجرای UPDATE یا DELETE، شرط WHERE را با یک دستور SELECT آزمایش کنید و رکوردهای انتخاب شده را بررسی کنید. برای عملیات حساس از نسخه پشتیبان یا تراکنش مناسب استفاده کنید و دستور را ابتدا در محیط آزمایشی بسنجید.
آیا همه پایگاه های داده از دستورات SQL یکسان پشتیبانی می کنند؟
بسیاری از دستورهای پایه مانند SELECT و WHERE در سامانه های مختلف مشترک هستند، اما جزئیات نحوی و قابلیت هایی مانند TOP، LIMIT، SELECT INTO و بعضی توابع ممکن است متفاوت باشند. مستندات پایگاه داده مورد استفاده را بررسی کنید.