رفتن به محتوای اصلی
iServer24 | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش استفاده از کوئری‌های تو در تو (Nested Queries) در SQL

آموزش استفاده از کوئری‌های تو در تو (Nested Queries) در SQL

زبان SQL برای مدیریت داده‌ها در سیستم‌های مدیریت پایگاه داده رابطه‌ای (RDBMS) استفاده می‌شود. یکی از قابلیت‌های مهم SQL، امکان نوشتن یک کوئری داخل کوئری دیگر است که به آن Subquery یا Nested Query گفته می‌شود. در این حالت، یک دستور SELECT داخل پرانتز قرار می‌گیرد و درون یک دستور اصلی مانند SELECT، INSERT یا DELETE استفاده می‌شود.

زبان SQL برای مدیریت داده‌ها در سیستم‌های مدیریت پایگاه داده رابطه‌ای (RDBMS) استفاده می‌شود. یکی از قابلیت‌های مهم SQL، امکان نوشتن یک کوئری داخل کوئری دیگر است که به آن Subquery یا Nested Query گفته می‌شود. در این حالت، یک دستور SELECT داخل پرانتز قرار می‌گیرد و درون یک دستور اصلی مانند SELECT، INSERT یا DELETE استفاده می‌شود.

در این آموزش یاد می‌گیرید چطور از کوئری‌های تو در تو در دستورات SELECT، INSERT و DELETE استفاده کنید. همچنین با توابع تجمیعی (Aggregate Functions) در Subquery آشنا می‌شوید و نحوه مقایسه داده‌ها با استفاده از شرط‌های WHERE و LIKE را یاد خواهید گرفت.


پیش‌نیازها

برای انجام این آموزش، به یک سیستم دارای پایگاه داده رابطه‌ای که از SQL پشتیبانی کند نیاز دارید. مثال‌های این راهنما بر اساس محیط زیر تست شده‌اند:

توجه: هرچند بیشتر سیستم‌های پایگاه داده از SQL استفاده می‌کنند، اما ممکن است تفاوت‌های جزئی در سینتکس یا خروجی وجود داشته باشد.


اتصال به MySQL و ساخت دیتابیس نمونه

ابتدا وارد MySQL شوید:

mysql -u username -p
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساخت دیتابیس:

2 خط
CREATE DATABASE zooDB;
USE zooDB;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

ساخت جدول نمونه

در این آموزش از جدولی به نام guests استفاده می‌کنیم که اطلاعات بازدیدکنندگان یک باغ‌وحش را نگه می‌دارد.

10 خط
CREATE TABLE guests (
guest_id int,
first_name varchar(30),
last_name varchar(30),
guest_type varchar(15),
membership_type varchar(30),
membership_cost decimal(5,2),
total_visits int,
PRIMARY KEY (guest_id)
);
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

سپس داده‌های نمونه وارد می‌کنیم (چند رکورد نمونه کافی است).


استفاده از Nested Query در SELECT

فرض کنید می‌خواهید مهمانانی را پیدا کنید که تعداد بازدیدشان از میانگین بازدیدها بیشتر است.

این کوئری اشتباه است:

3 خط
SELECT first_name, last_name, total_visits
FROM guests
WHERE total_visits > AVG(total_visits);
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

خطا به این دلیل است که توابع تجمیعی مثل AVG() نمی‌توانند مستقیماً در شرط WHERE استفاده شوند.

روش درست با Subquery

4 خط
SELECT first_name, last_name, total_visits
FROM guests
WHERE total_visits >
(SELECT AVG(total_visits) FROM guests);
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

در اینجا ابتدا Subquery اجرا شده و میانگین تعداد بازدیدها محاسبه می‌شود، سپس کوئری اصلی رکوردهای بزرگ‌تر از آن مقدار را نمایش می‌دهد.


استفاده از Nested Query در INSERT

می‌خواهیم اطلاعات برخی مهمانان را به جدول جدیدی منتقل کنیم و برای آن‌ها تخفیف اعمال کنیم.

ساخت جدول جدید

9 خط
CREATE TABLE upgrade_guests (
guest_id int,
first_name varchar(30),
last_name varchar(30),
membership_type varchar(30),
membership_cost decimal(5,2),
total_visits int,
PRIMARY KEY (guest_id)
);
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

درج داده با Subquery

5 خط
INSERT INTO upgrade_guests
SELECT guest_id, first_name, last_name, membership_type,
(membership_cost * 0.85), total_visits
FROM guests
WHERE membership_type LIKE '%Resident%';
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

در اینجا:

  • Subquery داده‌ها را از جدول guests می‌گیرد

  • قیمت عضویت در 0.85 ضرب شده (۱۵٪ تخفیف)

  • فقط اعضایی که نوع عضویت آن‌ها شامل "Resident" است انتخاب می‌شوند


استفاده از Nested Query در DELETE

حالا می‌خواهیم کاربرانی را حذف کنیم که تعداد بازدیدشان از میانگین بیشتر است.

3 خط
DELETE FROM upgrade_guests
WHERE total_visits >
(SELECT AVG(total_visits) FROM guests);
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

این دستور فقط از جدول upgrade_guests حذف می‌کند و به جدول اصلی کاری ندارد.

برای مشاهده نتیجه:

SELECT * FROM upgrade_guests ORDER BY total_visits;
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

نوع عبارتکاربرد Nested Query
SELECTفیلتر کردن نتایج بر اساس خروجی یک کوئری دیگر
INSERTدرج داده در یک جدول بر اساس نتیجه‌ی کوئری روی جدول دیگر
DELETEحذف رکوردهایی که در نتیجه‌ی یک زیرکوئری مشخص می‌شوند

جمع‌بندی

کوئری‌های تو در تو در SQL بسیار قدرتمند هستند چون:

  • امکان انجام چند مرحله پردازش داده در یک کوئری را می‌دهند

  • نیاز به اجرای چند کوئری جداگانه را کاهش می‌دهند

  • در دستورات SELECT، INSERT و DELETE کاربرد دارند

  • برای تحلیل‌های پیشرفته و فیلتر کردن دقیق داده‌ها بسیار مفیدند

یادگیری Subquery یکی از مهارت‌های کلیدی برای کار حرفه‌ای با SQL و پایگاه داده است.

زیرساخت ابری برای اجرای همین آموزش

سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

ادامه یادگیری:Docker·Ubuntu·VPS