Khoá học: Thiết lập dự án Wordpress

Nếu bạn đang tìm kiếm một cách nhanh chóng và hiệu quả để thiết lập một trang web cá nhân hoặc doanh nghiệp của mình, hãy bắt đầu với WordPress. Được coi là nền tảng quản lý nội dung (CMS) phổ biến nhất trên thế giới, WordPress cho phép bạn dễ dàng tạo ra một [...]

MySQL Bài 41: Tìm hiểu RIGHT JOIN trong MySQL

– Trong hệ quản trị cơ sở dữ liệu MySQL, lệnh RIGHT JOIN được sử dụng để kết hợp các hàng (từ hai cái bảng) lại thành một cái bảng tổng hợp.

– Trong đó, việc kết hợp các hàng sẽ được thực hiện dựa trên nguyên tắc như sau:

  • Tất cả các hàng bên trong cái bảng thứ hai (table2) sẽ được bắt cặp lần lượt với tất cả các hàng bên trong cái bảng thứ nhất (table1)
  • Những hàng mà dữ liệu trên nó thỏa điều kiện (condition) thì sẽ được giữ lại, còn những hàng mà dữ liệu trên nó không thỏa điều kiện thì sẽ bị loại bỏ.
  • Đối với những hàng trong cái bảng thứ hai (table2) không bắt cặp được với bất kỳ hàng nào bên trong cái bảng thứ nhất (table1) mà thỏa điều kiện thì nó sẽ được ghép với một hàng chứa toàn giá trị NULL.
SELECT *
FROM table1
RIGHT JOIN table2
ON condition;
table1
table2

Lưu ý: Khi hai cái bảng được kết hợp với nhau, các hàng trong cái bảng thứ nhất (table1) sẽ được đặt bên trái, các hàng trong cái bảng thứ hai (table2) sẽ được ghép bên phải.

MỘT SỐ VÍ DỤ THAM KHẢO

– Trong bài học này, tôi sẽ sử dụng hai cái bảng Customers & Orders như bên dưới để làm một số ví dụ minh họa.

CustomerIDCustomerNameCity
1Nguyễn Thành NhânCần Thơ
2Hoàng Nghĩa TuyếnVĩnh Long
3Trần Nguyễn Anh ThưHậu Giang
4Đinh Nguyên DươngTrà Vinh
OrderIDOrderDateCustomerIDTotal
12019-02-074180000
22019-02-181140000
32019-03-117280000
42019-04-223235000
52019-06-134220000
Ví dụ 1:
SELECT *
FROM Customers
RIGHT JOIN Orders
ON City="Cần Thơ" OR City="Hậu Giang"
ORDER BY OrderID ASC, Customers.CustomerID ASC;

– Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như sau.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ12019-02-074180000
3Trần Nguyễn Anh ThưHậu Giang12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang22019-02-181140000
1Nguyễn Thành NhânCần Thơ32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
1Nguyễn Thành NhânCần Thơ52019-06-134220000
3Trần Nguyễn Anh ThưHậu Giang52019-06-134220000
XEM GIẢI THÍCH
Ví dụ 2:
SELECT *
FROM Customers
RIGHT JOIN Orders
ON City="Sóc Trăng"
ORDER BY OrderID ASC, Customers.CustomerID ASC;

– Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như sau.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
NULLNULLNULL12019-02-074180000
NULLNULLNULL22019-02-181140000
NULLNULLNULL32019-03-117280000
NULLNULLNULL42019-04-223235000
NULLNULLNULL52019-06-134220000
XEM GIẢI THÍCH
Ví dụ 3:
SELECT OrderID, OrderDate, CustomerName, City, Total
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY OrderID ASC, Customers.CustomerID ASC;

– Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như sau.

