ข้อกำหนดเบื้องต้นสำหรับลักษณะของตัวดำเนินการ 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