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 JOINmệnh đề trongSELECTthứ hai thay vào đó, hãy chuyển đổi vị trí củacatsvàdogsbảng. -
UNION ALLmệ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. -
WHEREmệnh đề trongSELECTthứ 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 đề.