OrderIDOrderDateCustomerNameCityTotal
12019-02-07Đinh Nguyên DươngTrà Vinh180000
22019-02-18Nguyễn Thành NhânCần Thơ140000
32019-03-11NULLNULL280000
42019-04-22Trần Nguyễn Anh ThưHậu Giang235000
52019-06-13Đinh Nguyên DươngTrà Vinh220000
XEM GIẢI THÍCH

GIẢI THÍCH VÍ DỤ 1

CustomerIDCustomerNameCity
1Nguyễn Thành NhânCần Thơ
2Hoàng Nghĩa TuyếnVĩnh Long
3Trần Nguyễn Anh ThưHậu Giang
4Đinh Nguyên DươngTrà Vinh
OrderIDOrderDateCustomerIDTotal
12019-02-074180000
22019-02-181140000
32019-03-117280000
42019-04-223235000
52019-06-134220000
SELECT *
FROM Customers
RIGHT JOIN Orders
ON City="Cần Thơ" OR City="Hậu Giang"
ORDER BY OrderID ASC, Customers.CustomerID ASC;

– Tất cả các hàng bên trong cái bảng thứ hai (Orders) sẽ được bắt cặp lần lượt với tất cả các hàng bên trong cái bảng thứ nhất (Customers)

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ12019-02-074180000
2Hoàng Nghĩa TuyếnVĩnh Long12019-02-074180000
3Trần Nguyễn Anh ThưHậu Giang12019-02-074180000
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
2Hoàng Nghĩa TuyếnVĩnh Long22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang22019-02-181140000
4Đinh Nguyên DươngTrà Vinh22019-02-181140000
1Nguyễn Thành NhânCần Thơ32019-03-117280000
2Hoàng Nghĩa TuyếnVĩnh Long32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
4Đinh Nguyên DươngTrà Vinh32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
2Hoàng Nghĩa TuyếnVĩnh Long42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh42019-04-223235000
1Nguyễn Thành NhânCần Thơ52019-06-134220000
2Hoàng Nghĩa TuyếnVĩnh Long52019-06-134220000
3Trần Nguyễn Anh ThưHậu Giang52019-06-134220000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Những hàng nào thỏa điều kiện City=”Cần Thơ” OR City=”Hậu Giang” thì được giữ lại, còn những hàng không thỏa điều kiện thì bị loại bỏ.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ12019-02-074180000
3Trần Nguyễn Anh ThưHậu Giang12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang22019-02-181140000
1Nguyễn Thành NhânCần Thơ32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
1Nguyễn Thành NhânCần Thơ52019-06-134220000
3Trần Nguyễn Anh ThưHậu Giang52019-06-134220000

GIẢI THÍCH VÍ DỤ 2

CustomerIDCustomerNameCity
1Nguyễn Thành NhânCần Thơ
2Hoàng Nghĩa TuyếnVĩnh Long
3Trần Nguyễn Anh ThưHậu Giang
4Đinh Nguyên DươngTrà Vinh
OrderIDOrderDateCustomerIDTotal
12019-02-074180000
22019-02-181140000
32019-03-117280000
42019-04-223235000
52019-06-134220000
SELECT *
FROM Customers
RIGHT JOIN Orders
ON City="Sóc Trăng"
ORDER BY OrderID ASC, Customers.CustomerID ASC;

– Tất cả các hàng bên trong cái bảng thứ hai (Orders) sẽ được bắt cặp lần lượt với tất cả các hàng bên trong cái bảng thứ nhất (Customers)

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ12019-02-074180000
2Hoàng Nghĩa TuyếnVĩnh Long12019-02-074180000
3Trần Nguyễn Anh ThưHậu Giang12019-02-074180000
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
2Hoàng Nghĩa TuyếnVĩnh Long22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang22019-02-181140000
4Đinh Nguyên DươngTrà Vinh22019-02-181140000
1Nguyễn Thành NhânCần Thơ32019-03-117280000
2Hoàng Nghĩa TuyếnVĩnh Long32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
4Đinh Nguyên DươngTrà Vinh32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
2Hoàng Nghĩa TuyếnVĩnh Long42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh42019-04-223235000
1Nguyễn Thành NhânCần Thơ52019-06-134220000
2Hoàng Nghĩa TuyếnVĩnh Long52019-06-134220000
3Trần Nguyễn Anh ThưHậu Giang52019-06-134220000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Những hàng nào thỏa điều kiện City=”Sóc Trăng” thì được giữ lại, còn những hàng không thỏa điều kiện thì bị loại bỏ (trong cái bảng phía trên không có bất kỳ hàng nào thỏa điều kiện, cho nên tất cả đều bị loại bỏ)

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal

