April 15, 2026

SQL JOIN

Part of SQL

Join

การ Join คือการเชื่อมข้อมูลระหว่างตารางหลักและตารางอื่นที่มีช้อมูลเกี่ยวข้องกันผ่าน Primary Key (คีย์หลัก) และ Foreign Key (คีย์ที่เชื่อมข้อมูลจากตารางหลัก)

+-------------------+          +----------------------+
|     Customers     |          |        Orders        |
+-------------------+          +----------------------+
| PK customer_id    |<---------| FK customer_id       |
| name              |          | PK order_id          |
| email             |          | order_date           |
+-------------------+          +----------------------+

Join using WHERE

จากตัวอย่าง สามารถ JOIN แบบนี้

SELECT
	C.customer_id,
	C.name CustomerName,
	C.email CustomerEmail,
	O.order_id OrderId,
	O.otder_date OrderDate
FROM Customers C, Orders O
WHERE C.customer_id = O.order_id

Inner Join

ตือ Join เอาข้อมูลเฉพาะที่มีข้อมูลทั้งสองตาราง

เปลี่ยนคำสั่ง WHERE เป็น JOIN ไปนิดเดียวได้แบบนี้

SELECT
	C.customer_id,
	C.name CustomerName,
	C.email CustomerEmail,
	O.order_id OrderId,
	O.otder_date OrderDate
FROM customers C
INNER JOIN orders O ON C.customer_id = O.order_id

เพิ่ม WHERE ได้หลัง Join

SELECT
	C.customer_id,
	C.name CustomerName,
	C.email CustomerEmail,
	O.order_id OrderId,
	O.otder_date OrderDate
FROM customers C
INNER JOIN orders O ON C.customer_id = O.order_id
WHERE C.name LIKE 'A%'

อยาก Join หลายตาราง สามารถต่อกันแบบนี้

SELECT
	C.customer_id,
	C.name CustomerName,
	C.email CustomerEmail,
	O.order_id OrderId,
	O.order_date OrderDate,
	P.product_name ProductName
FROM customers C
INNER JOIN orders O ON C.customer_id = O.order_id
INNER JOIN product P ON O.product_id = P.id

Left Join

คือ Join โดยเอาตารางหลักเป็นตัวตั้ง และเชื่อมกับตารางเกี่ยวข้อง โดยที่ตารางที่เชื่อมจะมีข้อมูลหรือไม่ก็ได้

SELECT
	C.customer_id,
	C.name CustomerName,
	C.email CustomerEmail,
	O.order_id OrderId,
	O.otder_date OrderDate
FROM customers C
LEFT JOIN orders O ON C.customer_id = O.order_id

Right Join

ใน SQL ไม่มี Clause Supported Right Join โดยตรงแต่สามารถทำ right join ก็คือวางตารางที่ต้องการเชื่อมอยู่ทางซ้าย แลพตารางหลักอยู่ทางขวานั่นเอง

Full Join

คือ Join โดยที่ยอมให้ทั้งสองตารางไม่มีข้อมูลก็ได้ (* SQL Not Supported)

Cross Join

คือ การจับคู่ค่าทุกค่าของทั้งสองตาราง แล้วจะได้ตารางใหม่ที่มีจำนวนแถวเท่ากับผลคูณของแถวสองตาราง

SELECT * from a, b

หรือ

SELECT * from a CROSS JOIN b

Self Join

ใช้เชื่อมข้อมูลของตัวเอง แสดงถึงความสัมพันธ์กันเอง เช่น Employee กับ Manager

ทำได้ด้วย การใช้ WHERE

SELECT
	e1.name staff,
	e1.level staff_level,
	e2.name  manager,
	e2.level manager_level,
FROM Employee e1, Employee e2
WHERE e1.manager_id = e2.id