SQL THAM GIA được sử dụng để lấy dữ liệu từ nhiều bảng. SQL THAM GIA được thực hiện bất cứ khi nào hai hoặc nhiều bảng được liệt kê trong câu lệnh SQL
Có 4 kiểu nối SQL khác nhau
- SQL INNER THAM GIA [đôi khi được gọi là tham gia đơn giản]
- SQL LEFT OUTER JOIN [đôi khi được gọi là LEFT JOIN]
- SQL RIGHT OUTER JOIN [đôi khi được gọi là RIGHT JOIN]
- THAM GIA ĐẦY ĐỦ NGOÀI SQL [đôi khi được gọi là THAM GIA ĐẦY ĐỦ]
Vì vậy, hãy thảo luận về cú pháp SQL THAM GIA, xem các minh họa trực quan về SQL THAM GIA và khám phá một số ví dụ
DDL/DML cho các ví dụ
Nếu bạn muốn làm theo hướng dẫn này, hãy lấy DDL để tạo bảng và DML để điền dữ liệu. Sau đó thử các ví dụ trong cơ sở dữ liệu của riêng bạn
Nhận DDL/DML
SQL INNER THAM GIA [tham gia đơn giản]
Rất có thể, bạn đã viết một câu lệnh SQL sử dụng SQL INNER JOIN. Đây là kiểu nối SQL phổ biến nhất. SQL INNER THAM GIA trả về tất cả các hàng từ nhiều bảng khi điều kiện tham gia được đáp ứng
cú pháp
Cú pháp của INNER JOIN trong SQL là
SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;
Minh họa trực quan
Trong sơ đồ trực quan này, SQL INNER JOIN trả về vùng được tô bóng
SQL INNER JOIN sẽ trả về các bản ghi nơi bảng1 và bảng2 giao nhau
Ví dụ
Hãy xem một ví dụ về cách sử dụng INNER JOIN trong một truy vấn
Trong ví dụ này, chúng tôi có một bảng được gọi là khách hàng với dữ liệu sau
khách hàng_idlast_namefirst_namefavorite_website4000JacksonJoetechonthenet. com5000SmithJanedigminecraft. com6000FergusonSamanthabighoạt động. com7000ReynoldsAllencheckyourmath. com8000AndersonPaigeNULL9000JohnsonDerektechonthenet. com
Và một bảng gọi là đơn đặt hàng với dữ liệu sau
order_idcustomer_idorder_date170002016/04/18250002016/04/18380002016/04/19440002016/04/205NULL2016/05/01
Nhập câu lệnh SQL sau
Thử điSELECT customers.customer_id, orders.order_id, orders.order_date FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id ORDER BY customers.customer_id;
Sẽ có 4 bản ghi được chọn. Đây là những kết quả mà bạn sẽ thấy
customer_idorder_idorder_date400042016/04/20500022016/04/18700012016/04/18800032016/04/19
Ví dụ này sẽ trả về tất cả các hàng từ bảng khách hàng và đơn hàng có giá trị customer_id phù hợp trong cả bảng khách hàng và đơn hàng
Các hàng mà customer_id bằng 6000 và 9000 trong bảng khách hàng sẽ bị bỏ qua vì chúng không tồn tại trong cả hai bảng. Hàng có order_id là 5 trong bảng đơn hàng sẽ bị bỏ qua, vì khách hàng_id của NULL không tồn tại trong bảng khách hàng
Cú pháp cũ
Lưu ý cuối cùng, điều đáng nói là ví dụ INNER JOIN ở trên có thể được viết lại bằng cách sử dụng cú pháp ẩn cũ hơn như sau [nhưng chúng tôi vẫn khuyên bạn nên sử dụng cú pháp từ khóa INNER JOIN]
Thử điSELECT customers.customer_id, orders.order_id, orders.order_date FROM customers, orders WHERE customers.customer_id = orders.customer_id ORDER BY customers.customer_id;
SQL TRÁI NGOÀI THAM GIA
Một kiểu nối khác được gọi là LEFT OUTER JOIN. Loại phép nối này trả về tất cả các hàng từ bảng bên TRÁI được chỉ định trong điều kiện BẬT và chỉ những hàng từ bảng khác nơi các trường được nối bằng nhau [đáp ứng điều kiện nối]
cú pháp
Cú pháp của LEFT OUTER JOIN trong SQL là
SELECT columns FROM table1 LEFT [OUTER] JOIN table2 ON table1.column = table2.column;
Trong một số cơ sở dữ liệu, từ khóa OUTER được bỏ qua và được viết đơn giản là LEFT JOIN
Minh họa trực quan
Trong sơ đồ trực quan này, SQL LEFT OUTER JOIN trả về vùng được tô bóng
SQL LEFT OUTER JOIN sẽ trả về tất cả các bản ghi từ bảng1 và chỉ những bản ghi từ bảng2 giao với bảng1
Ví dụ
Bây giờ hãy xem một ví dụ cho thấy cách sử dụng LEFT OUTER JOIN trong câu lệnh SELECT
Sử dụng cùng một bảng khách hàng như ví dụ trước
khách hàng_idlast_namefirst_namefavorite_website4000JacksonJoetechonthenet. com5000SmithJanedigminecraft. com6000FergusonSamanthabighoạt động. com7000ReynoldsAllencheckyourmath. com8000AndersonPaigeNULL9000JohnsonDerektechonthenet. com
Và bảng đơn đặt hàng với dữ liệu sau
order_idcustomer_idorder_date170002016/04/18250002016/04/18380002016/04/19440002016/04/205NULL2016/05/01
Nhập câu lệnh SQL sau
Thử điSELECT customers.customer_id, orders.order_id, orders.order_date FROM customers LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id ORDER BY customers.customer_id;
Sẽ có 6 bản ghi được chọn. Đây là những kết quả mà bạn sẽ thấy
customer_idorder_idorder_date400042016/04/20500022016/04/186000NULLNULL700012016/04/18800032016/04/199000NULLNULL
Ví dụ LEFT OUTER THAM GIA này sẽ trả về tất cả các hàng từ bảng khách hàng và chỉ những hàng từ bảng đơn đặt hàng nơi các trường đã tham gia bằng nhau
Nếu giá trị customer_id trong bảng khách hàng không tồn tại trong bảng đơn hàng, thì tất cả các trường trong bảng đơn hàng sẽ hiển thị dưới dạng NULL trong tập hợp kết quả. Như bạn có thể thấy, các hàng có customer_id là 6000 và 9000 sẽ được bao gồm nhưng các trường order_id và order_date cho các bản ghi đó chứa giá trị NULL. Hàng có order_id là 5 cũng sẽ được bao gồm nhưng trường customer_id cho bản ghi đó có giá trị NULL