SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

SQLite tự tham gia

Tóm tắt :trong hướng dẫn này, bạn sẽ tìm hiểu về một kiểu liên kết đặc biệt được gọi là SQLite self-join cho phép bạn tham gia bảng với chính nó.

Lưu ý rằng bạn nên làm quen với INNER JOINLEFT JOIN các mệnh đề trước khi tiếp tục với hướng dẫn này.

Giới thiệu về tự tham gia SQLite

Tự tham gia là một loại liên kết đặc biệt cho phép bạn tham gia một bảng với chính nó bằng cách sử dụng LEFT JOIN hoặc INNER JOIN mệnh đề. Bạn sử dụng tự nối để tạo tập hợp kết quả nối các hàng với các hàng khác trong cùng một bảng.

Vì bạn không thể tham chiếu đến cùng một bảng nhiều hơn một bảng trong một truy vấn, bạn cần sử dụng bí danh bảng để gán tên khác cho bảng khi bạn sử dụng tự nối.

Phép nối tự so sánh các giá trị của các cột giống nhau hoặc khác nhau trong cùng một bảng. Chỉ một bảng tham gia vào quá trình tự tham gia.

Bạn thường sử dụng tự nối để truy vấn mối quan hệ cha mẹ / con cái được lưu trữ trong bảng hoặc để lấy tổng số đang chạy.

Các ví dụ về tự nối SQLite

Chúng tôi sẽ sử dụng employees trong cơ sở dữ liệu mẫu để trình diễn.

employees bảng lưu trữ không chỉ dữ liệu nhân viên mà còn dữ liệu tổ chức. ReportsTo chỉ định mối quan hệ báo cáo giữa các nhân viên.

Nếu một nhân viên báo cáo với người quản lý, giá trị của ReportsTo cột của hàng nhân viên bằng giá trị của EmployeeId trong hàng của người quản lý. Trong trường hợp nhân viên không báo cáo cho bất kỳ ai, ReportsTo cột là NULL .

Để biết thông tin về ai là người báo cáo trực tiếp cho ai, bạn sử dụng câu lệnh sau:

SELECT m.firstname || ' ' || m.lastname AS 'Manager',
       e.firstname || ' ' || e.lastname AS 'Direct report' 
FROM employees e
INNER JOIN employees m ON m.employeeid = e.reportsto
ORDER BY manager;Code language: SQL (Structured Query Language) (sql)

Hãy thử nó

Câu lệnh đã sử dụng INNER JOIN điều khoản tham gia employees cho chính nó. employees bảng có hai vai trò:nhân viên và người quản lý.

Bởi vì chúng tôi đã sử dụng INNER JOIN điều khoản tham gia employees bảng cho chính nó, tập kết quả không có hàng có cột trình quản lý chứa NULL giá trị.

Lưu ý rằng toán tử nối || nối nhiều chuỗi thành một chuỗi duy nhất. Trong ví dụ này, chúng tôi sử dụng toán tử nối từ tên đầy đủ của các nhân viên bằng cách ghép tên, khoảng trắng và họ.

Trong trường hợp bạn muốn truy vấn CEO không báo cáo với ai, bạn cần thay đổi INNER JOIN mệnh đề LEFT JOIN mệnh đề trong truy vấn ở trên.

Andrew Adams là Giám đốc điều hành vì anh ta không báo cáo bất kỳ ai.

Bạn có thể sử dụng kỹ thuật tự tham gia để tìm các nhân viên ở cùng thành phố với truy vấn sau:

SELECT DISTINCT
	e1.city,
	e1.firstName || ' ' || e1.lastname AS fullname
FROM
	employees e1
INNER JOIN employees e2 ON e2.city = e1.city 
   AND (e1.firstname <> e2.firstname AND e1.lastname <> e2.lastname)
ORDER BY
	e1.city;Code language: SQL (Structured Query Language) (sql)

Hãy thử nó

Điều kiện nối có hai biểu thức:

  • e1.city = e2.city để đảm bảo rằng cả hai nhân viên đều ở cùng một thành phố
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname để đảm bảo rằng e1e2 không phải là cùng một nhân viên với giả định rằng không có nhân viên nào trùng họ và tên.

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách sử dụng kỹ thuật tự nối SQLite để nối một bảng với chính nó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách / thứ tự được đề xuất để đọc dữ liệu từ một dịch vụ web, phân tích cú pháp dữ liệu đó và chèn nó vào db SQLite

  2. tại sao tôi không tạo được bảng này trên android SQLite?

  3. SQLiteException:bảng đã tồn tại

  4. Đã tìm thấy rò rỉ cơ sở dữ liệu SQLite

  5. Khóa chính xử lý vương quốc Android trong đối tượng quan hệ