Tóm tắt :trong hướng dẫn này, bạn sẽ học cách mô phỏng liên kết bên ngoài đầy đủ của SQLite bằng cách sử dụng UNION
và LEFT JOIN
mệnh đề.
Giới thiệu về SQL FULL OUTER JOIN
mệnh đề
Về lý thuyết, kết quả của FULL OUTER JOIN
là sự kết hợp của LEFT JOIN
và RIGHT JOIN
. Tập hợp kết quả của phép nối bên ngoài đầy đủ có NULL
giá trị cho mọi cột của bảng không có hàng phù hợp trong bảng khác. Đối với các hàng phù hợp, FULL OUTER JOIN
tạo ra một hàng với các giá trị từ các cột của các hàng trong cả hai bảng.
Hình ảnh sau đây minh họa kết quả của FULL OUTER JOIN
mệnh đề:
Xem cats
sau và dogs
bảng.
-- create and insert data into the dogs table
CREATE TABLE dogs (
type TEXT,
color TEXT
);
INSERT INTO dogs(type, color)
VALUES('Hunting','Black'), ('Guard','Brown');
-- create and insert data into the cats table
CREATE TABLE cats (
type TEXT,
color TEXT
);
INSERT INTO cats(type,color)
VALUES('Indoor','White'),
('Outdoor','Black');
Code language: SQL (Structured Query Language) (sql)
Câu lệnh sau sử dụng FULL OUTER JOIN
mệnh đề truy vấn dữ liệu từ dogs
và cats
bảng.
SELECT *
FROM dogs
FULL OUTER JOIN cats
ON dogs.color = cats.color;
Code language: SQL (Structured Query Language) (sql)
Sau đây là kết quả của câu lệnh trên:
Loại | Màu sắc | Loại | Màu sắc |
---|---|---|---|
Săn bắt | Đen | Ngoài trời | Đen |
Người bảo vệ | Màu nâu | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ |
KHÔNG ĐỦ | KHÔNG ĐẦY ĐỦ | Trong nhà | Màu trắng |
Rất tiếc, SQLite không hỗ trợ RIGHT JOIN
và cả FULL OUTER JOIN
mệnh đề. Tuy nhiên, bạn có thể dễ dàng mô phỏng FULL OUTER JOIN
bằng cách sử dụng LEFT JOIN
mệnh đề.
Mô phỏng tham gia bên ngoài đầy đủ của SQLite
Câu lệnh sau mô phỏng FULL OUTER JOIN
mệnh đề trong SQLite:
SELECT d.type,
d.color,
c.type,
c.color
FROM dogs d
LEFT JOIN cats c USING(color)
UNION ALL
SELECT d.type,
d.color,
c.type,
c.color
FROM cats c
LEFT JOIN dogs d USING(color)
WHERE d.color IS NULL;
Code language: SQL (Structured Query Language) (sql)
Cách hoạt động của truy vấn.
- Vì SQLilte không hỗ trợ
RIGHT JOIN
, chúng tôi sử dụngLEFT JOIN
mệnh đề trongSELECT
thứ hai thay vào đó, hãy chuyển đổi vị trí củacats
vàdogs
bảng. -
UNION ALL
mệnh đề giữ lại các hàng trùng lặp từ tập kết quả của cả hai truy vấn. -
WHERE
mệnh đề trongSELECT
thứ hai câu lệnh xóa các hàng đã có trong tập kết quả củaSELECT
đầu tiên tuyên bố.
Trong hướng dẫn này, bạn đã học cách sử dụng UNION ALL
và LEFT JOIN
mệnh đề để mô phỏng SQLite FULL OUTER JOIN
mệnh đề.