Tìm hiểu về phép nối cross join trong SQL server

Trong bài viết này của comdy.vn, bạn sẽ tìm hiểu cách sử dụng phép nối cross join trong SQL Server để truy vấn dữ liệu từ hai hoặc nhiều bảng không liên quan. Cùng theo dõi ngay nhé.

Giới thiệu về cross join SQL – Cross join là gì?

Cross join là gì
Trong SQL server, phép nối cross join ít được sử dụng hơn so với các loại join khác vì ý nghĩa của nó

Cross join sql là gì? Cross join sql server hay còn được gọi là tích đề – các. Trong sql thì cross join sẽ trả về tổ hợp của tất cả các hàng từ bảng đầu tiên với tất cả hàng từ bảng thứ 2. Điều này có nghĩa số hàng trong bảng kết quả cuối cùng là tích của số hàng bảng đầu tiên và số hàng bảng thứ 2.

Phần sau đây minh họa cú pháp của CROSS JOIN trong  SQL Server để truy vấn dữ liệu từ hai bảng:

SELECT
	select_list
FROM
	T1
CROSS JOIN T2;

Mệnh đề CROSS JOIN sẽ nối mỗi bản ghi từ bảng đầu tiên (T1) với mỗi bản ghi từ bảng thứ hai (T2). Nói cách khác CROSS JOIN trả về tích Đề Các các bản ghi từ cả hai bảng.

Không giống như mệnh đề INNER JOIN, LEFT JOIN, RIGHT JOIN hay FULL OUTER JOIN. CROSS JOIN không thiết lập mối quan hệ giữa các bảng được join.

Giả sử bảng T1 chứa ba bản ghi 1, 2 và 3 và bảng T2 chứa ba bản ghi A, B và C.

Mệnh đề CROSS JOIN lấy một bản ghi từ bảng đầu tiên (T1) và sau đó tạo một bản ghi mới cho mỗi bản ghi trong bảng thứ hai (T2). Sau đó, nó làm tương tự cho bản ghi tiếp theo trong bảng đầu tiên (T1), v.v.

Ví dụ về cross join trong SQL Server

Ví dụ về cross join trong SQL Server
Tìm hiểu rõ hơn về phép nối cross join trong SQL server thông qua ví dụ cụ thể

Như vậy bạn đã hiểu được what is cross join. Lệnh join trong sql được sử dụng thường xuyên, liên tục. Sau đây sẽ là những ví dụ cụ thể để giúp bạn hiểu rõ hơn về phép cross join trong sql:

Câu lệnh sau đây trả về một tập kết quả là sự kết hợp của tất cả các sản phẩm và cửa hàng. Tập kết quả có thể được sử dụng cho thủ tục kiểm kê trong thời gian đóng cửa cuối tháng và cuối năm:

SELECT
    product_id,
    product_name,
    store_id,
    0 AS quantity
FROM
    production.products
CROSS JOIN sales.stores
ORDER BY
    product_name,
    store_id;

Câu lệnh sau đây tìm kiếm các sản phẩm không có doanh số trên các cửa hàng:

SELECT
    s.store_id,
    p.product_id,
    ISNULL(sales, 0) sales
FROM
    sales.stores s
CROSS JOIN production.products p
LEFT JOIN (
    SELECT
        s.store_id,
        p.product_id,
        SUM (quantity * i.list_price) sales
    FROM
        sales.orders o
    INNER JOIN sales.order_items i ON i.order_id = o.order_id
    INNER JOIN sales.stores s ON s.store_id = o.store_id
    INNER JOIN production.products p ON p.product_id = i.product_id
    GROUP BY
        s.store_id,
        p.product_id
) c ON c.store_id = s.store_id
AND c.product_id = p.product_id
WHERE
    sales IS NULL
ORDER BY
    product_id,
    store_id;

Trong hướng dẫn này, bạn đã học cách sử dụng sql server cross join để tạo tích Đề Các từ các bảng đã join.

Giống và khác của cross join và cross apply trong SQL server

Giống và khác của cross join và cross apply
Tìm hiểu, phân tích sự giống và khác nhau của cross join và cross apply trong SQL server

Nhiều người hay có sự nhầm lẫn giữa cross join sql là gì và sql cross apply. Tuy nhiên cách dùng và ý nghĩa của chúng là hoàn toàn khác nhau.

Giống nhau

Cả hai phép cross join in sql server và cross apply in sql server đều sử dụng để kết hợp dữ liệu từ nhiều nguồn.

Khác nhau

Cross apply được sử dụng để áp dụng một bảng chi tiết lên mỗi dòng của bảng chính. Nó liên kết các dòng của bảng chính với kết quả của một bảng chi tiết áp dụng cho từng dòng.

Sử dụng từ khóa CROSS APPLY và một hàm hoặc truy vấn áp dụng cho mỗi dòng.

SELECT *
FROM table1
CROSS APPLY dbo.FunctionName(table1.column) AS AliasName;

Trong đoạn mã trên, dbo.FunctionName có thể là một hàm trả về bảng chi tiết. Và AliasName là tên bí danh cho bảng chi tiết áp dụng.

Tóm lại, cross join tạo ra tất cả các tổ hợp có thể giữa các dòng từ hai bảng. Trong khi đó, cross apply sử dụng một bảng chi tiết để áp dụng cho từng dòng của bảng chính.

