Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में दो टेबल पर एकल SELECT क्वेरी करना (कार्टेशियन उत्पाद)

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;
  1. - MySQL में UNION ALL का उपयोग करके एक ही क्वेरी में दो टेबल में रिकॉर्ड्स डालना

    MySQL में UNION ALL के साथ बहु-टेबल INSERT MySQL INSERT ... SELECT के साथ UNION ALL का उपयोग करके एक ही क्वेरी में एक स्रोत टेबल से डेटा चुनकर दो (या अधिक) लक्ष्य टेबल में डाल सकता है। उदाहरण: एक स्रोत से दो टेबल में डालना SELECT * FROM DemoTable2; +-------+ | Name | +-------+ | Chris | +-------+

  1. - MySQL में INSERT INTO SELECT UNION ALL से एक क्वेरी में दो टेबल में चयन और सम्मिलन

    MySQL में INSERT INTO ... SELECT ... UNION ALL ... SELECT का उपयोग करके एक ही क्वेरी में एक टेबल से डेटा चुनकर दूसरी टेबल में एकाधिक पंक्तियां डाल सकते हैं। उदाहरण 1. लक्ष्य टेबल बनाएं ); 2. स्रोत टेबल बनाएं INSERT INTO DemoTable2 VALUES(Chris); 3. एक क्वेरी में चयन और सम्मिलन SELECT Name, 98

  1. - MySQL में एक क्वेरी से दो कॉलम कैसे अपडेट करें?

    MySQL में एक ही UPDATE स्टेटमेंट में एकाधिक कॉलम अपडेट करने के लिए, SET क्लॉज़ में कॉलम को कॉमा से अलग करके सूचीबद्ध करें। यह एटॉमिक ऑपरेशन सुनिश्चित करता है और क्वेरी ओवरहेड कम करता है। उदाहरण: FirstName और LastName एक साथ अपडेट करना डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1909 ( Id