ข้อกำหนดเบื้องต้นสำหรับลักษณะของตัวดำเนินการ JOIN

เมื่อจำนวนข้อมูลในตารางเพิ่มขึ้น ค่าที่ซ้ำกันมักจะปรากฏขึ้น ตัวอย่างเช่น ตารางผลิตภัณฑ์มีชื่อแบรนด์ ซึ่งบางครั้งก็ซ้ำๆ การมีตารางแบรนด์แยกต่างหากจะเป็นประโยชน์ ซึ่งจะประกอบด้วยข้อมูลต่างๆ เช่น:

  • รหัส - รหัสแบรนด์;
  • ชื่อ – ชื่อแบรนด์;
  • company_owner - ชื่อของบริษัทเจ้าของแบรนด์
  • company_contacts - ผู้ติดต่อของบริษัทเจ้าของแบรนด์

จากนั้นเราต้องการสร้างตารางที่อยู่ซึ่งเราสามารถใส่ที่อยู่ทั้งหมดได้:

  • id – id-ที่อยู่;
  • ประเทศ;
  • ภูมิภาค;
  • เมือง;
  • ถนน;
  • บ้าน;
  • ซิป

ยิ่งไปกว่านั้น ในตารางนี้ จะสามารถจัดเก็บที่อยู่ของบริษัทที่เป็นเจ้าของแบรนด์ได้ ไม่เพียงเท่านั้น แต่ยังรวมถึงที่อยู่ของลูกค้าและพนักงานด้วย และวิธีการนี้เป็นผลมาจากการเติบโตของจำนวนข้อมูล (จำนวนแถวในตาราง) ทำให้ง่ายต่อการจัดการข้อมูลในตารางและรักษาความสมบูรณ์

เมื่อคุณมีพนักงาน 5 คน คุณสามารถป้อนอาชีพของพวกเขาในคอลัมน์อาชีพ หากคุณมีพนักงาน 5,000 คนในบริษัทของคุณ คุณต้องมีตารางที่มีรายชื่อ x อาชีพและความรับผิดชอบของพวกเขา

ในภาษา Java มีบางอย่างที่คล้ายกัน หากคุณมีรหัสจำนวนมากในวิธีใดวิธีหนึ่ง คุณต้องการแบ่งรหัสออกเป็นหลายวิธี ถ้าในคลาสมีหลายวิธี ฉันต้องการแบ่งเป็นหลายคลาส

นั่นคือเหตุผลที่ฐานข้อมูลขนาดใหญ่มีหลายพันตาราง และแบบสอบถามเกือบทั้งหมดถูกดำเนินการในหลาย ๆ ตารางพร้อมกัน และผลคูณคาร์ทีเซียนของแถวของตารางสามตาราง ซึ่งแต่ละตารางมีหนึ่งพันระเบียน ก็เท่ากับหนึ่งพันล้านแถวแล้ว

แต่การกรองหนึ่งพันล้านแถวโดยใช้ WHERE อาจใช้เวลาหลายชั่วโมง ดังนั้นผู้สร้างภาษา SQL จึงเสนอวิธีแก้ปัญหา - ตัวดำเนินการ JOIN

บทนำสู่ตัวดำเนินการ JOIN

ตัวดำเนินการ JOINใช้เพื่อบอกเซิร์ฟเวอร์ SQL อย่างชัดเจนว่าเราไม่ต้องการผลิตภัณฑ์คาร์ทีเซียนของทุกแถวของตารางสำหรับทุกแถว แต่ต้องใช้การติดกาวอย่างชาญฉลาดของแถวของตารางต่างๆ ที่อ้างอิงถึงกันและกันโดยใช้ ID (หรือด้วยวิธีอื่น) . เซิร์ฟเวอร์มีอัลกอริทึมแยกต่างหากสำหรับการประมวลผลการรวมตารางโดยใช้ตัวดำเนินการ JOIN ซึ่งช่วยให้ดำเนินการดังกล่าวได้เร็วขึ้นมาก รูปแบบทั่วไปของตัวดำเนินการ JOIN เป็นดังนี้:

table 1 JOIN table 2 ON condition

มันบอกว่าคุณต้องรวมตารางtable1และtable2 เป็น ตาราง เดียวและใช้ เงื่อนไขเป็นเกณฑ์การเข้าร่วม

ลองใช้ตัวอย่างเก่าของเรา:

SELECT * FROM employee, task WHERE emploee.id = task.emploee_id

และเขียนใหม่โดยใช้ตัวดำเนินการ JOIN:

SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id

ข้อความค้นหาทั้งสองจะให้ผลลัพธ์เหมือนกันในกรณีของเรา แต่เป็นเพราะข้อความค้นหานั้นง่ายมาก ในอนาคต WHERE จะช่วยให้คุณสร้างตัวกรองแถวได้อย่างแน่นอน และตัวกรองที่ระบุหลัง ON จะช่วยให้คุณเขียนสคริปต์ที่ซับซ้อนสำหรับการเชื่อมโยงตารางได้ คุณยังสามารถใช้นามแฝง (นามแฝงของตาราง) เมื่อใช้คำสั่ง JOIN ตัวอย่าง:

SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id