คอมพิวเตอร์, การเขียนโปรแกรม
ซ้ายเข้าร่วม (SQL) - ตัวอย่างคำอธิบายรายละเอียดการใช้งานของข้อผิดพลาด
ในฐานข้อมูลเชิงสัมพันธ์ใด ๆ จริงข้อมูลทั้งหมดจะถูกกระจายในตารางที่แยกต่างหาก หลายของตารางที่กำหนดไว้ในรูปแบบการสื่อสารกับแต่ละอื่น ๆ แต่ด้วยความช่วยเหลือของ แบบสอบถาม SQL มันค่อนข้างเป็นไปได้ที่จะนำการเชื่อมโยงระหว่างข้อมูลที่ไม่ได้ฝังตัวอยู่ในวงจร นี้จะกระทำโดยการดำเนินการเชื่อมต่อเข้าร่วมซึ่งจะช่วยให้คุณสามารถสร้างความสัมพันธ์ระหว่างจำนวนของตารางใด ๆ และแม้กระทั่งการเชื่อมต่อข้อมูลที่แตกต่างกันดูเหมือน
บทความนี้จะพูดคุยเฉพาะเกี่ยวกับด้านนอกซ้ายเข้าร่วม ก่อนที่จะดำเนินการต่อไปรายละเอียดของประเภทของการเชื่อมต่อนี้เพิ่มในตารางฐานข้อมูลบางส่วน
การจัดเตรียมตารางที่จำเป็น
ยกตัวอย่างเช่นในฐานข้อมูลของเรามีข้อมูลเกี่ยวกับผู้คนและอสังหาริมทรัพย์ของพวกเขา สรุปขึ้นอยู่กับสามตาราง: ประชาชน (คน), เรียลตี้ (อสังหาริมทรัพย์), Realty_peoples (ความสัมพันธ์ของตารางคนที่จากสิ่งที่เป็นสถานที่ให้บริการ) สมมติว่าข้อมูลต่อไปนี้เก็บไว้ในตารางของคนที่:
ประชาชน | ||||
รหัส | L_name | F_name | Middle_name | วันเกิด |
1 | อีวาโน | ดาเรีย | บี | 2000/07/16 |
2 | จิน | วลา | Nikolaevich | 1986/01/29 |
3 | Evgenin | อเล็กซานเด | Federovich | 1964/04/30 |
4 | Annina | ความรัก | พี | 1989/12/31 |
5 | Gerasimovsky | หวัง | พี | 1992/03/14 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 |
8 | Sukhanovskaya | จูเลีย | วาย | 2001/01/10 |
อสังหาริมทรัพย์:
อสังหาริมทรัพย์ | |
รหัส | ที่อยู่ |
1 | เกล, UL บังเงา, d. 7 kv.6 |
2 | เกล, UL Severodvinskaya, d. 84, Q 9 BR 5 |
3 | ภูมิภาคเกล Severodvinsk, St เลนินง. 134, Q 85 |
4 | ภูมิภาคเกล Novodvinsk, UL Proletarshaya, d. 16 Q 137 |
5 | เกลสพี Terekhina, d. 89, Q 13 |
คนประชาสัมพันธ์ - ทรัพย์สิน:
Realty_peoples | ||
id_peoples | id_realty | ชนิด |
7 | 3 | กรรมสิทธิ์ร่วมรวม |
8 | 3 | กรรมสิทธิ์ร่วมรวม |
3 | 5 | คุณสมบัติ |
7 | 1 | คุณสมบัติ |
5 | 4 | ชิ้นส่วนที่พบบ่อย |
6 | 4 | ชิ้นส่วนที่พบบ่อย |
ซ้ายเข้าร่วม (SQL) - รายละเอียด
สารประกอบซ้ายมีไวยากรณ์ต่อไปนี้:
Table_A LEFT JOIN table_B [{ON กริยา} | {ใช้ spisok_ กับ tolbtsov}] |
และแผนผังดังต่อไปนี้:
และการแสดงออกนี้จะแปลว่า "เลือกทั้งหมดโดยไม่มีข้อยกเว้นสายของตารางและตาราง B เพื่อแสดงเฉพาะแถวจับคู่ของคำกริยา ถ้าตารางถูกพบในตารางสตริงคู่แล้วกรอกคอลัมน์ที่เกิด Null - ค่า"
ส่วนใหญ่มักจะเมื่อการเชื่อมต่อซ้ายได้แสดงอยู่ในการใช้จะใช้เฉพาะเมื่อชื่อคอลัมน์ที่มีการวางแผนที่จะทำให้การเชื่อมต่อเหมือนกัน
ซ้ายเข้าร่วม - ตัวอย่างของการใช้
ด้วยการเชื่อมต่อของด้านซ้ายเราสามารถมองเห็นทุกคนจากรายการถ้ามีสถานที่ให้บริการประชาชน การทำเช่นนี้ในทางซ้ายเข้าร่วมเช่นแบบสอบถาม SQL:
ประชาชนเลือก. * Realty_peoples.id_realty, Realty_peoples.type จากชนชาติ LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
ที่มีผลต่อไปนี้:
Query1 | ||||||
รหัส | L_name | F_name | Middle_name | วันเกิด | id_realty | ชนิด |
1 | อีวาโน | ดาเรีย | บี | 2000/07/16 | ||
2 | จิน | วลา | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | อเล็กซานเด | Federovich | 1964/04/30 | 5 | คุณสมบัติ |
4 | Annina | ความรัก | พี | 1989/12/31 | ||
5 | Gerasimovsky | หวัง | พี | 1992/03/14 | 4 | ชิ้นส่วนที่พบบ่อย |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | ชิ้นส่วนที่พบบ่อย |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 | 1 | คุณสมบัติ |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 | 3 | กรรมสิทธิ์ร่วมรวม |
8 | Sukhanovskaya | จูเลีย | วาย | 2001/01/10 | 3 | กรรมสิทธิ์ร่วมรวม |
ที่เราเห็น อีวาโนดาเรีย พูกินวลาและ Anninoy Lyubovi ไม่มีสมาชิกสิทธิอสังหาริมทรัพย์
และสิ่งที่จะเราได้รับใช้ภายในเข้าร่วม Inner เข้าร่วม? ในขณะที่คุณจะรู้ว่ามันไม่รวมแถวที่ไม่ตรงดังนั้นสามของกลุ่มตัวอย่างสุดท้ายของเราก็จะได้รับการลดลง:
Query1 | ||||||
รหัส | L_name | F_name | Middle_name | วันเกิด | id_realty | ชนิด |
3 | Evgenin | อเล็กซานเด | Federovich | 1964/04/30 | 5 | คุณสมบัติ |
5 | Gerasimovsky | หวัง | พี | 1992/03/14 | 4 | ชิ้นส่วนที่พบบ่อย |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | ชิ้นส่วนที่พบบ่อย |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 | 1 | คุณสมบัติ |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 | 3 | กรรมสิทธิ์ร่วมรวม |
8 | Sukhanovskaya | จูเลีย | วาย | 2001/01/10 | 3 | กรรมสิทธิ์ร่วมรวม |
มันจะดูเหมือนว่ารุ่นที่สองนอกจากนี้ยังมีคุณสมบัติตรงตามเงื่อนไขของปัญหาของเรา แต่ถ้าเราเริ่มที่จะติดอยู่ที่อื่นและโต๊ะอีกสามคนจากผลที่มีอยู่แล้วไปแก้ไขไม่ได้ ซ้ายและขวาการเชื่อมต่อดังนั้นในทางปฏิบัติเมื่อรวมหลายตารางมากขึ้นมักจะใช้กว่า Inner เข้าร่วม
จะยังคงมองไปทางซ้ายเข้าร่วมตัวอย่าง SQL แนบตารางที่มีอยู่ของบ้านของเรา:
ประชาชนเลือก. * Realty_peoples.id_realty, Realty_peoples.type, Realty.address จากชนชาติ LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN เรียลตี้ ON Realty.id = Realty_peoples.id_realty |
ตอนนี้เราได้รับไม่เพียงชนิดของกฎหมาย แต่ยังอยู่อสังหาริมทรัพย์:
Query1 | |||||||
รหัส | L_name | F_name | Middle_name | วันเกิด | id_realty | ชนิด | ที่อยู่ |
1 | อีวาโน | ดาเรีย | บี | 2000/07/16 | |||
2 | จิน | วลา | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | อเล็กซานเด | Federovich | 1964/04/30 | 5 | คุณสมบัติ | เกลสพี Terekhina, d. 89, Q 13 |
4 | Annina | ความรัก | พี | 1989/12/31 | |||
5 | Gerasimovsky | หวัง | พี | 1992/03/14 | 4 | ชิ้นส่วนที่พบบ่อย | ภูมิภาคเกล Novodvinsk, UL Proletarshaya, d. 16 Q 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | ชิ้นส่วนที่พบบ่อย | ภูมิภาคเกล Novodvinsk, UL Proletarshaya, d. 16 Q 137 |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 | 3 | กรรมสิทธิ์ร่วมรวม | ภูมิภาคเกล Severodvinsk, St เลนินง. 134, Q 85 |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 | 1 | คุณสมบัติ | เกล, UL บังเงา, d. 7 kv.6 |
8 | Sukhanovskaya | จูเลีย | วาย | 2001/01/10 | 3 | กรรมสิทธิ์ร่วมรวม |
ภูมิภาคเกล Severodvinsk, St เลนินง. 134, Q 85 |
ซ้ายเข้าร่วม - การใช้งานโดยทั่วไปของข้อผิดพลาด: ตารางขั้นตอนที่ไม่ถูกต้อง
ความผิดพลาดที่ทำในพื้นฐานด้านนอกซ้ายเข้าร่วมตารางที่สอง:
- ได้อย่างถูกต้องเลือกคำสั่งของตารางซึ่งข้อมูลที่หายไป
- ในกรณีที่มีข้อผิดพลาดเมื่อใช้แบบสอบถามกับเข้าร่วมตาราง
พิจารณาผิดพลาดครั้งแรก ก่อนที่จะมีการตัดสินใจของปัญหาใด ๆ ควรจะเข้าใจอย่างชัดเจนว่าสิ่งที่เราต้องการที่จะได้รับในท้ายที่สุด ในตัวอย่างข้างต้นนี้เราเอาทุกหนึ่งเดียวของคนที่หายไป แต่ข้อมูลเกี่ยวกับวัตถุภายใต้หมายเลข 2, ที่มีเจ้าของไม่พบสมบูรณ์
ถ้าเราย้ายตารางในแบบสอบถามในบางสถานที่และจะเริ่มต้นด้วย«... จากเรียลตี้ซ้ายเข้าร่วมของประชาชน ...»คนใดคนหนึ่งของสถานที่ที่เราจะไม่ได้หายไปคุณจะไม่บอกเกี่ยวกับคน
แต่ไม่ต้องกลัวของการเชื่อมต่อทางด้านซ้ายสลับไปเต็มภายนอกซึ่งรวมอยู่ในผลการค้นหาและการจับคู่และไม่สายที่ตรงกัน
หลังจากที่ทุก ปริมาณของกลุ่มตัวอย่างที่ มักจะมีขนาดใหญ่มากและข้อมูลพิเศษจะไม่ได้ผลจริง สิ่งที่สำคัญ - ที่จะคิดออกสิ่งที่คุณต้องการที่จะได้รับผล: ของทุกคนที่มีรายชื่อของทรัพย์สินที่มีอยู่ของพวกเขาหรือรายการทรัพย์สินทั้งหมดที่มีเจ้าของของพวกเขา (ถ้ามี) ก
ซ้ายเข้าร่วม - การใช้งานโดยทั่วไปของข้อผิดพลาดขอถูกต้องเมื่อตั้งเงื่อนไขในกรณีที่
ข้อผิดพลาดที่สองยังมีความเกี่ยวข้องกับการสูญหายของข้อมูลและที่ไม่เคยปรากฏทันที
ลองกลับไปที่การค้นหาเมื่อเราปล่อยให้ผ่านการเชื่อมต่อข้อมูลที่ได้รับสำหรับทุกคนและทรัพย์สินที่มีอยู่ของพวกเขา โปรดจำไว้ว่าต่อไปนี้ด้วยซ้ายเข้าร่วมเช่น SQL:
จากชนชาติ LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
สมมติว่าเราต้องการที่จะชี้แจงการร้องขอและไม่ได้ส่งออกข้อมูลที่ประเภทของกฎหมาย - "ทรัพย์สิน" ถ้าเราเพียงผนวกใช้ซ้ายเข้าร่วม SQL, ตัวอย่างของเงื่อนไขต่อไปนี้:
...
ที่ไหนประเภท <> "ทรัพย์สิน" |
เราจะสูญเสียข้อมูลในคนที่มีคุณสมบัติไม่เพราะ Null ค่า Null ไม่ได้เทียบดังนี้
Query1 | ||||||
รหัส | L_name | F_name | Middle_name | วันเกิด | id_realty | ชนิด |
5 | Gerasimovsky | หวัง | พี | 1992/03/14 | 4 | ชิ้นส่วนที่พบบ่อย |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | ชิ้นส่วนที่พบบ่อย |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 | 3 | กรรมสิทธิ์ร่วมรวม |
8 | Sukhanovskaya | จูเลีย | วาย | 2001/01/10 | 3 | กรรมสิทธิ์ร่วมรวม |
เพื่อป้องกันข้อผิดพลาดเกิดขึ้นด้วยเหตุผลนี้ดีที่สุดคือการกำหนดเงื่อนไขที่เลือกทันทีที่การเชื่อมต่อ เราขอแนะนำให้พิจารณาต่อไปนี้ด้วยซ้ายเข้าร่วมเช่น SQL
ประชาชนเลือก. * Realty_peoples.id_realty, Realty_peoples.type จากชนชาติ LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples และประเภท <> "ทรัพย์สิน") |
ผลที่ได้จะเป็นดังนี้:
Query1 | ||||||
รหัส | L_name | F_name | Middle_name | วันเกิด | id_realty | ชนิด |
1 | อีวาโน | ดาเรีย | บี | 2000/07/16 | ||
2 | จิน | วลา | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | อเล็กซานเด | Federovich | 1964/04/30 | ||
4 | Annina |
ความรัก | พี | 1989/12/31 | ||
5 | Gerasimovsky | หวัง | พี | 1992/03/14 | 4 | ชิ้นส่วนที่พบบ่อย |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | ชิ้นส่วนที่พบบ่อย |
7 | Sukhanovskaya | คณะลูกขุน | A. | 1976/09/25 | 3 | กรรมสิทธิ์ร่วมรวม |
8 | Sukhanovskaya | จูเลีย | วาย | 2001/01/10 | 3 | กรรมสิทธิ์ร่วมรวม |
ดังนั้นโดยต่อไปนี้ง่ายไปทางซ้ายเข้าร่วมเช่น SQL, เราได้รับรายชื่อของทุกคนที่ย้ายไปเป็นหนึ่งในคุณสมบัติเหล่านี้ในส่วนได้เสีย / กรรมสิทธิ์ร่วม
เป็นข้อสรุปที่ผมอยากจะเน้นอีกครั้งว่าตัวอย่างของข้อมูลใด ๆ จากฐานข้อมูลจะต้องมีการดำเนินการอย่างมีความรับผิดชอบ ความแตกต่างหลายเปิดในหน้าของเราด้วยซ้ายเข้าร่วมตัวอย่างง่ายๆ SQL, คำอธิบายที่หนึ่ง - ก่อนที่คุณจะเริ่มต้นในการเขียนแบบสอบถามขั้นพื้นฐานได้คุณต้องระมัดระวังที่จะเข้าใจสิ่งที่เราต้องการที่จะได้รับในท้ายที่สุด โชคดี!
Similar articles
Trending Now