Devdit
 

SQL Join แบบต่างๆ พร้อมตัวอย่าง

323

บทความนี้สอน SQL Join แบบต่างๆ ประกอบด้วย 3 แบบ คือ INNER JOIN, LEFT OUTER JOIN และ RIGHT OUTER JOIN โดย Join เป็นวิธีการจับคู่ข้อมูลของ 2 ตารางที่มีความสัมพันธ์กันด้วยคำสั่ง SQL โดยมีรายละเอียดดังนี้

 

ตัวอย่าง SQL Join แบบต่างๆ

1. INNER JOIN หรือ JOIN คือ การแสดงข้อมูลที่เหมือนกันของทั้ง 2 ตาราง หากข้อมูลใดไม่ตรงกันจะไม่ถูกแสดง

2. LEFT OUTER JOIN หรือ LEFT JOIN คือ การจับคู่ข้อมูล 2 ตารางโดยจะแสดงข้อมูลทั้งหมดที่มีของตารางฝั่งซ้ายมือ หรือตารางแรกที่ถูกเขียน SQL

3. RIGHT OUTER JOIN หรือ RIGHT JOIN คือ การจับคู่ข้อมูล 2 ตารางโดยจะแสดงข้อมูลทั้งหมดที่มีของตารางฝั่งขวามือ หรือตารางที่สองที่ถูกเขียน SQL

 

ตัวอย่าง SQL และโครงสร้างตาราง

1. ตาราง products มี field id เป็น primary key และ category_id เป็น foreign key

CREATE TABLE `products` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  `category_id` int DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `category_id` (`category_id`),
  CONSTRAINT `products_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `categorys` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `products` (`id`, `title`, `price`, `category_id`) VALUES
(1,	'Computer',	200.00,	1),
(2,	'Notebook',	180.00,	1),
(3,	'Mobile phone',	100.00,	2),
(4,	'iPad',	300.00,	2),
(5,	'iPod',	200.00,	2),
(6,	'Mouse', 50.00,	3),
(7,	'Keyboard', 40.00, 3),
(8,	'iPhone', 500.00, NULL);
idtitlepricecategory_id
1Computer200.001
2Notebook180.001
3Mobile phone100.002
4iPad300.002
5iPod200.002
6Mouse50.003
7Keyboard40.003
8iPhone500.00NULL

 

2. ตาราง categorys มี field id เป็น primary key

CREATE TABLE `categorys` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `categorys` (`id`, `title`) VALUES
(1,	'Computer'),
(2,	'Gadget'),
(3,	'Accessory'),
(4,	'Battery');
idtitle
1Computer
2Gadget
3Accessory
4Battery

 

ตัวอย่าง SQL Join แบบ INNER JOIN

SELECT *
FROM products p
INNER JOIN categorys c ON ( p.category_id = c.id ) 

ผลลัพธ์

idtitlepricecategory_ididtitle
1Computer200.0011Computer
2Notebook180.0011Computer
3Mobile phone100.0022Gadget
4iPad300.0022Gadget
5iPod200.0022Gadget
6Mouse50.0033Accessory
7Keyboard40.0033Accessory

จากคำสั่ง SQL จะแสดงข้อมูลที่เหมือนกันของตาราง products (field category_id เป็น foreign key) กับตาราง categorys (field id เป็น primary key)

 

 

ตัวอย่าง SQL Join แบบ LEFT OUTER JOIN

SELECT *
FROM products p
LEFT OUTER JOIN categorys c ON ( p.category_id = c.id )

ผลลัพธ์

idtitlepricecategory_ididtitle
1Computer200.0011Computer
2Notebook180.0011Computer
3Mobile phone100.0022Gadget
4iPad300.0022Gadget
5iPod200.0022Gadget
6Mouse50.0033Accessory
7Keyboard40.0033Accessory
8iPhone500.00NULLNULLNULL

จากคำสั่ง SQL จะแสดงข้อมูลทั้งหมดจากตารางฝั่งซ้าย หรือตารางแรกที่อ้างถึง คือ products จึงทำให้แสดงข้อมูล หมายเลข 8 iPhone ด้วย แต่ข้อมูลจากตาราง categorys นั้นไม่มี (NULL) เนื่องจาก categoy_id ของหมายเลข 8 ไม่มีความสัมพันธ์กับตาราง categorys

 

ตัวอย่าง SQL Join แบบ RIGHT OUTER JOIN

SELECT *
FROM products p
RIGHT OUTER JOIN categorys c ON ( p.category_id = c.id )

ผลลัพธ์

idtitlepricecategory_ididtitle
1Computer200.0011Computer
2Notebook180.0011Computer
3Mobile phone100.0022Gadget
4iPad300.0022Gadget
5iPod200.0022Gadget
6Mouse50.0033Accessory
7Keyboard40.0033Accessory
NULLNULLNULLNULL4Battery

จากคำสั่ง SQL จะแสดงข้อมูลทั้งหมดจากตารางฝั่งขวา หรือตารางที่สองที่ถูกอ้างถึง คือ ตาราง categorys แต่ field id หมายเลข 4 ของตาราง categorys ไม่มีความสัมพันธ์ใดๆ กับ field category_id ของตาราง products จึงทำให้ข้อมูลจากตาราง products จึงไม่มีค่า (NULL)

 

สรุป บทความนี้สอน SQL Join แบบต่างๆ พร้อมตัวอย่าง ได้แก่ INNER JOIN, LEFT OUTER JOIN และ RIGHT OUTER JOIN ซึ่งการ Join ทั้ง 3 แบบนั้นควรใช้ในสถานการณ์ที่เหมาะสมเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง

แก้ไข 2 เดือนที่แล้ว
ชอบ
ลิ้งก์
แชร์
Devdit มีช่อง YouTube แล้ว
เราสร้างวิดีโอเกี่ยวกับเทคโนโลยี ทำตามง่ายๆ