🛢️ Unit 2 – SQL से Database Query · Lesson 05
Relations पर Operations और Joins
दो club tables
CHESS और QUIZ में school के दो clubs के students हैं। दोनों के columns एक जैसे हैं, इसलिए इन पर set operations चल सकते हैं।
SQL
SELECT * FROM CHESS;
Output
+--------+--------+-------+ | RollNo | Name | Class | +--------+--------+-------+ | 11 | Arnav | XII | | 14 | Bhavya | XII | | 17 | Charu | XI | | 21 | Daksh | XI | +--------+--------+-------+
SQL
SELECT * FROM QUIZ;
Output
+--------+--------+-------+ | RollNo | Name | Class | +--------+--------+-------+ | 14 | Bhavya | XII | | 19 | Esha | XII | | 21 | Daksh | XI | +--------+--------+-------+
UNION
UNION किसी भी table में मौजूद rows देता है; duplicates एक बार आते हैं।
SQL
SELECT Name FROM CHESS UNION SELECT Name FROM QUIZ ORDER BY Name;
Output
+--------+ | Name | +--------+ | Arnav | | Bhavya | | Charu | | Daksh | | Esha | +--------+
INTERSECT
INTERSECT दोनों tables में common rows देता है – दोनों clubs वाले students।
SQL
SELECT Name FROM CHESS INTERSECT SELECT Name FROM QUIZ ORDER BY Name;
Output
+--------+ | Name | +--------+ | Bhavya | | Daksh | +--------+
SQL
SELECT Name FROM CHESS WHERE RollNo IN (SELECT RollNo FROM QUIZ);
Output
+--------+ | Name | +--------+ | Bhavya | | Daksh | +--------+
MINUS / EXCEPT
MINUS (MySQL में EXCEPT) पहली table की वे rows देता है जो दूसरी में नहीं – सिर्फ़ Chess वाले students।
SQL
SELECT Name FROM CHESS EXCEPT SELECT Name FROM QUIZ ORDER BY Name;
Output
+-------+ | Name | +-------+ | Arnav | | Charu | +-------+
SQL
SELECT Name FROM CHESS WHERE RollNo NOT IN (SELECT RollNo FROM QUIZ);
Output
+-------+ | Name | +-------+ | Arnav | | Charu | +-------+
Cartesian product
FROM में बिना join condition के दो tables लिखने पर एक की हर row दूसरी की हर row से जुड़ती है: 4 × 3 = 12 rows।
SQL
SELECT COUNT(*) FROM CHESS, QUIZ;
Output
+----------+ | COUNT(*) | +----------+ | 12 | +----------+
SQL
SELECT C.Name, Q.Name FROM CHESS C, QUIZ Q WHERE C.Class = 'XI' AND Q.Class = 'XII' ORDER BY C.Name, Q.Name;
Output
+-------+--------+ | Name | Name | +-------+--------+ | Charu | Bhavya | | Charu | Esha | | Daksh | Bhavya | | Daksh | Esha | +-------+--------+
दो relations: joins
SQL
SELECT * FROM SUPPLIER;
Output
+-------+---------------+--------+ | SupID | SupName | City | +-------+---------------+--------+ | S1 | Kiran Traders | Delhi | | S2 | Om Supplies | Indore | | S3 | Star Mart | Kochi | +-------+---------------+--------+
SQL
SELECT * FROM PRODUCT;
Output
+-----+------------+-------+-------+ | PID | PName | Price | SupID | +-----+------------+-------+-------+ | 1 | Pencil Box | 120 | S1 | | 2 | Crayons | 80 | S2 | | 3 | Stapler | 150 | S1 | | 4 | Glue Stick | 35 | S3 | +-----+------------+-------+-------+
शर्त PRODUCT.SupID = SUPPLIER.SupID सिर्फ़ मेल खाते जोड़े रखती है – यह equi-join है।
SQL
SELECT PName, Price, SupName FROM PRODUCT, SUPPLIER WHERE PRODUCT.SupID = SUPPLIER.SupID ORDER BY PName;
Output
+------------+-------+---------------+ | PName | Price | SupName | +------------+-------+---------------+ | Crayons | 80 | Om Supplies | | Glue Stick | 35 | Star Mart | | Pencil Box | 120 | Kiran Traders | | Stapler | 150 | Kiran Traders | +------------+-------+---------------+
SQL
SELECT P.PName, S.City FROM PRODUCT AS P JOIN SUPPLIER AS S ON P.SupID = S.SupID WHERE P.Price > 100 ORDER BY P.PName;
Output
+------------+-------+ | PName | City | +------------+-------+ | Pencil Box | Delhi | | Stapler | Delhi | +------------+-------+
SQL
SELECT PName, SupName FROM PRODUCT NATURAL JOIN SUPPLIER ORDER BY PName;
Output
+------------+---------------+ | PName | SupName | +------------+---------------+ | Crayons | Om Supplies | | Glue Stick | Star Mart | | Pencil Box | Kiran Traders | | Stapler | Kiran Traders | +------------+---------------+
GROUP BY के साथ join
SQL
SELECT S.SupName, COUNT(*) AS Items, SUM(P.Price) AS Total FROM PRODUCT P, SUPPLIER S WHERE P.SupID = S.SupID GROUP BY S.SupName ORDER BY S.SupName;
Output
+---------------+-------+-------+ | SupName | Items | Total | +---------------+-------+-------+ | Kiran Traders | 2 | 270 | | Om Supplies | 1 | 80 | | Star Mart | 1 | 35 | +---------------+-------+-------+
Set operations के नियम
- दोनों SELECTs में columns की संख्या, क्रम और types मेल खाएँ।
- Result में column names पहले SELECT से आते हैं।
- UNION duplicates हटाता है; UNION ALL रखता है।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
UNION, INTERSECT और MINUS के लिए क्या ज़रूरी है?
दोनों SELECT statements एक जैसी संख्या में और मेल खाते data types वाले columns लौटाएँ (union-compatible relations)।
क्या MySQL MINUS support करता है?
MySQL 8.0.31 और बाद के versions EXCEPT (MINUS का SQL नाम) और INTERSECT support करते हैं। पुराने versions में sub-query के साथ NOT IN और IN इस्तेमाल करें, जो इस page पर दिखाया है।
Cartesian product की degree और cardinality क्या होती है?
Degree = दोनों tables की degrees का जोड़; cardinality = उनकी cardinalities का गुणनफल।
