คอมพิวเตอร์การเขียนโปรแกรม

ซ้ายเข้าร่วม (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

ซ้ายเข้าร่วม - การใช้งานโดยทั่วไปของข้อผิดพลาด: ตารางขั้นตอนที่ไม่ถูกต้อง

ความผิดพลาดที่ทำในพื้นฐานด้านนอกซ้ายเข้าร่วมตารางที่สอง:

  1. ได้อย่างถูกต้องเลือกคำสั่งของตารางซึ่งข้อมูลที่หายไป
  2. ในกรณีที่มีข้อผิดพลาดเมื่อใช้แบบสอบถามกับเข้าร่วมตาราง

พิจารณาผิดพลาดครั้งแรก ก่อนที่จะมีการตัดสินใจของปัญหาใด ๆ ควรจะเข้าใจอย่างชัดเจนว่าสิ่งที่เราต้องการที่จะได้รับในท้ายที่สุด ในตัวอย่างข้างต้นนี้เราเอาทุกหนึ่งเดียวของคนที่หายไป แต่ข้อมูลเกี่ยวกับวัตถุภายใต้หมายเลข 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

 

 

 

 

Newest

Copyright © 2018 th.delachieve.com. Theme powered by WordPress.