โดย M013 » 14/08/2013 6:45 pm
JOIN TABLE (การเชื่อมเทเบิล) - Query ข้อมูลจากหลายตาราง
การใช้คำสั่ง SELECT ทั่วๆไปเป็นในการดึงข้อมูลข้อมูลจากตารางเดียว เเต่ในการปฏิบัติงานจริงเเล้ว อาจต้องมีการดึงข้อมูลจากหลายตาราง
โดยอาศัยคอลัมน์ที่ตรงกันของ 2 ตารางเป็นตัวเชื่อม (Foreign Key) วิธีการนี้เรียกว่า "Join Table" ซึ่งการ Join Table แบ่งออกได้เป็น 2 ประเภท ได้แก่
1.
Inner Join ได้แก่
Equi,
Self Join
2. Outer Join ได้แก่
Left Outer Join,
Right Outer Join,
ตัวอย่างการใช้งาน (แบบยังไม่ Join Table)
- ภาพที่ 1.1 ตารางข้อมูลลูกค้า เเละ ตารางข้อมูลการสั่งสินค้า
- table_cusANDorder.jpg (149.88 KiB) Viewed 15225 times
>> ต้องการทราบรหัสลูกค้าที่ทำการสั่งซื้อสินค้าในรหัสการสั่งซื้อ 05
โค้ด: เลือกทั้งหมด
SELECT order_id, cus_id
FROM Order_product
WHERE order_id = '05';
- ภาพที่ 1.2 จากการใช้คำสั่งจาก Code ข้างต้นจะเเสดงผลออกมาดังภาพ
- output_select1.jpg (21.22 KiB) Viewed 15242 times
>> จากการแสดงผลข้างต้นต้องการหาชื่อลูกค้าที่มีรหัสดังกล่าว
โค้ด: เลือกทั้งหมด
SELECT cus_id, cus_name
FROM customer
WHERE cus_id = 'c006';
- ภาพที่ 1.3 จากการใช้คำสั่งจาก Code ข้างต้นจะเเสดงผลออกมาดังภาพ
- output_select2.jpg (22.72 KiB) Viewed 15242 times
*** จะเห็นว่าตัวอย่างข้างต้นเป็นการ SELECT ทีละตาราง เเละต้องทำการ SELECT ถึง 2 ครั้งกว่าจะได้ข้อมูลที่ต้องการ ดังนั้นการ Join Table สามารถลดขั้นตอนได้ดังนี้
ตัวอย่างการใช้งาน (แบบ Join Table)
- เปรียบเทียบ Code ที่ไม่ได้ทำการ Join Table
โค้ด: เลือกทั้งหมด
SELECT order_id, cus_id
FROM Order_product
WHERE order_id = '05';
โค้ด: เลือกทั้งหมด
SELECT cus_id, cus_name
FROM customer
WHERE cus_id = 'c006';
- เมื่อทำการ Join Table
โค้ด: เลือกทั้งหมด
SELECT Order_product.order_id, Order_product.cus_id, Customer.cus_name
FROM Customer, Order_product
WHERE Customer.cus_id = Order_product.cus_id
AND order_id = '05';
[b][size=150]JOIN TABLE (การเชื่อมเทเบิล) - Query ข้อมูลจากหลายตาราง[/size][/b]
การใช้คำสั่ง SELECT ทั่วๆไปเป็นในการดึงข้อมูลข้อมูลจากตารางเดียว เเต่ในการปฏิบัติงานจริงเเล้ว อาจต้องมีการดึงข้อมูลจากหลายตาราง
โดยอาศัยคอลัมน์ที่ตรงกันของ 2 ตารางเป็นตัวเชื่อม (Foreign Key) วิธีการนี้เรียกว่า "Join Table" ซึ่งการ Join Table แบ่งออกได้เป็น 2 ประเภท ได้แก่
1. [url=https://www.mindphp.com/forums/viewtopic.php?f=74&t=18705]Inner Join[/url] ได้แก่ [url=https://www.mindphp.com/forums/viewtopic.php?f=74&t=18703]Equi[/url], [url=https://www.mindphp.com/forums/viewtopic.php?f=74&t=18704]Self Join[/url]
2. Outer Join ได้แก่ [url=https://www.mindphp.com/forums/viewtopic.php?f=74&t=18707]Left Outer Join[/url], [url=https://www.mindphp.com/forums/viewtopic.php?f=74&t=18708]Right Outer Join[/url],
[b]ตัวอย่างการใช้งาน [/b](แบบยังไม่ Join Table)[attachment=2]table_cusANDorder.jpg[/attachment]
[b]>> ต้องการทราบรหัสลูกค้าที่ทำการสั่งซื้อสินค้าในรหัสการสั่งซื้อ 05[/b]
[code]SELECT order_id, cus_id
FROM Order_product
WHERE order_id = '05';[/code][attachment=1]output_select1.jpg[/attachment]
[b]>> จากการแสดงผลข้างต้นต้องการหาชื่อลูกค้าที่มีรหัสดังกล่าว[/b]
[code]SELECT cus_id, cus_name
FROM customer
WHERE cus_id = 'c006';[/code][attachment=0]output_select2.jpg[/attachment]
[color=#FF0000]***[/color] จะเห็นว่าตัวอย่างข้างต้นเป็นการ SELECT ทีละตาราง เเละต้องทำการ SELECT ถึง 2 ครั้งกว่าจะได้ข้อมูลที่ต้องการ ดังนั้นการ Join Table สามารถลดขั้นตอนได้ดังนี้
[b]
ตัวอย่างการใช้งาน [/b](แบบ Join Table)
- เปรียบเทียบ Code ที่ไม่ได้ทำการ Join Table
[code]SELECT order_id, cus_id
FROM Order_product
WHERE order_id = '05';[/code][code]SELECT cus_id, cus_name
FROM customer
WHERE cus_id = 'c006';[/code]
- เมื่อทำการ Join Table
[code]SELECT Order_product.order_id, Order_product.cus_id, Customer.cus_name
FROM Customer, Order_product
WHERE Customer.cus_id = Order_product.cus_id
AND order_id = '05';[/code]