คำสั่ง JOIN ของ SQL
- หน้าก่อนหน้า SQL Aliases
- หน้าต่อไป SQL Inner Join
SQL join ใช้เพื่อค้นหาข้อมูลจากตารางที่มีความสัมพันธ์กันทางคอลัมน์ระหว่างสองหรือมากกว่าตาราง
Join และ Key
บางครั้งเพื่อที่จะได้รับผลลัพธ์ที่สมบูรณ์ พวกเราจำเป็นต้องดึงข้อมูลมาจากสองตารางหรือมากกว่า และเราจำเป็นต้องทำ join
ตารางในฐานข้อมูลสามารถเชื่อมโยงกันด้วยกุญแจ หลักประกัน (Primary Key) คือคอลัมน์ที่ในแต่ละบรรทัดมีค่าที่เด่นที่สุด ในตาราง ค่าหลักประกันของแต่ละหลักประกันจะมีค่าเด่นที่สุด จุดประสงค์ของการกระทำนี้เพื่อที่จะเชื่อมโยงข้อมูลระหว่างตารางโดยไม่จำเป็นต้องคัดลอกข้อมูลทั้งหมดในแต่ละตาราง
โปรดดูตาราง "Persons"
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | ปักกิ่ง |
โปรดเล็งดูว่า "Id_P" คอลัมน์เป็นหลักประกันของตาราง Persons ซึ่งหมายความว่าไม่มีบรรทัดใดที่มีค่า Id_P ที่เหมือนกัน แม้ว่าชื่อของบุคคลทั้งสองจะเหมือนกันเช่นกัน ตัว Id_P ยังสามารถแยกเป็นบุคคลที่แยกต่างกัน
ต่อมา โปรดดูตาราง "Orders"
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 65 |
โปรดเล็งดูว่า "Id_O" คอลัมน์เป็นหลักประกันของตาราง Orders พร้อมด้วย "Orders" คอลัมน์ "Id_P" ใช้เพื่ออ้างอิงตาราง "Persons" โดยไม่จำเป็นต้องใช้ชื่อจริงของพวกเขา
โปรดสังเกตว่า "Id_P" คอลัมน์ที่เชื่อมต่อสองตารางด้านบน
อ้างอิงตารางสองตาราง
เราสามารถดึงข้อมูลจากตารางสองตารางโดยอ้างอิงตาราง
ใครที่สั่งซื้อสินค้า และพวกเขาสั่งซื้ออะไร?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
ผลลัพธ์ตาราง:
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
SQL JOIN - การใช้ JOIN
นอกจากวิธีด้านบน เรายังสามารถใช้คำถาม JOIN ในการดึงข้อมูลจากตารางสองตาราง
หากเราต้องการแสดงบรรทัดสั่งซื้อของทุกคน สามารถใช้คำสั่ง SELECT ด้านล่างนี้
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName
ผลลัพธ์ตาราง:
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
JOIN SQL ต่างกัน
นอกจาก INNER JOIN (การเชื่อมต่อภายใน) ที่เราใช้ในตัวอย่างด้านบน เรายังสามารถใช้เชื่อมต่ออื่นๆ
ด้านล่างนี้นับได้รายการ JOIN ที่คุณสามารถใช้ได้ และความแตกต่างระหว่างมัน
- JOIN: กลับคืนบรรทัดเมื่อมีการตรวจสอบที่ตรงกันในตาราง
- LEFT JOIN: กลับคืนบรรทัดทุกตารางจากฝั่งซ้าย แม้ว่าจะไม่มีการตรวจสอบที่ตรงกันในฝั่งขวา
- RIGHT JOIN: กลับคืนบรรทัดทุกตารางจากฝั่งขวา แม้ว่าจะไม่มีการตรวจสอบที่ตรงกันในฝั่งซ้าย
- FULL JOIN: กลับคืนบรรทัดเมื่อมีการตรวจสอบที่ตรงกันในหนึ่งในตาราง
- หน้าก่อนหน้า SQL Aliases
- หน้าต่อไป SQL Inner Join