Nối ba bảng trong SQL

Noi Ba Bang Trong Sql



Trong cơ sở dữ liệu quan hệ, nhiệm vụ lấy dữ liệu từ nhiều bảng là cực kỳ phổ biến. Tùy thuộc vào kết quả mục tiêu, điều này liên quan đến việc nối nhiều bảng thành một đơn vị duy nhất và tìm nạp dữ liệu kết quả.

Khi nói đến việc nối, hầu hết chúng ta chủ yếu làm việc với giới hạn của hai bảng, v.v. Tuy nhiên, thông thường cần phải nối ba bảng để có được bố cục và thông tin chi tiết về dữ liệu có ý nghĩa hơn. Lấy ví dụ nơi bạn muốn truy xuất danh sách phim, kho phim cho thuê tương ứng của chúng và chi tiết thuê thực tế. Mỗi đơn vị như phim, kho hàng và chi tiết cho thuê đều nằm trong các bảng riêng lẻ.

Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn các phép nối và kỹ thuật khác nhau mà bạn có thể sử dụng để nối ba bảng trong SQL.







Yêu cầu:

Với mục đích trình diễn, chúng tôi sẽ sử dụng MySQL phiên bản 80 và cơ sở dữ liệu mẫu Sakila. Để làm theo, bạn có thể tải xuống và thiết lập cơ sở dữ liệu Sakila trong máy chủ MySQL của mình. Vui lòng sử dụng bất kỳ tập dữ liệu nào khác mà bạn cho là có thể áp dụng được.



Các kiểu kết nối trong SQL

Trước khi bắt đầu ứng dụng các phép nối, chúng ta hãy bắt đầu bằng cách thảo luận về các loại phép nối khác nhau có sẵn trong cơ sở dữ liệu SQL.



THAM GIA TRONG

Kiểu kết nối đầu tiên là INNER JOIN. Kiểu nối này chỉ trả về các hàng chứa giá trị khớp trong cả hai bảng. Đây là kiểu nối rất phổ biến và đơn giản nhất khi nối hai bảng.





Cú pháp như sau:

CHỌN cột

TỪ bảng 1

Bảng INNER THAM GIA2 TRÊN tên bảng1.column_= tên bảng2.column_;

CHỖ NỐI BÊN TRÁI

Trong trường hợp THAM GIA TRÁI, nó trả về tất cả các hàng từ bảng bên trái và các hàng khớp từ bảng bên phải. Nếu không có giá trị nào phù hợp từ bảng bên phải, phép nối sẽ thêm các giá trị NULL vào vị trí của chúng.



Cú pháp như sau:

CHỌN cột

TỪ bảng 1

Bảng THAM GIA TRÁI2 TRÊN tên bảng1.column_= tên bảng2.column_;

QUYỀN THAM GIA

Như bạn có thể đoán, RIGHT JOIN trái ngược với LEFT JOIN. Kiểu kết nối này trả về tất cả các hàng từ bảng bên phải và chỉ các hàng phù hợp từ bảng bên trái. Nếu không có hàng nào khớp ở bảng bên trái, phép nối sẽ thêm các giá trị NULL vào đó.

Sau đây là cú pháp của RIGHT JOIN:

CHỌN cột

TỪ bảng 1

PHẢI THAM GIA bảng2 TRÊN tên bảng1.column_= tên bảng2.column_;

THAM GIA BÊN NGOÀI ĐẦY ĐỦ

Kiểu nối tiếp theo mà bạn sẽ gặp trong cơ sở dữ liệu SQL là THAM GIA ĐẦY ĐỦ. Kiểu nối này trả về tất cả các hàng khi có sự trùng khớp ở bảng bên phải hoặc bên trái. Nếu không có giá trị trùng khớp ở một trong hai giá trị, nó sẽ trả về NULL cho các cột trong bảng không khớp.

Phần sau đây minh họa cú pháp của FULL OUTER JOIN:

CHỌN cột

TỪ bảng 1

Bảng THAM GIA NGOÀI ĐẦY ĐỦ2 TRÊN tên bảng1.column_= tên bảng2.column_;

Cần lưu ý rằng không phải tất cả các công cụ cơ sở dữ liệu đều hỗ trợ THAM GIA NGOÀI ĐẦY ĐỦ. Để đạt được điều đó, bạn có thể cần phải làm việc với các loại THAM GIA hoặc truy vấn phụ khác.

Ví dụ:

Chúng ta hãy khám phá một số ví dụ về cách chúng ta có thể sử dụng các kiểu nối này để nối ba bảng trong SQL.

Ví dụ 1: Sử dụng INNER JOIN

Chúng ta bắt đầu với INNER JOIN. Giả sử chúng ta muốn truy xuất danh sách phim, kho cho thuê và thông tin chi tiết cho thuê tương ứng.

Chúng ta có thể sử dụng nhiều INNER JOINS trên các bảng được liên kết như trong ví dụ sau:

LỰA CHỌN

Tên phim,

Inventory.inventory_id,

Rent.rental_date

TỪ

phim ảnh

INNER THAM GIA hàng tồn kho TRÊN

phim.film_id = Inventory.film_id

Cho thuê INNER THAM GIA TRÊN

Inventory.inventory_id = Rental.inventory_id;

Trong truy vấn mẫu đã cho, chúng tôi bắt đầu bằng cách nối các bảng phim và kho hàng dựa trên cột “film_id”. Sau đó, chúng tôi lấy tập kết quả và nối nó với bảng cho thuê dựa trên cột “inventory_id”.

Điều này đảm bảo rằng chúng ta nối ba bảng bằng INNER JOIN cơ bản. Tập hợp kết quả như sau:

Ví dụ 2: Sử dụng INNER JOIN và LEFT JOIN

Giả sử bây giờ chúng ta muốn có danh sách phim, danh sách kho cho thuê (nếu có) và các chi tiết cho thuê liên quan.

Chúng tôi cũng muốn đảm bảo rằng ngay cả khi phim không có danh sách cho thuê, chúng tôi vẫn đưa phim đó vào kết quả. Đây là lúc INNER JOIN và LEFT JOIN phát huy tác dụng.

Hãy xem xét ví dụ sau:

LỰA CHỌN

Tên phim,

Inventory.inventory_id,

Rent.rental_date

TỪ

phim ảnh

INNER THAM GIA hàng tồn kho TRÊN

phim.film_id = Inventory.film_id

Cho thuê LEFT THAM GIA TRÊN

Inventory.inventory_id = Rental.inventory_id;

Trong ví dụ này, chúng tôi sử dụng INNER JOIN để nối phim và bảng khoảng không quảng cáo nhằm đảm bảo rằng chúng tôi nhận được các tựa phim có khoảng không quảng cáo có sẵn. Sau đó, chúng tôi sử dụng LEFT JOIN để tham gia bảng cho thuê nhằm tìm nạp thông tin chi tiết cho thuê nếu có và NULL cho bất kỳ tiêu đề nào không có lịch sử cho thuê.

Tập hợp kết quả như sau:

Phần kết luận

Trong hướng dẫn này, chúng ta đã tìm hiểu về các loại THAM GIA khác nhau trong SQL, cách chúng hoạt động và cách chúng ta có thể sử dụng chúng để kết hợp ba bảng.