跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

RIGHT JOIN คืออะไร?

บทความนี้อธิบายถึง `RIGHT JOIN` ใน SQL ซึ่งเป็นการรวมข้อมูลจากสองตาราง โดยเลือกข้อมูลทั้งหมดจากตารางทางด้านขวาและข้อมูลที่ตรงกันจากตารางทางด้านซ้ายเท่านั้น หากไ...

RIGHT JOIN คืออะไร?

หลังจากที่เราได้เรียนรู้เรื่อง LEFT JOIN กันไปแล้ว ในบทนี้เราจะมาทำความรู้จักกับ RIGHT JOIN ซึ่งเป็นพี่น้องฝาแฝดที่ทำงานคล้ายกัน แต่มีจุดเน้นที่แตกต่างกัน

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

ความแตกต่างระหว่าง LEFT JOIN และ RIGHT JOIN

หัวใจสำคัญที่ต้องจำคือ:

  • LEFT JOIN: เอาข้อมูลทั้งหมดจากตารางซ้าย และข้อมูลที่ตรงกันจากตารางขวา
  • RIGHT JOIN: เอาข้อมูลทั้งหมดจากตารางขวา และข้อมูลที่ตรงกันจากตารางซ้าย

ถ้าเรามองในแง่ของตารางที่จะถูก "รักษา" ข้อมูลไว้ทั้งหมด:

  • LEFT JOIN: รักษาข้อมูลทั้งหมดจากตารางซ้าย
  • RIGHT JOIN: รักษาข้อมูลทั้งหมดจากตารางขวา

จริงๆ แล้ว RIGHT JOIN สามารถเขียนใหม่ให้เป็น LEFT JOIN ได้เสมอ โดยการสลับตำแหน่งของตาราง แต่บางครั้งการใช้ RIGHT JOIN จะทำให้โค้ดอ่านง่ายขึ้นในบางสถานการณ์

โครงสร้างของ RIGHT JOIN

รูปแบบการใช้งาน RIGHT JOIN ใน SQL มีดังนี้:

SELECT column1, column2, ...
FROM table_name_left
RIGHT JOIN table_name_right
ON table_name_left.column_name = table_name_right.column_name;

อธิบาย:

  • SELECT column1, column2, ...: ระบุคอลัมน์ที่ต้องการแสดงผล
  • FROM table_name_left: ระบุตารางทางด้านซ้าย
  • RIGHT JOIN table_name_right: ระบุว่าเป็นการ RIGHT JOIN กับตารางทางด้านขวา
  • ON table_name_left.column_name = table_name_right.column_name: ระบุเงื่อนไขในการรวมตาราง โดยปกติจะเป็นการเปรียบเทียบคอลัมน์ที่เชื่อมโยงกัน (Foreign Key)

ตัวอย่างการใช้งาน RIGHT JOIN

สมมติว่าเรามีสองตาราง:

  • customers: เก็บข้อมูลลูกค้า
  • orders: เก็บข้อมูลการสั่งซื้อ

ตาราง customers:

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(255)
);

INSERT INTO customers (customer_id, customer_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');

ตาราง orders:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

INSERT INTO orders (order_id, customer_id, order_date) VALUES
(101, 1, '2023-10-26'),
(102, 2, '2023-10-27'),
(103, 2, '2023-10-28'),
(104, 4, '2023-10-29'); -- ลูกค้า ID 4 ไม่มีในตาราง customers

สังเกตว่ามี order ที่มี customer_id = 4 ซึ่งไม่มีอยู่ในตาราง customers

เราต้องการแสดงรายการการสั่งซื้อทั้งหมด พร้อมชื่อลูกค้าที่สั่งซื้อ หากไม่มีลูกค้าที่สั่งซื้อ (เช่น customer_id = 4) ให้แสดงชื่อลูกค้าเป็น NULL เราสามารถใช้ RIGHT JOIN ได้ดังนี้:

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

ผลลัพธ์:

order_id | customer_name | order_date
----------|---------------|------------
101      | Alice         | 2023-10-26
102      | Bob           | 2023-10-27
103      | Bob           | 2023-10-28
104      | NULL          | 2023-10-29

จะเห็นว่า order_id = 104 แสดง customer_name เป็น NULL เนื่องจากไม่มีลูกค้าที่มี customer_id = 4 ในตาราง customers

กรณีใช้งานจริงของ RIGHT JOIN

RIGHT JOIN มักถูกใช้ในสถานการณ์ที่ต้องการแสดงข้อมูลทั้งหมดจากตาราง "หลัก" (ในที่นี้คือ orders) และข้อมูลที่เกี่ยวข้องจากตารางอื่น (customers) แม้ว่าข้อมูลที่เกี่ยวข้องนั้นอาจไม่มีอยู่จริง

ตัวอย่างเช่น:

  • แสดงรายการสินค้าทั้งหมดในคลังสินค้า พร้อมจำนวนที่ถูกสั่งซื้อ (ถ้ามี)
  • แสดงรายการพนักงานทั้งหมดในบริษัท พร้อมจำนวนโปรเจกต์ที่รับผิดชอบ (ถ้ามี)
  • แสดงรายการประเทศทั้งหมด พร้อมจำนวนประชากร (ถ้ามีข้อมูล)

ข้อควรระวังและข้อผิดพลาดที่พบบ่อย

  • สลับตารางผิด: จำไว้เสมอว่า RIGHT JOIN จะเลือกข้อมูลทั้งหมดจากตารางทางด้านขวา หากสลับตารางผิด ผลลัพธ์จะไม่เป็นไปตามที่ต้องการ
  • ลืมเงื่อนไข ON: หากลืมระบุเงื่อนไข ON จะทำให้เกิด Cartesian Product ซึ่งจะสร้างผลลัพธ์ที่มีจำนวนแถวมากเกินไปและไม่ถูกต้อง
  • เข้าใจผิดว่าเป็น LEFT JOIN: เนื่องจาก RIGHT JOIN สามารถเขียนใหม่ให้เป็น LEFT JOIN ได้ การเลือกใช้ขึ้นอยู่กับความเหมาะสมและความเข้าใจของแต่ละคน แต่ต้องระวังไม่ให้สับสน
  • ประสิทธิภาพ: ในบางกรณี การใช้ RIGHT JOIN อาจทำให้ Query Optimizer ทำงานได้ไม่ดีเท่าที่ควร ลองพิจารณาใช้ LEFT JOIN แทนโดยการสลับตาราง

สรุป

RIGHT JOIN เป็นเครื่องมือที่มีประโยชน์ในการรวมข้อมูลจากสองตาราง โดยเน้นที่การรักษาข้อมูลทั้งหมดจากตารางทางด้านขวาไว้ แม้ว่าข้อมูลที่เกี่ยวข้องจากตารางทางด้านซ้ายอาจไม่มีอยู่จริง การเข้าใจหลักการทำงานและข้อควรระวังของ RIGHT JOIN จะช่วยให้คุณสามารถเขียน Queries ที่มีประสิทธิภาพและถูกต้องมากยิ่งขึ้น

ในบทต่อไป เราจะมาเรียนรู้เรื่อง FULL OUTER JOIN ซึ่งเป็นการรวมข้อมูลจากทั้งสองตารางโดยไม่ทิ้งข้อมูลใดๆ เลย

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务