Outer apply trong SQL là gì?

Outer apply trong SQL là gì
OUTER APPLY là phép nối bao gồm các dòng từ bảng chính ngay cả khi không có kết quả từ bảng chi tiết (được áp dụng).

OUTER APPLY là một phép toán trong SQL Server, tương tự như CROSS APPLY, nhưng với sự khác biệt chính là OUTER APPLY bao gồm các dòng từ bảng chính ngay cả khi không có kết quả từ bảng chi tiết (được áp dụng).

Một số tính chất của outer apply trong sql:

  • OUTER APPLY giữ tất cả các dòng từ bảng chính, ngay cả khi không có kết quả từ bảng chi tiết.
  • Nếu không có kết quả từ bảng chi tiết, các cột của bảng chi tiết sẽ chứa giá trị NULL.
  • Sử dụng từ khóa OUTER APPLY và một hàm hoặc truy vấn áp dụng cho mỗi dòng của bảng chính.

Kết hợp cross join where trong SQL server

Đây là một cách kết hợp thường thấy và thường áp dụng trong mọi bài toán. Kết hợp CROSS JOIN và WHERE trong SQL Server có thể thực hiện như sau để lọc kết quả của phép CROSS JOIN:

Ví dụ, giả sử bạn có hai bảng table1 và table2, và bạn muốn thực hiện một CROSS JOIN giữa chúng và sau đó áp dụng một điều kiện WHERE để lọc kết quả:

CREATE TABLE table1 (
    ID INT PRIMARY KEY,
    Name NVARCHAR(50)
);
INSERT INTO table1 VALUES (1, ‘A’), (2, ‘B’), (3, ‘C’);
CREATE TABLE table2 (
    Code CHAR(1) PRIMARY KEY
);
INSERT INTO table2 VALUES (‘X’), (‘Y’), (‘Z’);
SELECT *
FROM table1
CROSS JOIN table2
WHERE table1.ID = 1;

Các kiểu join trong SQL là gì?

Các kiểu join trong SQL là gì
Các loại join trong sql server bao gồm có: INNER JOIN, OUTER JOIN và CROSS JOIN.

Inner join trong SQL server

Kết quả từ phép nối inner join trong sql server chính là tập hợp dữ liệu mà trong đó giá trị dùng để join 2 table với nhau đều có ở cả 2 bảng. Có nghĩa là kết quả là giao của 2 tập hợp dữ liệu. Các bản ghi chỉ duy nhất xuất hiện ở 1 trong 2 bảng dẽ bị loại.

Ví dụ:

SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo

FROM DIEM_THI A INNER JOIN HOC_VIEN B ON A.MaHV = B.MaHV

Outer join trong SQL server

Outer join trong SQL server
Outer join là phép nối lấy toàn bộ dữ liệu ở table bên trái và với những dòng dữ liệu tương ứng ở bên phải

Left outer join trong sql

Phép nối này lấy toàn bộ dữ liệu ở table bên trái và với những dòng dữ liệu tương ứng ở bên phải. Nếu như không có dữ liệu tương ứng với bảng bên phải thì kết quả trả về là null.

Ví dụ:

SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo

FROM DIEM_THI A LEFT OUTER JOIN HOC_VIEN B ON A.MaHV = B.MaHV

Right outer join trong sql

Phép nối này lấy toàn bộ dữ liệu ở table bên phải và với những dòng dữ liệu tương ứng ở bên trái. Nếu như không có dữ liệu tương ứng với bảng bên trái thì kết quả trả về là null.

Ví dụ:

SELECT A.MonHoc,A.MaHV,B.MaHV MaHV2,B.HoTen,B.MaLop,A.DiemSo

FROM DIEM_THI A RIGHT OUTER JOIN HOC_VIEN B ON A.MaHV = B.MaHV

Full outer join trong sql

Kết quả của phép nối này là tất cả các bản ghi của cả 2 bảng được nối. Với những bản ghi chỉ xuất hiện ở 1 bảng thì các cột dữ liệu từ bảng kia được điền vào giá trị null.

Ví dụ:

SELECT A.MonHoc,A.MaHV,B.MaHV MaHV2,B.HoTen,B.MaLop,A.DiemSo

FROM DIEM_THI A FULL OUTER JOIN HOC_VIEN B ON A.MaHV = B.MaH

Cross join trong SQL server

Phép nối này ta đã tìm hiểu ở trên. Đây là phép nối ít được sử dụng hơn so với các loại join ở trên vì ý nghĩa của nó. Kết quả trả về của cross join là số dòng của bảng bên trái x số dòng của bảng bên phải. Ví dụ bảng DIEM_THI có 12 dòng, bảng HOC_VIEN có 12 dồng thì kết quả là 12 x 12 = 144 dòng.

Ví dụ:

SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo

FROM DIEM_THI A CROSS JOIN HOC_VIEN B

Kết lại

Trên đây là toàn bộ chia sẻ của comdy.vn về phép nối cross join trong sql server. Hi vọng những chia sẻ trong bài viết này sẽ giúp bạn hiểu rõ hơn và áp dụng phép nối một cách thuần thục, chính xác. Xin cám ơn vì đã theo dõi, ủng hộ bài viết.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *