Skip to main content

การเชื่อมตาราง (Joins)

บทนำ

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

1. ประเภทของ JOIN

1.1 INNER JOIN

INNER JOIN จะดึงข้อมูลที่มีความสัมพันธ์ระหว่างตารางทั้งสอง โดยจะคืนผลลัพธ์เฉพาะแถวที่มีค่าในคอลัมน์ที่ทำการเชื่อมโยงตรงกันในทั้งสองตาราง

ตัวอย่าง:

SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

ในตัวอย่างนี้ INNER JOIN จะเชื่อมตาราง orders และ customers โดยใช้คอลัมน์ customer_id เป็นตัวเชื่อม และจะคืนผลลัพธ์เฉพาะแถวที่มีข้อมูลตรงกันในทั้งสองตาราง

1.2 LEFT JOIN หรือ LEFT OUTER JOIN

LEFT JOIN หรือ LEFT OUTER JOIN จะดึงข้อมูลจากตารางทางซ้าย (left table) และข้อมูลที่ตรงกันจากตารางทางขวา (right table) ถ้าหากไม่พบข้อมูลตรงกันในตารางขวา ก็จะคืนค่าเป็น NULL สำหรับคอลัมน์จากตารางขวา

ตัวอย่าง:

SELECT orders.order_id, customers.customer_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;

ในตัวอย่างนี้ LEFT JOIN จะดึงข้อมูลทั้งหมดจากตาราง orders และเชื่อมข้อมูลที่ตรงกันจากตาราง customers ถ้าไม่มีข้อมูลตรงกันใน customers คอลัมน์ customer_name จะเป็น NULL

1.3 RIGHT JOIN หรือ RIGHT OUTER JOIN

RIGHT JOIN หรือ RIGHT OUTER JOIN จะดึงข้อมูลจากตารางทางขวา (right table) และข้อมูลที่ตรงกันจากตารางทางซ้าย (left table) ถ้าหากไม่พบข้อมูลตรงกันในตารางซ้าย ก็จะคืนค่าเป็น NULL สำหรับคอลัมน์จากตารางซ้าย

ตัวอย่าง:

SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;

ในตัวอย่างนี้ RIGHT JOIN จะดึงข้อมูลทั้งหมดจากตาราง customers และเชื่อมข้อมูลที่ตรงกันจากตาราง orders ถ้าไม่มีข้อมูลตรงกันใน orders คอลัมน์ order_id จะเป็น NULL

1.4 FULL JOIN หรือ FULL OUTER JOIN

FULL JOIN หรือ FULL OUTER JOIN จะดึงข้อมูลทั้งหมดจากทั้งสองตาราง โดยจะคืนค่าข้อมูลที่ตรงกันจากทั้งสองตาราง ถ้าหากไม่มีข้อมูลตรงกันในตารางใดตารางหนึ่ง จะคืนค่าเป็น NULL สำหรับคอลัมน์จากตารางที่ไม่มีข้อมูลตรงกัน

ตัวอย่าง:

SELECT orders.order_id, customers.customer_name
FROM orders
FULL JOIN customers ON orders.customer_id = customers.customer_id;

ในตัวอย่างนี้ FULL JOIN จะดึงข้อมูลทั้งหมดจากทั้งสองตาราง orders และ customers โดยจะเชื่อมข้อมูลที่ตรงกัน หากไม่มีข้อมูลตรงกันในตารางใดตารางหนึ่ง ค่าจะเป็น NULL

1.5 CROSS JOIN

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

ตัวอย่าง:

SELECT employees.employee_name, departments.department_name
FROM employees
CROSS JOIN departments;

ในตัวอย่างนี้ CROSS JOIN จะทำให้ได้ผลลัพธ์เป็นการคูณทุกแถวจากตาราง employees กับทุกแถวจากตาราง departments

2. การใช้หลาย Join

เราสามารถใช้ JOIN หลายตัวในคำสั่งเดียว เพื่อเชื่อมตารางหลาย ๆ ตารางพร้อมกันได้

ตัวอย่าง:

SELECT orders.order_id, customers.customer_name, products.product_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id
INNER JOIN order_items ON orders.order_id = order_items.order_id
INNER JOIN products ON order_items.product_id = products.product_id;

ในตัวอย่างนี้ เรากำลังเชื่อมตาราง orders, customers, order_items, และ products โดยใช้ INNER JOIN เพื่อดึงข้อมูลการสั่งซื้อจากตารางทั้งหมดที่เกี่ยวข้อง

3. การใช้ Alias กับ Join

การใช้ Alias ช่วยให้การเขียน SQL ง่ายขึ้น โดยการตั้งชื่อย่อให้กับตาราง เพื่อทำให้คำสั่งดูสั้นและเข้าใจง่าย

ตัวอย่าง:

SELECT o.order_id, c.customer_name
FROM orders AS o
INNER JOIN customers AS c ON o.customer_id = c.customer_id;

ในตัวอย่างนี้ orders ถูกตั้งชื่อย่อเป็น o และ customers ถูกตั้งชื่อย่อเป็น c เพื่อให้คำสั่งดูสั้นลงและเข้าใจง่ายขึ้น

สรุป

การใช้ Joins ใน SQL เป็นเครื่องมือที่สำคัญในการดึงข้อมูลจากหลายตารางในครั้งเดียว โดยการเชื่อมข้อมูลจากคอลัมน์ที่เกี่ยวข้องในตารางต่าง ๆ ช่วยให้เราสามารถดูข้อมูลที่สัมพันธ์กันได้ในแบบเดียวกัน การเลือกประเภทของ JOIN ที่เหมาะสม เช่น INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, และ CROSS JOIN ขึ้นอยู่กับความต้องการของข้อมูลที่ต้องการดึงออกมา