मुख्य सामग्री पर जाएं
मॉड्यूल 3 · पाठ 1 का 4पाठ्यक्रम में 9/57~12 min
मॉड्यूल पाठ (1/4)

दो तालिकाओं को जोड़ना: आंतरिक जोड़

अब तक हमने एक समय में एक ही तालिका पढ़ी है। हालाँकि, वास्तविक दुनिया में, डेटा है कई संबंधित तालिकाओं में फैला हुआ: हमारे डेटासेट में, उदाहरण के लिए, प्रत्येक कर्मचारी के पास department_id है जो departments तालिका की ओर इशारा करता है। देखना विभाग का नाम (न कि केवल इसका id) हमें इसमें शामिल होने की आवश्यकता है दो टेबल. ऐसा करने वाले ऑपरेटर को JOIN कहा जाता है।

मूल वाक्यविन्यास

SQL
SELECT columns
FROM   table_a
JOIN   table_b ON table_a.x = table_b.y;

अंग्रेजी में पढ़ें: "table_a लें, प्रत्येक को जोड़कर इसके साथ table_b जोड़ें पंक्ति जहां table_a.x table_b.y" के बराबर है। परिणाम एक नया वर्चुअल है तालिका दोनों के कॉलम के साथ।

SQL
-- For each employee, also show the name of their department:
SELECT employees.first_name,
       employees.last_name,
       departments.name AS dipartimento
FROM   employees
JOIN   departments ON employees.department_id = departments.id;

ON के बाद के भाग को जुड़ने की स्थिति कहा जाता है: यही बताता है इंजन "ये दो पंक्तियाँ लगभग एक ही चीज़ हैं, उन्हें पंक्तिबद्ध करें"। में अधिकांश मामलों में यह प्राथमिक कुंजी और विदेशी कुंजी के बीच समानता है कुंजी (यहां departments.id और employees.department_id)।

इनर जॉइन, विस्तार से

पूरा कीवर्ड INNER JOIN है, लेकिन JOIN अपने आप में मानक है पर्यायवाची. "आंतरिक" का अर्थ है कि केवल वे पंक्तियाँ जिनमें दोनों में मेल है तालिकाएँ लौटा दी गई हैं:

  • यदि किसी कर्मचारी के पास department_id = NULL है, तो वे प्रकट नहीं होंगे परिणाम;
  • यदि किसी विभाग में कोई कर्मचारी नहीं है, तो यह परिणाम में प्रदर्शित नहीं होगा।

योग्यता स्तंभ नाम

जब दो तालिकाओं में एक ही नाम के कॉलम हों (यहां दोनों में id हैं, और यदि आप इसके बारे में सोचते हैं तो दोनों में name है), आपको यह निर्दिष्ट करना होगा कौन सी तालिका table.column लिखने से एक कॉलम आता है। लंबे नामों को दोहराने से बचने के लिए, उपनामों का अक्सर उपयोग किया जाता है (आपने उन्हें मॉड्यूल 2 में देखा था):

SQL
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM   employees   AS e
JOIN   departments AS d ON e.department_id = d.id;

AS यहां भी वैकल्पिक है: FROM employees e उसी तरह काम करता है।

इसे अजमाएं

व्यायाम#sql.m3.l1.e1
प्रयास: 0लोड हो रहा है...

इंजेगनेरिया विभाग में प्रत्येक कर्मचारी के लिए, पहला नाम (प्रथम_नाम), अंतिम नाम (अंतिम_नाम) और विभाग का शहर (विभाग.शहर) दिखाएं। तीन कॉलम, प्रति कर्मचारी एक पंक्ति।

संपादक लोड हो रहा है...
संकेत दिखाएँ

e.department_id और d.id के बीच समानता के साथ ON शर्त को पूरा करें, फिर तीसरे कॉलम के रूप में d.city चुनें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम की समीक्षा करें

व्यायाम#sql.m3.l1.e2
प्रयास: 0लोड हो रहा है...

मिलानो स्थित विभाग में काम करने वाले सभी कर्मचारियों का पहला नाम (पहला_नाम) और अंतिम नाम (अंतिम_नाम) सूचीबद्ध करें। विभागों.शहर पर फ़िल्टर करें, विभाग के नाम पर नहीं।

संपादक लोड हो रहा है...
संकेत दिखाएँ

पिछले अभ्यास के समान ही JOIN, लेकिन विभाग के नाम के बजाय d.city = 'मिलानो' पर फ़िल्टर करें।

3 प्रयासों के बाद समाधान उपलब्ध है