مبانی دادهها: بازخوانی مفاهیم SQL با تمرینهای کاربردی
در این مقاله از صفر تا پیشرفته، مفاهیم اساسی SQL را با مثالهای واقعی و تمرینهای تعاملی بازخوانی میکنیم. مناسب برای مبتدیان و کسانی که میخواهند مهارتهایشان را تازهسازی کنند.
مقدمه
SQL (مخفف Structured Query Language) یکی از قدیمیترین و پرکاربردترین زبانهای برنامهنویسی دنیاست. از سال ۱۹۷۴ تاکنون، تقریباً هر سیستم مدیریت پایگاه دادهای از آن استفاده میکند — از MySQL و PostgreSQL گرفته تا SQLite و SQL Server.
در این مقاله، با یک پایگاه داده فرضی فروشگاه آنلاین کار میکنیم. این پایگاه داده شامل جداول کاربران، محصولات و سفارشات است.
دستور SELECT
بازیابی داده از پایگاه داده
دستور SELECT اساسیترین دستور SQL است و برای خواندن داده از یک یا چند جدول استفاده میشود.
-- انتخاب تمام ستونها
SELECT * FROM users;
-- انتخاب ستونهای خاص
SELECT name, email, city FROM users;
-- استفاده از alias برای نامگذاری مجدد
SELECT name AS نام_کاربر, email AS ایمیل FROM users;
-- حذف تکرار با DISTINCT
SELECT DISTINCT city FROM users;
در محیطهای واقعی، از SELECT * پرهیز کنید. فقط ستونهایی که نیاز دارید را انتخاب کنید تا سرعت کوئری بالاتر برود.
کوئریای بنویسید که نام، قیمت و دستهبندی تمام محصولات را نمایش دهد.
لیستی از شهرهای منحصربهفردی که کاربران در آن زندگی میکنند را بازیابی کنید.
فیلتر با WHERE
محدود کردن نتایج با شرطها
بند WHERE به ما اجازه میدهد فقط رکوردهایی را بازیابی کنیم که شرط خاصی را برآورده میکنند.
-- فیلتر ساده
SELECT * FROM products WHERE price > 100000;
-- چند شرط با AND
SELECT * FROM products
WHERE price > 50000 AND category = 'electronics';
-- شرط OR
SELECT * FROM users
WHERE city = 'تهران' OR city = 'اصفهان';
-- بازه با BETWEEN
SELECT * FROM products
WHERE price BETWEEN 100000 AND 500000;
-- جستجوی متن با LIKE
SELECT * FROM users
WHERE name LIKE 'علی%'; -- شروعشونده با علی
-- بررسی مقادیر NULL
SELECT * FROM users WHERE email IS NOT NULL;
در SQL میتوانید از: = برابری، != نابرابری، > بزرگتر، < کمتر، >= بزرگتر یا مساوی، <= کمتر یا مساوی استفاده کنید.
محصولاتی که موجودی آنها (stock) کمتر از ۱۰ عدد است و قیمتشان بیشتر از ۲۰۰,۰۰۰ تومان است را پیدا کنید.
کاربرانی که ایمیلشان با gmail.com تمام میشود را پیدا کنید.
اتصال جداول با JOIN
ترکیب داده از چند جدول
یکی از قدرتمندترین ویژگیهای SQL، توانایی ترکیب داده از چند جدول با JOIN است. این دستور به ما اجازه میدهد روابط بین جداول را در کوئریهایمان استفاده کنیم.
-- INNER JOIN: سفارشات به همراه اطلاعات کاربر
SELECT
users.name AS نام_کاربر,
products.name AS نام_محصول,
orders.quantity,
orders.order_date
FROM orders
INNER JOIN users ON orders.user_id = users.id
INNER JOIN products ON orders.product_id = products.id;
-- LEFT JOIN: تمام کاربران حتی آنهایی که سفارش ندارند
SELECT
users.name,
COUNT(orders.id) AS تعداد_سفارش
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.id, users.name;
لیست تمام سفارشات را به همراه نام کاربر و نام محصول نمایش دهید.
کاربرانی که هیچ سفارشی ثبت نکردهاند را پیدا کنید.
گروهبندی با GROUP BY
تجمیع و آنالیز داده
دستور GROUP BY رکوردها را بر اساس یک یا چند ستون گروهبندی میکند و معمولاً با توابع تجمیعی مثل COUNT، SUM، AVG، MAX و MIN استفاده میشود.
-- تعداد کاربران در هر شهر
SELECT city, COUNT(*) AS تعداد_کاربر
FROM users
GROUP BY city
ORDER BY تعداد_کاربر DESC;
-- مجموع فروش به ازای هر دستهبندی
SELECT
p.category,
SUM(o.quantity) AS تعداد_فروش,
AVG(p.price) AS میانگین_قیمت
FROM orders o
INNER JOIN products p ON o.product_id = p.id
GROUP BY p.category;
-- فیلتر گروهها با HAVING
SELECT city, COUNT(*) AS تعداد
FROM users
GROUP BY city
HAVING COUNT(*) > 5; -- فقط شهرهایی با بیش از 5 کاربر
WHERE قبل از گروهبندی اعمال میشود و روی رکوردهای تکی کار میکند. HAVING بعد از GROUP BY اعمال میشود و روی گروهها فیلتر میزند.
محصولاتی که بیش از ۵۰ بار سفارش داده شدهاند را به همراه تعداد کل سفارش نمایش دهید.
میانگین قیمت محصولات را در هر دستهبندی حساب کنید و فقط دستههایی نمایش دهید که میانگین قیمتشان بیشتر از ۱۵۰,۰۰۰ تومان است.
درج داده با INSERT
اضافه کردن رکورد جدید
دستور INSERT INTO برای اضافه کردن رکوردهای جدید به یک جدول استفاده میشود.
-- درج یک رکورد
INSERT INTO users (name, email, city, created_at)
VALUES ('علی احمدی', 'ali@example.com', 'تهران', NOW());
-- درج چندین رکورد بهصورت همزمان
INSERT INTO products (name, price, category, stock)
VALUES
('لپتاپ دل', 35000000, 'electronics', 15),
('موس بیسیم', 850000, 'accessories', 50),
('مانیتور ۲۴ اینچ', 12000000, 'electronics', 8);
-- درج داده از یک جدول دیگر
INSERT INTO archive_orders (user_id, product_id, quantity)
SELECT user_id, product_id, quantity
FROM orders
WHERE order_date < '2024-01-01';
یک محصول جدید با نام «کیبورد مکانیکی»، قیمت ۲,۵۰۰,۰۰۰ تومان، دستهبندی accessories و موجودی ۳۰ عدد به جدول products اضافه کنید.
بروزرسانی با UPDATE
تغییر دادههای موجود
دستور UPDATE برای تغییر مقادیر رکوردهای موجود در جدول استفاده میشود.
همیشه قبل از UPDATE یک SELECT با همان WHERE اجرا کنید تا مطمئن شوید کدام رکوردها تغییر میکنند. فراموش کردن WHERE باعث تغییر تمام رکوردها میشود!
-- بروزرسانی یک رکورد
UPDATE users
SET city = 'مشهد', email = 'new@example.com'
WHERE id = 5;
-- بروزرسانی با شرط پیچیده
UPDATE products
SET price = price * 1.1 -- افزایش ۱۰ درصدی قیمت
WHERE category = 'electronics' AND stock > 0;
-- بروزرسانی بر اساس JOIN
UPDATE products p
INNER JOIN (
SELECT product_id, SUM(quantity) AS total_sold
FROM orders
GROUP BY product_id
) sales ON p.id = sales.product_id
SET p.stock = p.stock - sales.total_sold;
قیمت تمام محصولات دستهبندی «electronics» که موجودی آنها کمتر از ۵ عدد است را ۱۵ درصد کاهش دهید.
حذف با DELETE
پاک کردن رکوردها از جدول
دستور DELETE رکوردهایی را که شرط مشخصی را دارند از جدول حذف میکند.
-- حذف یک رکورد خاص
DELETE FROM users WHERE id = 10;
-- حذف با شرط پیچیده
DELETE FROM orders
WHERE order_date < '2023-01-01'
AND quantity = 0;
-- حذف با استفاده از subquery
DELETE FROM products
WHERE id NOT IN (
SELECT DISTINCT product_id FROM orders
);
-- حذف محصولاتی که هیچ سفارشی ندارند
-- TRUNCATE - پاک کردن همه رکوردها (سریعتر از DELETE)
TRUNCATE TABLE temp_logs;
DELETE میتواند با WHERE رکوردهای خاص را حذف کند و قابل برگشت است (در یک transaction). TRUNCATE همه رکوردها را یکجا پاک میکند و معمولاً قابل برگشت نیست.
سفارشاتی که تعداد (quantity) آنها صفر است را از جدول orders حذف کنید.
تمرینهای جامع
ترکیب مفاهیم برای حل مسائل واقعی
حالا وقت آن رسیده که تمام مفاهیمی که یاد گرفتیم را ترکیب کنیم. این تمرینها شبیه مسائل واقعی هستند که در کار روزمره با آنها روبرو میشوید.
گزارشی تهیه کنید که برای هر کاربر: نام، شهر، تعداد سفارشات، مجموع ارزش خریدها (قیمت × تعداد) را نشان دهد. فقط کاربرانی که بیش از ۲ سفارش دارند را نمایش دهید و بر اساس مجموع خرید نزولی مرتب کنید.
جمعبندی
در این مقاله با مهمترین دستورات SQL آشنا شدیم: از SELECT ساده تا JOINهای پیچیده، از GROUP BY برای تحلیل داده تا INSERT، UPDATE و DELETE برای مدیریت داده. تسلط بر SQL نیازمند تمرین مداوم است — پیشنهاد میکنیم یک پایگاه داده واقعی بسازید و با دادههای واقعی تمرین کنید.
برچسب:SQL, پایگاه داده, داده, دیتابیس







