ضرب دکارتی Cartesian در SQL
ضرب دکارتی (Cartesian Product) در SQL زمانی اتفاق میافتد که دو جدول بدون هیچ شرطی (بدون استفاده از WHERE
یا JOIN
) با هم ترکیب شوند. در این حالت، هر سطر از جدول اول با هر سطر از جدول دوم ترکیب میشود و نتیجه تعداد سطرهای جدول اول ضرب در تعداد سطرهای جدول دوم خواهد بود.
مثال:
فرض کنید دو جدول به نامهای A
و B
داریم:
جدول A:
id | name |
---|---|
1 | Ali |
2 | Reza |
جدول B:
id | city |
---|---|
1 | Tehran |
2 | Mashhad |
اگر بخواهیم ضرب دکارتی این دو جدول را انجام دهیم، کوئری SQL به صورت زیر خواهد بود:
SELECT * FROM A, B;
یا به صورت مدرنتر:
SELECT * FROM A CROSS JOIN B;
نتیجه:
id | name | id | city |
---|---|---|---|
1 | Ali | 1 | Tehran |
1 | Ali | 2 | Mashhad |
2 | Reza | 1 | Tehran |
2 | Reza | 2 | Mashhad |
نکات مهم:
- تعداد سطرهای نتیجه: تعداد سطرهای نتیجه برابر است با تعداد سطرهای جدول اول ضرب در تعداد سطرهای جدول دوم. در مثال بالا، ۲ سطر در جدول A و ۲ سطر در جدول B داریم، بنابراین نتیجه ۴ سطر خواهد داشت.
- کاربرد: ضرب دکارتی معمولاً زمانی استفاده میشود که نیاز داریم تمام ترکیبهای ممکن بین سطرهای دو جدول را ایجاد کنیم. با این حال، در بسیاری از موارد، استفاده از
JOIN
با شرط مناسب بهتر است تا از ایجاد نتایج ناخواسته جلوگیری شود. - هزینه محاسباتی: ضرب دکارتی میتواند بسیار پرهزینه باشد، به خصوص اگر جداول بزرگ باشند، زیرا تعداد سطرهای نتیجه به سرعت افزایش مییابد.
مثال با CROSS JOIN
:
SELECT * FROM A CROSS JOIN B;
این کوئری همان نتیجه قبلی را تولید میکند، اما استفاده از CROSS JOIN
واضحتر است و نشان میدهد که قصد انجام ضرب دکارتی دارید.
توضیحات بیشتر راجع به ضرب کارتزین
در اینجا توضیحات بیشتری درباره ضرب دکارتی (Cartesian Product) در SQL ارائه میدهم تا مفهوم آن را بهتر درک کنید.
ضرب دکارتی چیست؟
ضرب دکارتی یک عمل ریاضی است که در آن هر عضو از یک مجموعه با هر عضو از مجموعه دیگر ترکیب میشود. در پایگاه داده و SQL، این مفهوم زمانی اتفاق میافتد که دو جدول بدون هیچ شرطی (WHERE
یا JOIN
) با هم ترکیب شوند. نتیجه این عمل، ترکیب هر سطر از جدول اول با هر سطر از جدول دوم است.
مثال ساده
فرض کنید دو جدول داریم:
جدول A
(کاربران):
id | name |
---|---|
1 | Ali |
2 | Reza |
جدول B
(شهرها):
id | city |
---|---|
1 | Tehran |
2 | Mashhad |
اگر ضرب دکارتی این دو جدول را انجام دهیم، کوئری SQL به صورت زیر خواهد بود:
SELECT * FROM A, B;
یا به صورت مدرنتر:
SELECT * FROM A CROSS JOIN B;
نتیجه ضرب دکارتی
نتیجه این کوئری به صورت زیر خواهد بود:
id | name | id | city |
---|---|---|---|
1 | Ali | 1 | Tehran |
1 | Ali | 2 | Mashhad |
2 | Reza | 1 | Tehran |
2 | Reza | 2 | Mashhad |
تعداد سطرهای نتیجه
تعداد سطرهای حاصل از ضرب دکارتی برابر است با تعداد سطرهای جدول اول × تعداد سطرهای جدول دوم.
در مثال بالا:
- جدول
A
دارای ۲ سطر است. - جدول
B
دارای ۲ سطر است. - بنابراین، نتیجه ضرب دکارتی دارای ۲ × ۲ = ۴ سطر خواهد بود.
کاربرد ضرب دکارتی
ضرب دکارتی در SQL معمولاً در موارد زیر استفاده میشود:
- ایجاد تمام ترکیبهای ممکن: زمانی که نیاز دارید تمام ترکیبهای ممکن بین سطرهای دو جدول را ایجاد کنید.
- تولید دادههای تست: برای ایجاد دادههای تستی با ترکیبهای مختلف.
- محاسبات ماتریسی: در برخی موارد، ضرب دکارتی برای انجام محاسبات ماتریسی یا ترکیب دادهها استفاده میشود.
مثال کاربردی
فرض کنید میخواهید تمام ترکیبهای ممکن بین کاربران و شهرها را ایجاد کنید تا ببینید هر کاربر میتواند در کدام شهرها باشد. در این حالت، ضرب دکارتی مفید است.
SELECT A.name, B.city
FROM A
CROSS JOIN B;
نتیجه:
name | city |
---|---|
Ali | Tehran |
Ali | Mashhad |
Reza | Tehran |
Reza | Mashhad |
هزینه محاسباتی ضرب دکارتی
ضرب دکارتی میتواند بسیار پرهزینه باشد، به خصوص اگر جداول بزرگ باشند. زیرا:
- تعداد سطرهای نتیجه به سرعت افزایش مییابد.
- اگر جدول اول ۱۰۰۰ سطر و جدول دوم ۱۰۰۰ سطر داشته باشد، نتیجه ۱,۰۰۰,۰۰۰ سطر خواهد داشت!
- بنابراین، استفاده از ضرب دکارتی باید با دقت انجام شود.
تفاوت ضرب دکارتی با JOIN
- ضرب دکارتی: هیچ شرطی برای ترکیب سطرها وجود ندارد. هر سطر از جدول اول با هر سطر از جدول دوم ترکیب میشود.
- JOIN: معمولاً با یک شرط (
ON
یاWHERE
) انجام میشود و فقط سطرهایی که شرط را برآورده میکنند، ترکیب میشوند.
مثال با INNER JOIN
:
SELECT A.name, B.city
FROM A
INNER JOIN B ON A.id = B.id;
در این حالت، فقط سطرهایی که id
آنها در دو جدول یکسان است، ترکیب میشوند.
جمعبندی
- ضرب دکارتی هر سطر از یک جدول را با هر سطر از جدول دیگر ترکیب میکند.
- تعداد سطرهای نتیجه برابر است با تعداد سطرهای جدول اول × تعداد سطرهای جدول دوم.
- از ضرب دکارتی برای ایجاد تمام ترکیبهای ممکن استفاده میشود.
- استفاده از آن باید با دقت انجام شود، زیرا میتواند منجر به نتایج بسیار بزرگ و پرهزینه شود.
دیدگاه شما