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

SQL tự tham gia

Bài viết này cung cấp tổng quan về tự nối trong SQL, cũng như một ví dụ cơ bản.

Tự tham gia là gì?

SQL SELF JOIN đang tham gia một bảng với chính nó. Nó có thể hữu ích để truy vấn dữ liệu phân cấp trong cùng một bảng hoặc so sánh các hàng trong cùng một bảng.

Ví dụ 1 - Tự còn lại tham gia

Một ví dụ cổ điển về tự tham gia là trong bảng Nhân viên. Trong một bảng như vậy, một nhân viên có thể báo cáo cho một nhân viên khác. Do đó, bạn có thể sử dụng tự nối để tham gia vào bảng trên cột ID nhân viên và cột ID người quản lý.

Giả sử chúng ta có bảng sau:

+--------------+-------------+------------+-------------+
| EmployeeId   | FirstName   | LastName   | ReportsTo   |
|--------------+-------------+------------+-------------|
| 1            | Homer       | Connery    | NULL        |
| 2            | Bart        | Pitt       | 1           |
| 3            | Maggie      | Griffin    | 1           |
| 4            | Peter       | Farnsworth | 2           |
| 5            | Marge       | Morrison   | NULL        |
| 6            | Lisa        | Batch      | 5           |
| 7            | Dave        | Zuckerberg | 6           |
| 8            | Vlad        | Cook       | 7           |
+--------------+-------------+------------+-------------+

Chúng ta có thể thực hiện tự kết hợp trái trên bảng này để trả lại tất cả nhân viên và người quản lý của họ.

SELECT
    CONCAT(e1.FirstName, ' ', e1.LastName) AS Employee,
    CONCAT(e2.FirstName, ' ', e2.LastName) AS Manager
FROM Employees e1
LEFT JOIN Employees e2 
ON e1.ReportsTo = e2.EmployeeId;

Kết quả:

+------------------+-----------------+
| Employee         | Manager         |
|------------------+-----------------|
| Homer Connery    |                 |
| Bart Pitt        | Homer Connery   |
| Maggie Griffin   | Homer Connery   |
| Peter Farnsworth | Bart Pitt       |
| Marge Morrison   |                 |
| Lisa Batch       | Marge Morrison  |
| Dave Zuckerberg  | Lisa Batch      |
| Vlad Cook        | Dave Zuckerberg |
+------------------+-----------------+

Homer Connery và Marge Morrison không báo cáo cho bất kỳ ai và vì vậy Manager của họ trường trống. Trên thực tế, nó sẽ là NULL nếu tôi chưa thực hiện nối chuỗi trên hai cột.

Ví dụ 2 - Tham gia tự bên trong

Nếu chúng tôi không muốn trả lại hai đầu honchos, thì chúng tôi có thể thực hiện nối bên trong trên bàn. Điều này sẽ loại bỏ bất kỳ hàng nào không khớp trong cả hai bảng (tức là những nhân viên không có người quản lý tương ứng và ngược lại).

SELECT
    CONCAT(e1.FirstName, ' ', e1.LastName) AS Employee,
    CONCAT(e2.FirstName, ' ', e2.LastName) AS Manager
FROM Employees e1
INNER JOIN Employees e2 
ON e1.ReportsTo = e2.EmployeeId;

Kết quả:

+------------------+-----------------+
| Employee         | Manager         |
|------------------+-----------------|
| Bart Pitt        | Homer Connery   |
| Maggie Griffin   | Homer Connery   |
| Peter Farnsworth | Bart Pitt       |
| Lisa Batch       | Marge Morrison  |
| Dave Zuckerberg  | Lisa Batch      |
| Vlad Cook        | Dave Zuckerberg |
+------------------+-----------------+

Ví dụ 3 - Tự quyền

Nếu chúng tôi muốn thực hiện một phép nối tự quyền, chúng tôi sẽ cần xáo trộn một vài cột xung quanh trong truy vấn.

SELECT
    CONCAT(e1.FirstName, ' ', e1.LastName) AS Manager,
    CONCAT(e2.FirstName, ' ', e2.LastName) AS Employee
FROM Employees e1
RIGHT JOIN Employees e2
ON e1.EmployeeId = e2.ReportsTo;

Kết quả:

+-----------------+------------------+
| Manager         | Employee         |
|-----------------+------------------|
|                 | Homer Connery    |
| Homer Connery   | Bart Pitt        |
| Homer Connery   | Maggie Griffin   |
| Bart Pitt       | Peter Farnsworth |
|                 | Marge Morrison   |
| Marge Morrison  | Lisa Batch       |
| Lisa Batch      | Dave Zuckerberg  |
| Dave Zuckerberg | Vlad Cook        |
+-----------------+------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nghệ thuật tổng hợp dữ liệu trong SQL từ các tổng hợp đơn giản đến trượt

  2. Huyền thoại về hiệu suất:Quá kích thước cột chuỗi

  3. Ký hiệu chân chim

  4. Làm việc với Dữ liệu ODBC trong DbVisualizer

  5. Hướng dẫn phân tích dữ liệu:Đã đến lúc nổi trội bằng cách sử dụng Excel!