यह लेख CROSS JOIN
. का एक सिंहावलोकन प्रदान करता है SQL में, साथ ही साथ कुछ बुनियादी उदाहरण।
एसक्यूएल CROSS JOIN
(या FULL OUTER JOIN
) उन पंक्तियों को लौटाता है जो पहली तालिका से प्रत्येक पंक्ति को दूसरी तालिका से प्रत्येक पंक्ति के साथ जोड़ती हैं।
दूसरे शब्दों में, यह जॉइन में टेबल से पंक्तियों का कार्टेशियन उत्पाद लौटाता है।
सिंटैक्स
आप FROM
. में क्रॉस जॉइन निर्दिष्ट करते हैं खंड।
वाक्य रचना इस प्रकार है:
SELECT *
FROM Table1 CROSS JOIN Table2
ON Table1.Column = Table2.Column;
उदाहरण 1
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।
नमूना डेटा
सबसे पहले, यहां वे टेबल हैं जिनका हम उदाहरण के लिए उपयोग करेंगे।
t1
तालिका:
+--------+ | col1 | |--------| | a | | b | | c | +--------+
t2
तालिका:
+--------+ | col1 | |--------| | 1 | | 2 | | 3 | +--------+
क्रॉस जॉइन क्वेरी
यहां उन दो तालिकाओं के विरुद्ध क्रॉस जॉइन करने का एक उदाहरण दिया गया है।
SELECT * FROM t1
CROSS JOIN t2;
परिणाम:
+--------+--------+ | col1 | col1 | |--------+--------| | a | 1 | | b | 1 | | c | 1 | | a | 2 | | b | 2 | | c | 2 | | a | 3 | | b | 3 | | c | 3 | +--------+--------+ (9 rows affected)
इसलिए हमारी क्वेरी 9 पंक्तियों को लौटाती है, भले ही प्रत्येक तालिका में केवल 3 पंक्तियाँ हों।
ऐसा इसलिए है क्योंकि जिस तरह से क्रॉस जुड़ता है वह काम करता है। लौटाई गई पंक्तियों की संख्या बाईं तालिका में पंक्तियों की संख्या है, जो दाएँ तालिका में पंक्तियों की संख्या से गुणा की जाती है।
देखें कि यह बाईं तालिका के माध्यम से कैसे पुनरावृति करता है, बाईं तालिका में प्रत्येक पंक्ति के लिए प्रत्येक पंक्ति को दाईं तालिका में आउटपुट करता है।
इसका निम्न कार्य करने के समान प्रभाव पड़ता है:
SELECT * FROM t1, t2
परिणाम:
+--------+--------+ | col1 | col1 | |--------+--------| | a | 1 | | b | 1 | | c | 1 | | a | 2 | | b | 2 | | c | 2 | | a | 3 | | b | 3 | | c | 3 | +--------+--------+ (9 rows affected)
उदाहरण 2
अगर हम WHERE
. जोड़ते हैं तो यहां क्या होता है हमारे क्रॉस जॉइन के लिए क्लॉज।
SELECT * FROM t1
CROSS JOIN t2
WHERE t1.col1 = 'a';
परिणाम:
+--------+--------+ | col1 | col1 | |--------+--------| | a | 1 | | a | 2 | | a | 3 | +--------+--------+ (3 rows affected)
उदाहरण 3
मान लीजिए कि हमारे पास निम्नलिखित टेबल हैं।
PetTypes
तालिका:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | | 4 | Rabbit | +-------------+-----------+ (4 rows affected)
Pets
तालिका:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
इस मामले में, Pets.PetTypeId
कॉलम PetTypes.PetTypeId
. की एक विदेशी कुंजी है कॉलम।
अब, यहां उन दो तालिकाओं पर क्रॉस जॉइन चलाने का एक उदाहरण दिया गया है, लेकिन WHERE
का उपयोग करना खंड।
SELECT
p.PetName,
pt.PetType
FROM Pets p
CROSS JOIN PetTypes pt
WHERE p.PetTypeId = pt.PetTypeId;
परिणाम:
+-----------+-----------+ | PetName | PetType | |-----------+-----------| | Fluffy | Cat | | Fetch | Dog | | Scratch | Cat | | Wag | Dog | | Tweet | Bird | | Fluffy | Dog | | Bark | Dog | | Meow | Cat | +-----------+-----------+ (8 rows affected)
WHERE
जोड़ना क्रॉस जॉइन के क्लॉज ने इसे इनर जॉइन में बदल दिया।
अगर हम WHERE
. को हटा देते हैं, तो यहां बताया गया है कि क्या होता है खंड।
SELECT
p.PetName,
pt.PetType
FROM Pets p
CROSS JOIN PetTypes pt;
परिणाम:
+-----------+-----------+ | PetName | PetType | |-----------+-----------| | Fluffy | Bird | | Fetch | Bird | | Scratch | Bird | | Wag | Bird | | Tweet | Bird | | Fluffy | Bird | | Bark | Bird | | Meow | Bird | | Fluffy | Cat | | Fetch | Cat | | Scratch | Cat | | Wag | Cat | | Tweet | Cat | | Fluffy | Cat | | Bark | Cat | | Meow | Cat | | Fluffy | Dog | | Fetch | Dog | | Scratch | Dog | | Wag | Dog | | Tweet | Dog | | Fluffy | Dog | | Bark | Dog | | Meow | Dog | | Fluffy | Rabbit | | Fetch | Rabbit | | Scratch | Rabbit | | Wag | Rabbit | | Tweet | Rabbit | | Fluffy | Rabbit | | Bark | Rabbit | | Meow | Rabbit | +-----------+-----------+ (32 rows affected)
हमें एक क्रॉस जॉइन मिलता है जो 32 पंक्तियों को लौटाता है।