MySQL में दो टेबल पर कार्टेशियन उत्पाद (क्रॉस जॉइन)
दो टेबल पर बिना जॉइन शर्त के SELECT करने से कार्टेशियन उत्पाद (क्रॉस जॉइन) उत्पन्न होता है: पहली टेबल की प्रत्येक पंक्ति दूसरी टेबल की प्रत्येक पंक्ति के साथ जुड़ती है। परिणाम पंक्तियाँ = पंक्तियाँ_टेबल1 × पंक्तियाँ_टेबल2।
उदाहरण: दो असंबंधित टेबल
mysql> CREATE TABLE DemoTable1 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
-> );
Query OK, 0 rows affected (0.54 sec)
mysql> INSERT INTO DemoTable1 VALUES (), (), ();
Query OK, 3 rows affected (0.14 sec)
mysql> SELECT * FROM DemoTable1;
+----+
| Id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set (0.00 sec)
mysql> CREATE TABLE DemoTable2 (
-> FirstName VARCHAR(10)
-> );
Query OK, 0 rows affected (0.58 sec)
mysql> INSERT INTO DemoTable2 VALUES ('Chris'), ('David'), ('Sam');
Query OK, 3 rows affected (0.10 sec)
mysql> SELECT * FROM DemoTable2;
+-----------+
| FirstName |
+-----------+
| Chris |
| David |
| Sam |
+-----------+
3 rows in set (0.00 sec)
क्रॉस जॉइन क्वेरी
mysql> SELECT Id, FirstName FROM DemoTable1, DemoTable2;
परिणाम: 3 × 3 = 9 पंक्तियाँ
+----+-----------+ | Id | FirstName | +----+-----------+ | 1 | Chris | | 2 | Chris | | 3 | Chris | | 1 | David | | 2 | David | | 3 | David | | 1 | Sam | | 2 | Sam | | 3 | Sam | +----+-----------+ 9 rows in set (0.00 sec)
स्पष्ट CROSS JOIN सिंटैक्स
SELECT Id, FirstName FROM DemoTable1 CROSS JOIN DemoTable2;
चेतावनी और सर्वोत्तम अभ्यास
- 1,000 पंक्तियाँ × 1,000 पंक्तियाँ = 1,000,000 परिणाम पंक्तियाँ
- 10,000 × 10,000 = 100 मिलियन पंक्तियाँ (मेमोरी/प्रदर्शन समस्या)
- हमेशा जॉइन शर्त का उपयोग करें जब तक कि कार्टेशियन उत्पाद जानबूझकर न हो
वैध उपयोग के मामले
- परीक्षण डेटा उत्पन्न करना: सभी संयोजन बनाएं
- रिपोर्ट मैट्रिक्स: सभी आयाम संयोजन (दिनांक × उत्पाद × क्षेत्र)
- संयोजन विश्लेषण: संभावित जोड़े ढूंढना
उचित जॉइन (संदर्भ के लिए)
-- INNER JOIN (सामान्य) SELECT t1.Id, t2.FirstName FROM DemoTable1 t1 JOIN DemoTable2 t2 ON t1.Id = t2.Id; -- संबंध कॉलम आवश्यक -- LEFT JOIN SELECT t1.Id, t2.FirstName FROM DemoTable1 t1 LEFT JOIN DemoTable2 t2 ON t1.Id = t2.Id;