พีชคณิตเชิงสัมพันธ์ในระบบจัดการฐานข้อมูล พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
พีชคณิตเชิงสัมพันธ์ในระบบจัดการฐานข้อมูล (DBMS) เป็นภาษาการสอบถามเชิงกระบวนการที่รับความสัมพันธ์เป็นอินพุตและสร้างความสัมพันธ์ใหม่เป็นเอาต์พุต โดยจะจัดกลุ่มตัวดำเนินการออกเป็นประเภทเอกภาค เซต และทวิภาค ซึ่งเป็นรากฐานทางทฤษฎีที่กลไก SQL แปลงเป็นแผนการสอบถามที่สามารถดำเนินการได้

พีชคณิตเชิงสัมพันธ์คืออะไร?
พีชคณิตเชิงสัมพันธ์ SQL เป็นภาษาสอบถามเชิงกระบวนการที่รับอินสแตนซ์ของความสัมพันธ์เป็นอินพุตและส่งคืนอินสแตนซ์ใหม่ของความสัมพันธ์เป็นเอาต์พุต โดยจะใช้ชุดตัวดำเนินการคงที่ซ้ำๆ กับความสัมพันธ์หนึ่งหรือมากกว่า และผลลัพธ์ของตัวดำเนินการแต่ละตัวก็คือความสัมพันธ์ที่สามารถป้อนเข้าสู่การดำเนินการถัดไปได้ กลไกของ SQL อาศัยพีชคณิตนี้ในการวางแผนและดำเนินการสอบถาม
พีชคณิตเชิงสัมพันธ์พื้นฐาน Operations
ตัวดำเนินการพีชคณิตเชิงสัมพันธ์แบ่งออกเป็นสามกลุ่ม
เอกนารีสัมพันธ์ Operations
- เลือก (σ)
- โครงการ (π)
- เปลี่ยนชื่อ (ρ)
Operaข้อเสนอแนะจากทฤษฎีเซต
- สหภาพ (∪)
- จุดตัด (∩)
- ความแตกต่าง (−)
- ผลคูณคาร์ทีเซียน (×)
ไบนารีสัมพันธ์ Operations
- สมัคร
- หมวด
ส่วนด้านล่างนี้จะอธิบายการทำงานของแต่ละตัวดำเนินการ พร้อมตัวอย่างการใช้งาน
เลือก (σ)
การขอ SELECT การดำเนินการนี้จะเลือกกลุ่มย่อยของทูเปิลที่ตรงตามเงื่อนไขที่กำหนด สัญลักษณ์ซิกมา σ บ่งบอกว่า:
σp(r)
ที่ไหน σ คือผู้ดำเนินการ p คือเงื่อนไขเชิงประพจน์ และ r คือความสัมพันธ์ (ตาราง) คำสั่ง SELECT จะรักษารูปแบบตารางไว้และตัดแถวที่ไม่ตรงตามเงื่อนไขทิ้ง
1 ตัวอย่าง
σ topic = "Database" (Tutorials)
เลือกทูเปิลจาก สอน โดยที่หัวข้อเท่ากับ “ฐานข้อมูล”
2 ตัวอย่าง
σ topic = "Database" AND author = "guru99" (Tutorials)
เลือกทูเปิลจาก สอน โดยหัวข้อคือ “ฐานข้อมูล” และผู้เขียนคือ guru99
3 ตัวอย่าง
σ sales > 50000 (Customers)
เลือกทูเปิลจาก ลูกค้า ซึ่งมีมูลค่าการขายมากกว่า 50,000
การฉายภาพ (π)
การขอ การฉาย ตัวดำเนินการจะลบแอตทริบิวต์ทั้งหมดออกจากความสัมพันธ์อินพุต ยกเว้นแอตทริบิวต์ที่ระบุไว้ ทำให้ได้ชุดย่อยแนวตั้ง การฉายภาพยังช่วยกำจัดแถวที่ซ้ำกันซึ่งเกิดจากการลบด้วยping คุณลักษณะ สัญลักษณ์พาย π บ่งบอกถึงสิ่งนั้น
ตัวอย่าง: พิจารณาตารางต่อไปนี้
| รหัสลูกค้า | ชื่อลูกค้า | สถานะ |
|---|---|---|
| 1 | ใช้งาน | |
| 2 | Amazon | ใช้งาน |
| 3 | แอปเปิ้ล | เฉื่อยชา |
| 4 | อาลีบาบา | ใช้งาน |
การคาดการณ์โดยอิงจากชื่อลูกค้าและสถานะ:
π CustomerName, Status (Customers)
| ชื่อลูกค้า | สถานะ |
|---|---|
| ใช้งาน | |
| Amazon | ใช้งาน |
| แอปเปิ้ล | เฉื่อยชา |
| อาลีบาบา | ใช้งาน |
เปลี่ยนชื่อ (ρ)
การขอ ตั้งชื่อใหม่ ตัวดำเนินการ (operator) คือการดำเนินการแบบเอกภาค (unary operation) ที่กำหนดชื่อใหม่ให้กับแอตทริบิวต์ (หรือให้กับความสัมพันธ์ทั้งหมด) ตัวอย่างเช่น ρ(a/b) R เปลี่ยนชื่อแอตทริบิวต์ b ของความสัมพันธ์ R ไปยัง aฟังก์ชัน Rename มีประโยชน์อย่างยิ่งเมื่อคุณต้องการทำการเชื่อมตารางตัวเอง หรือเชื่อมตารางสองตารางที่มีชื่อแอตทริบิวต์เหมือนกัน
สหภาพ Operation (∪)
การขอ ยูเนี่ยน ตัวดำเนินการ ซึ่งแสดงด้วย ∪ส่งคืนทุกทูเปิลที่ปรากฏในความสัมพันธ์ A หรือความสัมพันธ์ B โดยจะลบรายการที่ซ้ำกันออกโดยอัตโนมัติ
Result ← A ∪ B
เพื่อให้การสมรสมีผลสมบูรณ์:
- A และ B ต้องมีจำนวนแอตทริบิวต์เท่ากัน (arity เท่ากัน)
- โดเมนแอตทริบิวต์ที่เกี่ยวข้องต้องเข้ากันได้
- ระบบจะลบทูเพิลที่ซ้ำกันออกโดยอัตโนมัติ
ตัวอย่าง. พิจารณาตารางสองตารางนี้:
| ตาราง A | ตาราง B | |||
|---|---|---|---|---|
| คอลัมน์ 1 | คอลัมน์ 2 | คอลัมน์ 1 | คอลัมน์ 2 | |
| 1 | 1 | 1 | 1 | |
| 1 | 2 | 1 | 3 | |
A ∪ B ให้:
| คอลัมน์ 1 | คอลัมน์ 2 |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
ผลต่างเซต (−)
เครื่องหมายลบหมายถึง ความแตกต่างที่กำหนดไว้. ผลลัพธ์ของ A − B เป็นความสัมพันธ์ที่ประกอบด้วยทูเปิลทั้งหมดที่อยู่ใน A แต่ไม่อยู่ใน B
- A และ B ต้องเข้ากันได้ในสหภาพแรงงาน
- ชื่อแอตทริบิวต์และโดเมนต้องสอดคล้องกัน
ตัวอย่าง: A − B
| คอลัมน์ 1 | คอลัมน์ 2 |
|---|---|
| 1 | 2 |
จุดตัด (∩)
การขอ การตัด ตัวดำเนินการ ซึ่งแสดงด้วย ∩กำหนดความสัมพันธ์ที่ประกอบด้วยทุกทูเปิลที่ปรากฏทั้งใน A และ B โดยที่ A และ B ต้องเข้ากันได้กับยูเนียน
คำจำกัดความเชิงภาพของจุดตัด
ตัวอย่าง: A ∩ B
| คอลัมน์ 1 | คอลัมน์ 2 |
|---|---|
| 1 | 1 |
ผลคูณคาร์ทีเซียน (×) ในระบบจัดการฐานข้อมูล (DBMS)
การขอ ผลิตภัณฑ์คาร์ทีเซียน การรวมทูเปิลทุกตัวจากความสัมพันธ์หนึ่งเข้ากับทูเปิลทุกตัวจากอีกความสัมพันธ์หนึ่ง โดยการรวมคอลัมน์เข้าด้วยกัน ผลลัพธ์ที่ได้เพียงอย่างเดียวนั้นแทบจะไม่มีประโยชน์ แต่เมื่อรวมกับเงื่อนไข SELECT แล้ว มันจะกลายเป็นพื้นฐานของ JOIN เรียกอีกอย่างว่า ผลคูณไขว้ หรือ การเชื่อมต่อไขว้
ตัวอย่าง: σ คอลัมน์ 2 = '1' (A × B)
นิพจน์นี้จะส่งคืนทุกแถวของ A × B ใคร column 2 ค่าคือ 1
| คอลัมน์ 1 | คอลัมน์ 2 |
|---|---|
| 1 | 1 |
| 1 | 1 |
ร่วมเป็นผู้ขายกับเราที่ Operations
A ร่วม เป็นผลคูณคาร์ทีเซียนตามด้วยเงื่อนไขการเลือก การเชื่อมต่อจะแสดงด้วย ⋈ สัญลักษณ์นี้ช่วยให้คุณสามารถรวมทูเปิลที่เกี่ยวข้องจากความสัมพันธ์ที่แตกต่างกันได้อย่างมีความหมาย
ประเภทของการเชื่อมต่อ (Join):
- ข้อต่อภายใน: การเชื่อมต่อแบบ Theta, การเชื่อมต่อแบบ Equi, การเชื่อมต่อแบบ Natural
- ข้อต่อภายนอก: การเชื่อมต่อแบบซ้าย ขวา และแบบเต็มภายนอก
การเข้าร่วมภายใน
ใน เข้าร่วมภายในเฉพาะทูเปิลที่ตรงตามเกณฑ์การจับคู่เท่านั้นที่จะถูกนำมาพิจารณา ส่วนที่เหลือจะถูกทิ้งไป
ธีต้าเข้าร่วม
รูปแบบทั่วไปของคำสั่ง JOIN คือ ธีต้าเข้าร่วมซึ่งแทนด้วยสัญลักษณ์ θ การเชื่อมต่อแบบ Theta join สามารถใช้เงื่อนไขการเปรียบเทียบใดๆ ก็ได้ในเกณฑ์การเลือก
A ⋈θ B
ตัวอย่างเช่น:
A ⋈ A.column 2 > B.column 2 (B)
| คอลัมน์ 1 | คอลัมน์ 2 |
|---|---|
| 1 | 2 |
อีควิ จอยน์
เมื่อการเชื่อมต่อแบบ Theta ใช้เงื่อนไขความเท่าเทียมกันเท่านั้น มันจะกลายเป็น อีควิ จอยน์.
A ⋈ A.column 2 = B.column 2 (B)
| คอลัมน์ 1 | คอลัมน์ 2 |
|---|---|
| 1 | 1 |
การต่อแบบ Equi join เป็นหนึ่งในรูปแบบการต่อไม้ที่นิยมใช้มากที่สุด และ อาร์ดีบีเอ็มเอส โดยทั่วไปแล้ว ตัวเพิ่มประสิทธิภาพการสืบค้นจะทุ่มเทความพยายามอย่างมากในการทำให้การสืบค้นมีประสิทธิภาพมากขึ้น
การรวมแบบธรรมชาติ (⋈)
A เข้าร่วมอย่างเป็นธรรมชาติ จำเป็นต้องมีคุณลักษณะ (คอลัมน์) ร่วมกันระหว่างความสัมพันธ์ คุณลักษณะที่ใช้ร่วมกันต้องมีชื่อและโดเมนเดียวกัน ผลลัพธ์จะมีคอลัมน์ที่ตรงกันเพียงหนึ่งสำเนา
พิจารณาตารางสองตารางนี้
| ตาราง C | |
|---|---|
| หนุ่ม | สี่เหลี่ยมด้านเท่า |
| 2 | 4 |
| 3 | 9 |
| ตาราง D | |
|---|---|
| หนุ่ม | ลูกบาศก์ |
| 2 | 8 |
| 3 | 27 |
C ⋈ D ผลิต:
| หนุ่ม | สี่เหลี่ยมด้านเท่า | ลูกบาศก์ |
|---|---|---|
| 2 | 4 | 8 |
| 3 | 9 | 27 |
การเข้าร่วมภายนอก
An การรวมภายนอก outer เก็บทูเปิลที่ตรงตามเกณฑ์การจับคู่ และ ทูเปิลที่ไม่มีค่า จะเติมคอลัมน์ที่ขาดหายไปด้วยค่า NULL
เข้าร่วมด้านนอกซ้าย (A ⟕ B)
การเชื่อมตารางแบบ Left Outer Join จะเก็บทุกทูเปิลในตารางด้านซ้ายไว้ หากแถวในตาราง A ไม่มีแถวที่ตรงกันในตาราง B ค่าแอตทริบิวต์ที่มาจากตาราง B จะถูกเติมด้วยค่า NULL
พิจารณาตารางต่อไปนี้:
| ตาราง A | |
|---|---|
| หนุ่ม | สี่เหลี่ยมด้านเท่า |
| 2 | 4 |
| 3 | 9 |
| 4 | 16 |
| ตาราง B | |
|---|---|
| หนุ่ม | ลูกบาศก์ |
| 2 | 8 |
| 3 | 18 |
| 5 | 75 |
A ⟕ B ให้:
| หนุ่ม | สี่เหลี่ยมด้านเท่า | ลูกบาศก์ |
|---|---|---|
| 2 | 4 | 8 |
| 3 | 9 | 18 |
| 4 | 16 | NULL |
การเชื่อมแบบ Right Outer Join (A ⟖ B)
การเชื่อมตารางแบบ Right Outer Join จะเก็บทุกทูเปิลไว้ในความสัมพันธ์ที่ถูกต้อง หากแถวในตาราง B ไม่มีแถวที่ตรงกันในตาราง A คอลัมน์ที่มาจากตาราง A จะถูกเติมด้วยค่า NULL
A ⟖ B ให้:
| หนุ่ม | ลูกบาศก์ | สี่เหลี่ยมด้านเท่า |
|---|---|---|
| 2 | 8 | 4 |
| 3 | 18 | 9 |
| 5 | 75 | NULL |
การเชื่อมต่อภายนอกแบบเต็ม (A ⟗ B)
การเชื่อมแบบ Full Outer Join จะเก็บทุกทูเปิลจากทั้งสองความสัมพันธ์ โดยไม่คำนึงว่าเงื่อนไขการเชื่อมตรงกันหรือไม่ ค่าที่หายไปในฝั่งใดฝั่งหนึ่งจะกลายเป็น NULL
A ⟗ B ให้:
| หนุ่ม | สี่เหลี่ยมด้านเท่า | ลูกบาศก์ |
|---|---|---|
| 2 | 4 | 8 |
| 3 | 9 | 18 |
| 4 | 16 | NULL |
| 5 | NULL | 75 |
Operaสรุปข้อมูลอ้างอิง
ใช้ตารางอ้างอิงนี้เพื่อทบทวนหน้าที่ของแต่ละผู้ปฏิบัติงานได้อย่างรวดเร็ว
| Operation (สัญลักษณ์) | จุดมุ่งหมาย |
|---|---|
| เลือก (σ) | เลือกกลุ่มย่อยของทูเปิลที่ตรงตามเงื่อนไขที่กำหนด |
| โครงการ (π) | เก็บเฉพาะคุณลักษณะที่ระบุไว้และลบแถวที่ซ้ำกันออก |
| สหภาพ (∪) | ส่งคืนทุกทูเปิลที่ปรากฏใน A หรือ B โดยไม่มีรายการซ้ำ |
| ตั้งค่าความแตกต่าง (−) | ส่งคืนทูเปิลใน A ที่ไม่มีอยู่ใน B |
| จุดตัด (∩) | ส่งคืนทูเปิลที่ปรากฏทั้งใน A และ B |
| ผลคูณคาร์ทีเซียน (×) | รวมทุกทูเปิลของ A กับทุกทูเปิลของ B เข้าด้วยกัน |
| INNER JOIN | เก็บเฉพาะทูเปิลที่ตรงกับเงื่อนไขการเชื่อมต่อเท่านั้น |
| เธต้า จอยน์ (θ) | การเชื่อมต่อแบบทั่วไปโดยใช้เงื่อนไขการเปรียบเทียบใดๆ ก็ได้ |
| อีควิ จอยน์ | การเชื่อมต่อแบบ Theta join ซึ่งใช้เฉพาะการเปรียบเทียบความเท่าเทียมกันเท่านั้น |
| เข้าร่วมตามธรรมชาติ (⋈) | เชื่อมโยงความสัมพันธ์โดยใช้คุณลักษณะที่มีชื่อและโดเมนเดียวกัน |
| การเชื่อมแบบ Left Outer Join (⟕) | เก็บทุกทูเปิลจากความสัมพันธ์ด้านซ้าย และเติมค่า NULL ลงในความสัมพันธ์ด้านขวา |
| รอยต่อด้านนอกขวา (⟖) | เก็บทุกทูเปิลจากความสัมพันธ์ด้านขวา และเติมค่า NULL ลงในความสัมพันธ์ด้านซ้าย |
| การเชื่อมต่อภายนอกแบบเต็ม (⟗) | เก็บทุกทูเปิลจากทั้งสองความสัมพันธ์ โดยเติมค่าที่หายไปด้วย NULL |



