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

SQL Internal Join - Cách nối 3 bảng trong SQL và MySQL

Khi bạn đang làm việc với cơ sở dữ liệu của mình, bạn có thể cần tập hợp dữ liệu từ một vài bảng khác nhau. Bài viết này sẽ hướng dẫn bạn cách thực hiện.

Tôi đã viết về các phép nối SQL ở đây và ở đây, nhưng chúng ta hãy dành một chút thời gian để xem lại cách thức hoạt động của phép nối trước và đặc biệt là cú pháp dành riêng cho MySQL.

Câu lệnh kết hợp SQL

Tham gia là một câu lệnh cho phép bạn đặt hai bảng lại với nhau, khớp các hàng có liên quan với nhau và chỉ giữ lại các hàng có thể được khớp, không giữ các hàng chưa được ghép nối.

SELECT * FROM table1 
  INNER JOIN table2
  ON table1.id = table2.id;

SELECT ... FROM câu lệnh cho biết bảng nào là bảng đầu tiên, sau đó tên bảng thứ hai được viết ngay sau INNER JOIN từ khóa.

Cách nối hai bảng được viết trong ON tuyên bố. Trong trường hợp này, hai bảng được nối bằng mối quan hệ table1.id = table2.id .

Có thể sử dụng nhiều câu lệnh nối với nhau để tham gia nhiều bảng cùng một lúc.

SELECT *
  FROM table1
  INNER JOIN table2
  ON table1.id = table2.id
  INNER JOIN table3
  ON table2.id = table3.id;

Để làm điều đó, bạn thêm INNER JOIN thứ hai và một câu lệnh ON thứ hai câu lệnh để chỉ ra bảng thứ ba và mối quan hệ thứ hai.

Hãy nói một chút về mối quan hệ mà bạn có thể có giữa các bảng và lý do tại sao bạn có thể muốn nối ba bảng lại với nhau.

Mối quan hệ giữa các bảng trong SQL

Khi bạn có các bảng liên quan đến nhau, mối quan hệ của chúng có thể là một trong nhiều kiểu khác nhau.

một-nhiều

Theo kiểu quan hệ một-nhiều, một hàng của bảng đầu tiên có thể liên quan đến nhiều hàng của bảng thứ hai.

Trong cơ sở dữ liệu quan hệ, điều này có thể được triển khai với bảng thứ hai có first_table_id cột cho biết hàng đó có liên quan đến hàng nào của bảng đầu tiên.

nhiều-một

Theo kiểu quan hệ nhiều-một, một hàng của bảng đầu tiên có thể liên quan đến một hàng duy nhất của bảng thứ hai và một hàng của bảng thứ hai có thể liên quan đến nhiều hàng của bảng đầu tiên.

Trong cơ sở dữ liệu quan hệ, điều này có thể được triển khai với bảng đầu tiên có second_table_id cột cho biết hàng đó có liên quan đến hàng nào của bảng thứ hai.

nhiều đến nhiều

Trong trường hợp này, nhiều hàng có liên quan đến nhiều hàng.

Loại mối quan hệ này không thể được biểu diễn như với các bảng SQL - bạn cần thêm một bảng ghép nối giữa hai bảng để chỉ có các mối quan hệ nhiều-một và một-nhiều hiện diện giữa các bảng.

Mỗi hàng của bảng ở giữa đại diện cho một mối quan hệ giữa các hàng của bảng bên trái và các hàng của bảng bên phải.

Trong thực tế trong MySQL, bảng giữa đó sẽ có một cột cho first_table_id và một cột cho second_table_id , với mỗi kết hợp là duy nhất.

Tham gia các bảng SQL trong thực tế

Hãy tưởng tượng chúng ta có cơ sở dữ liệu của tổ chức, nơi chúng ta có một bảng với các nhóm (tên của họ và thông tin nhận dạng khác) và một bảng có các dự án (tên, tiến độ, v.v.).

id team_name chuyên môn
1 Ném chuối Chuối
2 Người gặm gỗ gặm gỗ
3 Những chú voi hồng Dậm chân xuống đất
4 Khoai tây mịn Làm việc và ngủ
id project_name tiến trình
1 Xây dựng đập Cần thêm một số động tác gặm gỗ và dẫm đất
2 Bánh chuối Ai đó đang ăn hết chuối
3 Nghiên cứu giấc ngủ Ngủ nhiều không đủ nghiên cứu

Vì một nhóm có thể làm việc trên nhiều dự án và một dự án có thể được thực hiện bởi nhiều nhóm, nên cũng có một bảng thứ ba theo dõi các trận đấu của nhóm-dự án.

project_id group_id
1 2
1 3
2 1
3 1
3 2
3 3
3 4

Chúng ta có thể sử dụng JOIN câu lệnh để kết hợp mọi thứ lại với nhau khi chúng ta cần xem thông tin từ các bảng theo cách con người có thể đọc được, như sau:

SELECT
  teams.team_name AS team_name,
  projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
  ON teams.id = matches.team_id
INNER JOIN matches
  ON matches.project_id = projects.id
ORDER BY teams.id;

Chúng tôi chọn các cột để hiển thị từ mỗi bảng bằng SELECT tuyên bố.

Chúng tôi chỉ định cách các hàng của bảng được kết hợp với một ON tuyên bố.

Và chúng tôi sắp xếp các hàng theo cách chúng tôi thích với ORDER BY tuyên bố.

ON câu lệnh teams.id = matches.team_idmatches.projects_id = projects.id nghĩa là các hàng được kết hợp bằng cách sử dụng các hàng của matches bàn. Mỗi hàng của bảng đầu ra có tên dự án và tên nhóm được kết hợp bằng cách sử dụng các cặp id dự án và id nhóm trong các matches bảng.

Bảng kết quả sẽ như dưới đây.

Team_name Project_name
Người ném chuối Bánh chuối
Ném chuối Nghiên cứu về giấc ngủ
Máy gặm gỗ Đập Bulding
Máy gặm gỗ Nghiên cứu về giấc ngủ
Những chú voi hồng Xây dựng đập
Những chú voi hồng Xây dựng đập
Khoai tây mịn Nghiên cứu về giấc ngủ

Không có cột nào trực tiếp từ matches bàn. matches bảng không được hiển thị trong đầu ra nhưng nó được sử dụng làm hướng dẫn về cách kết hợp các hàng của teams và các dự án projects bảng.

Kết luận

JOIN câu lệnh cho phép bạn kết hợp một hoặc nhiều bảng với nhau. Nó phải được sử dụng cùng với ON để xác định mối quan hệ giữa các hàng của một bảng và các hàng của một bảng khác nhau.

Trong bài viết này, bạn đã học cách sử dụng JOIN để kết hợp ba bảng khác nhau với nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sắp xếp lại / đặt lại khóa chính tăng tự động

  2. SYSDATE () so với NOW () trong MySQL:Sự khác biệt là gì?

  3. CONVERT_TZ - Cách thay đổi múi giờ MySQL trong truy vấn

  4. Kích thước bộ nhớ tối đa TINYTEXT, TEXT, MEDIUMTEXT và LONGTEXT

  5. Nhập từ và xuất sang tệp bằng dòng lệnh MySQL