– Trong cái bảng Orders, cả năm hàng đều không bắt cặp được với bất kỳ hàng nào trong bảng Customers thỏa điều kiện, cho nên mỗi hàng sẽ được ghép với một hàng chứa toàn giá trị NULL.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
NULLNULLNULL12019-02-074180000
NULLNULLNULL22019-02-181140000
NULLNULLNULL32019-03-117280000
NULLNULLNULL42019-04-223235000
NULLNULLNULL52019-06-134220000

GIẢI THÍCH VÍ DỤ 3

CustomerIDCustomerNameCity
1Nguyễn Thành NhânCần Thơ
2Hoàng Nghĩa TuyếnVĩnh Long
3Trần Nguyễn Anh ThưHậu Giang
4Đinh Nguyên DươngTrà Vinh
OrderIDOrderDateCustomerIDTotal
12019-02-074180000
22019-02-181140000
32019-03-117280000
42019-04-223235000
52019-06-134220000
SELECT OrderID, OrderDate, CustomerName, City, Total
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY OrderID ASC, Customers.CustomerID ASC;

– Tất cả các hàng bên trong cái bảng thứ hai (Orders) sẽ được bắt cặp lần lượt với tất cả các hàng bên trong cái bảng thứ nhất (Customers)

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ12019-02-074180000
2Hoàng Nghĩa TuyếnVĩnh Long12019-02-074180000
3Trần Nguyễn Anh ThưHậu Giang12019-02-074180000
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
2Hoàng Nghĩa TuyếnVĩnh Long22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang22019-02-181140000
4Đinh Nguyên DươngTrà Vinh22019-02-181140000
1Nguyễn Thành NhânCần Thơ32019-03-117280000
2Hoàng Nghĩa TuyếnVĩnh Long32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
4Đinh Nguyên DươngTrà Vinh32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
2Hoàng Nghĩa TuyếnVĩnh Long42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh42019-04-223235000
1Nguyễn Thành NhânCần Thơ52019-06-134220000
2Hoàng Nghĩa TuyếnVĩnh Long52019-06-134220000
3Trần Nguyễn Anh ThưHậu Giang52019-06-134220000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Những hàng nào thỏa điều kiện Customers.CustomerID = Orders.CustomerID thì được giữ lại, còn những hàng không thỏa điều kiện thì bị loại bỏ.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Trong cái bảng Orders, hàng có OrderID là 3 không bắt cặp được với bất kỳ hàng nào trong bảng Customers thỏa điều kiện, cho nên nó sẽ được ghép với một hàng chứa toàn giá trị NULL.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
NULLNULLNULL32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Ngoài ra, bởi vì lệnh SELECT chỉ lấy năm cột OrderID OrderDate CustomerName City Total cho nên hai cột CustomerID sẽ bị loại bỏ khỏi cái bảng kết hợp phía trên, đồng thời các cột sẽ được sắp xếp theo thứ tự như bên dưới.

OrderIDOrderDateCustomerNameCityTotal
12019-02-07Đinh Nguyên DươngTrà Vinh180000
22019-02-18Nguyễn Thành NhânCần Thơ140000
32019-03-11NULLNULL280000
42019-04-22Trần Nguyễn Anh ThưHậu Giang235000
52019-06-13Đinh Nguyên DươngTrà Vinh220000

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *